Zum Hauptinhalt springen

VPA (Vertical Pod Autoscaler)

Vertical Pod Autoscaler(VPA)는 Kubernetes 파드의 CPU와 메모리 request/limit 값을 자동으로 분석하고 최적화하는 컴포넌트입니다. Lumie 인프라에서는 권장사항 제공(Recommendation Only) 모드로 운영하며, Goldilocks 대시보드를 통해 시각화합니다.

배포 구성

  • 네임스페이스: vpa
  • 차트: vpa v4.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가 권장값을 제시하면 다음 절차로 적용합니다:

  1. Goldilocks 대시보드에서 권장값 확인
  2. 현재 워크로드 특성과 비교하여 적절성 검토
  3. 해당 서비스의 Helm values 파일에 반영:
resources:
requests:
cpu: <recommended-request>
memory: <recommended-request>
limits:
memory: <recommended-limit>
# CPU limit은 설정하지 않음 (안정성 우선)
  1. 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

VPA 오브젝트 권장값 확인

# 특정 네임스페이스의 VPA 오브젝트 목록
kubectl get vpa -n <namespace>

# VPA 권장값 상세 확인
kubectl describe vpa -n <namespace> <vpa-name>

# 모든 네임스페이스 VPA 상태 (권장값 포함)
kubectl get vpa -A -o json | \
jq '.items[] | {name: .metadata.name, namespace: .metadata.namespace, recommendations: .status.recommendation}'

권장값이 없는 경우

Recommender가 충분한 데이터를 수집하지 못한 경우 권장값이 나타나지 않습니다. 일반적으로 워크로드가 실행된 후 수 시간 내에 초기 권장값이 생성됩니다.

# Metrics Server 동작 확인
kubectl top pods -n <namespace>

# VPA 이벤트 확인
kubectl events -n vpa

관련 문서