VPA (Vertical Pod Autoscaler)
Vertical Pod Autoscaler(VPA)는 Kubernetes 파드의 CPU와 메모리 request/limit 값을 자동으로 분석하고 최적화하는 컴포넌트입니다. Lumie 인프라에서는 권장사항 제공(Recommendation Only) 모드로 운영하며, Goldilocks 대시보드를 통해 시각화합니다.
배포 구성
- 네임스페이스:
vpa - 차트:
vpav4.6.0 (Fairwinds) - 이미지:
zot.lumie-infra.com/autoscaling/vpa-recommender:1.5.1 - 운영 모드: 권장사항 제공만 (자동 적용 비활성화)
활성화된 컴포넌트
| 컴포넌트 | 상태 | 설명 |
|---|---|---|
| Recommender | 활성화 | 과거 리소스 사용량 분석 및 권장값 계산 |
| Updater | 비활성화 | 권장값을 파드에 자동 적용 |
| Admission Controller | 비활성화 | 새 파드 생성 시 리소스 자동 주입 |
Updater와 Admission Controller를 비활성화한 이유는 updateMode: Off 정책을 사용하기 때문입니다. 자동 적용은 파드 재시작을 유발하므로 프로덕션 안정성을 위해 수동 검토 후 적용하는 방식을 채택했습니다.
Recommender 설정
recommender:
enabled: true
replicaCount: 1
image:
repository: zot.lumie-infra.com/autoscaling/vpa-recommender
tag: "1.5.1"
resources:
requests:
cpu: 15m
memory: 100Mi
limits:
memory: 100Mi # CPU 제한 없음 (안정성 우선)
updateMode 정책
VPA 오브젝트는 Goldilocks Controller가 자동으로 생성하며, 기본적으로 updateMode: Off로 설정됩니다:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: <deployment-name>
namespace: <namespace>
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: <deployment-name>
updatePolicy:
updateMode: "Off" # 권장사항만 계산, 자동 적용 안 함
VPA 운영 흐름
Goldilocks와의 통합
VPA는 Goldilocks Controller가 생성하는 VPA 오브젝트의 권장값 계산 엔진으로 동작합니다. Goldilocks는 goldilocks.fairwinds.com/enabled: 'true' 라벨이 있는 모든 네임스페이스의 Deployment에 대해 VPA 오브젝트를 자동 생성합니다.
자세한 내용은 Goldilocks 문서를 참조하세요.
리소스 권장값 적용 절차
VPA가 권장값을 제시하면 다음 절차로 적용합니다:
- Goldilocks 대시보드에서 권장값 확인
- 현재 워크로드 특성과 비교하여 적절성 검토
- 해당 서비스의 Helm values 파일에 반영:
resources:
requests:
cpu: <recommended-request>
memory: <recommended-request>
limits:
memory: <recommended-limit>
# CPU limit은 설정하지 않음 (안정성 우선)
- ArgoCD를 통해 자동 배포
ArgoCD 특이 사항
VPA Recommender가 CPU limit을 동적으로 변경할 수 있어 ArgoCD가 이를 drift로 감지합니다. 이를 방지하기 위해 ignoreDifferences가 설정되어 있습니다:
ignoreDifferences:
- group: apps
kind: Deployment
jqPathExpressions:
- .spec.template.spec.containers[].resources.limits.cpu
문제 해결
VPA Recommender 상태 확인
# VPA Recommender 파드 상태
kubectl get pods -n vpa
# VPA Recommender 로그
kubectl logs -n vpa deploy/vpa-recommender