Kubernetes 환경에서 Application은 운영 중 Traffic 변화와 사용량 변화가 발생합니다.
처음 설정한 CPU와 Memory 값이 실제 사용량과 맞지 않으면 다음 문제가 발생할 수 있습니다.
Resource 부족
↓
Application 성능 저하
또는
과도한 Resource 설정
↓
불필요한 비용 증가
이 문제를 해결하기 위해 Kubernetes는 Vertical Pod Autoscaler(VPA)를 제공합니다.
VPA는 Pod의 CPU와 Memory Request 값을 분석하고 자동으로 조정하는 Kubernetes Resource 최적화 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| VPA | Resource 자동 조정 |
| Recommender | 사용량 분석 |
| Updater | Pod 업데이트 |
| Admission Controller | Resource 적용 |
| Metrics Server | 사용량 데이터 제공 |
VPA 구조를 이해하면 Kubernetes 환경에서 효율적인 Resource 운영과 비용 최적화를 할 수 있습니다.
Kubernetes VPA란?
VPA(Vertical Pod Autoscaler)는 Container의 Resource Request 값을 자동으로 조정하는 Kubernetes Component입니다.
기존 방식:
관리자가 CPU/Memory 설정
↓
실제 사용량 확인
↓
수동 수정
VPA 방식:
사용량 분석
↓
적절한 Resource 계산
↓
자동 적용
Application에 맞는 Resource 크기를 유지합니다.
Kubernetes VPA가 필요한 이유
Resource 설정은 운영에서 어려운 부분입니다.
예:
Application A
설정:
CPU 4 Core
Memory 8GB
실제 사용:
CPU 500m
Memory 1GB
결과:
불필요한 Resource 낭비
VPA는 적절한 크기로 조정하여 효율성을 높입니다.
Kubernetes VPA Architecture
구조:
Pod
↓
Metrics Server
↓
VPA Recommender
↓
VPA Updater
↓
Admission Controller
↓
Pod Resource 변경
각 Component가 역할을 분리하여 동작합니다.
Kubernetes VPA 주요 Component
VPA Recommender
역할:
- Container 사용량 분석
- 적절한 CPU 계산
- 적절한 Memory 계산
Metrics 데이터를 기반으로 추천 값을 생성합니다.
VPA Updater
역할:
- 기존 Pod 확인
- Resource 변경 필요 판단
- Pod 재생성 수행
Resource 변경을 적용합니다.
VPA Admission Controller
역할:
- 새 Pod 생성 시 Resource 적용
- 추천 값 삽입
Pod 시작 단계에서 적용됩니다.
Kubernetes VPA 동작 과정
Application 실행
↓
Metrics 수집
↓
VPA Recommender 분석
↓
Resource 추천
↓
Updater 판단
↓
Pod 재생성
↓
새 Resource 적용
자동 최적화 과정입니다.
Kubernetes VPA와 HPA 차이
많이 혼동되는 기능입니다.
| 구분 | VPA | HPA |
|---|---|---|
| 목적 | Resource 크기 조정 | Pod 개수 조정 |
| 대상 | CPU/Memory Request | Replica 수 |
| 방식 | Vertical Scaling | Horizontal Scaling |
| 사용 | 최적화 | 트래픽 대응 |
두 기능은 서로 다른 목적을 가집니다.
Kubernetes VPA와 HPA 함께 사용하기
주의가 필요합니다.
HPA:
CPU 사용률 기준 Replica 증가
VPA:
CPU Request 변경
둘을 동시에 CPU 기준으로 사용하면 충돌 가능성이 있습니다.
일반적으로:
HPA:
Replica 관리
VPA:
Memory 최적화
방식으로 조합합니다.
Kubernetes VPA Resource Policy
VPA는 Container별 정책을 설정할 수 있습니다.
관리:
- 최소 CPU
- 최대 CPU
- 최소 Memory
- 최대 Memory
예:
resourcePolicy:
containerPolicies:
- containerName: app
minAllowed:
cpu: 100m
maxAllowed:
cpu: 2
안전한 범위를 지정할 수 있습니다.
Kubernetes VPA Update Mode
VPA는 여러 Update Mode를 제공합니다.
| Mode | 설명 |
|---|---|
| Off | 추천만 제공 |
| Initial | 생성 시 적용 |
| Recreate | Pod 재생성 적용 |
| Auto | 자동 결정 |
운영 환경에서는 테스트 후 적용하는 것이 좋습니다.
Kubernetes VPA 설치 구조
VPA 구성:
- Recommender
- Updater
- Admission Controller
확인:
kubectl get pods -n kube-system
VPA Component 상태를 확인합니다.
Kubernetes VPA 설정 예시
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: app-vpa
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: app
updatePolicy:
updateMode: Auto
Deployment Resource를 자동 관리합니다.
Kubernetes VPA 장애 분석
VPA 문제가 발생하면 확인합니다.
VPA 상태 확인
kubectl get vpa
상세 확인
kubectl describe vpa app-vpa
확인:
- Recommendation 값
- Update 상태
- Admission Controller 오류
Kubernetes VPA와 비용 최적화
Cloud 환경에서는 Resource 설정이 비용과 연결됩니다.
VPA 적용:
실제 사용량 분석
↓
불필요한 Resource 감소
↓
Node 활용률 증가
↓
Cloud 비용 절감
FinOps 전략과 연결됩니다.
Kubernetes VPA 운영 전략
Production 환경:
1단계
Off Mode로 분석
↓
2단계
추천값 검토
↓
3단계
Initial 적용
↓
4단계
Auto 적용
점진적인 적용이 안정적입니다.
Kubernetes VPA Monitoring
확인 항목:
- Resource Recommendation
- Pod Restart
- CPU 사용량
- Memory 사용량
Monitoring 시스템과 함께 운영합니다.
Kubernetes VPA 장점
| 장점 | 설명 |
|---|---|
| Resource 최적화 | 적정 CPU·Memory 설정 |
| 비용 절감 | 불필요한 Resource 감소 |
| 자동 관리 | 수동 조정 감소 |
| 성능 개선 | 부족한 Resource 보완 |
VPA는 Kubernetes Resource 최적화의 핵심 기능입니다.
자주 묻는 질문
VPA가 Pod 개수를 늘리나요?
아닙니다.
VPA는 CPU와 Memory 크기를 조정합니다.
VPA와 HPA 중 어떤 것을 사용해야 하나요?
트래픽 변화는 HPA, Resource 최적화는 VPA를 사용합니다.
VPA 적용 시 서비스 중단이 발생하나요?
Update Mode에 따라 Pod 재생성이 발생할 수 있습니다.
마무리
Kubernetes VPA는 Pod의 CPU와 Memory Resource를 자동으로 분석하고 최적화하는 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| Recommender | 사용량 분석 |
| Updater | 변경 적용 |
| Admission Controller | Resource 삽입 |
| Metrics Server | 데이터 제공 |
VPA 구조를 이해하면 Kubernetes Cluster Resource를 효율적으로 운영하고 Cloud 비용을 최적화할 수 있습니다.
다음 글에서는 Kubernetes 자동 확장 핵심 기능인 Kubernetes Horizontal Pod Autoscaler(HPA) 완벽 가이드! Traffic 증가와 Pod 자동 확장 구조 이해하기를 진행하겠습니다.