Skip to main content

Goldilocks

Goldilocks는 Kubernetes Vertical Pod Autoscaler(VPA)의 추천 데이터를 시각화하는 대시보드 도구입니다. 각 파드에 적합한 CPU/메모리 request 및 limit 값을 제안하여 리소스 낭비를 방지하고 안정적인 운영을 지원합니다.

배포 구성

  • 네임스페이스: goldilocks
  • 차트: goldilocks v8.0.2 (Fairwinds)
  • 이미지: zot.lumie-infra.com/fairwinds-ops/oss/goldilocks:v4.10.0
  • 접근 방법: Teleport (외부 인그레스 비활성화)

아키텍처

구성 요소

Controller

controller:
enabled: true
replicaCount: 1
resources:
requests:
cpu: 15m
memory: 100Mi
limits:
memory: 100Mi

네임스페이스에 goldilocks.fairwinds.com/enabled: 'true' 라벨이 붙은 경우 해당 네임스페이스의 모든 Deployment에 대해 VPA 오브젝트를 자동 생성합니다.

Dashboard

dashboard:
enabled: true
replicaCount: 1
image:
repository: zot.lumie-infra.com/fairwinds-ops/oss/goldilocks
tag: "v4.10.0"
resources:
requests:
cpu: 15m
memory: 100Mi
limits:
memory: 100Mi
service:
type: ClusterIP
port: 80
ingress:
enabled: false # Teleport를 통해서만 접근

네임스페이스 활성화

Goldilocks가 모니터링할 네임스페이스에 다음 라벨을 추가합니다:

managedNamespaceMetadata:
labels:
goldilocks.fairwinds.com/enabled: 'true'

Lumie 인프라에서는 모든 관찰 가능성 네임스페이스에 이 라벨이 자동으로 적용되어 있습니다. ArgoCD syncPolicy.managedNamespaceMetadata를 통해 각 컴포넌트의 ArgoCD Application 배포 시 자동으로 설정됩니다.

VPA 통합

Goldilocks는 자체적으로 VPA를 설치하지 않고 별도로 배포된 VPA 컴포넌트를 사용합니다:

vpa:
enabled: false # VPA는 별도 Chart로 관리 (observability/vpa)

VPA 설정에 대한 자세한 내용은 VPA 문서를 참조하세요.

리소스 권장사항 해석

Goldilocks 대시보드에서 제공하는 권장값의 의미:

항목설명
Guaranteed QoSrequests == limits로 설정 — 예측 가능한 성능이 필요한 경우
Burstable QoSrequests < limits로 설정 — 일반적으로 권장되는 설정
Current현재 설정된 request/limit 값
RecommendedVPA가 과거 사용량 기반으로 제안하는 값

파드 배치

affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/name: goldilocks
topologyKey: kubernetes.io/hostname

ArgoCD 특이 사항

Goldilocks Controller는 VPA의 권장에 따라 CPU limit을 동적으로 변경하므로 ArgoCD가 이를 out-of-sync로 감지할 수 있습니다. 이를 방지하기 위해 ignoreDifferences가 설정되어 있습니다:

ignoreDifferences:
- group: apps
kind: Deployment
jqPathExpressions:
- .spec.template.spec.containers[].resources.limits.cpu

접근 방법

# Teleport 앱 로그인 (설정된 경우)
tsh app login goldilocks

# 포트 포워딩 (개발용)
kubectl port-forward -n goldilocks svc/goldilocks-dashboard 8080:80
# http://localhost:8080 에서 대시보드 접근

문제 해결

VPA 오브젝트가 생성되지 않는 경우

# 네임스페이스 라벨 확인
kubectl get namespace --show-labels | grep goldilocks

# Goldilocks Controller 로그 확인
kubectl logs -n goldilocks deploy/goldilocks-controller

# 생성된 VPA 오브젝트 확인
kubectl get vpa -A

권장값이 표시되지 않는 경우

VPA Recommender가 충분한 메트릭 데이터를 수집하지 못한 경우 권장값이 없을 수 있습니다. 워크로드가 일정 기간 실행된 후 다시 확인하세요.

# VPA 상태 확인
kubectl describe vpa -n <namespace> <vpa-name>

# VPA Recommender 로그 확인
kubectl logs -n vpa deploy/vpa-recommender

관련 문서