Google Kubernetes Engine (GKE)에서 수직형 포드 자동 확장이 예상대로 작동하지 않으면 워크로드가 올바르게 확장되지 않을 수 있습니다. 이러한 문제로 인해 애플리케이션이 부하를 처리하지 못해 성능 문제나 서비스 중단이 발생할 수 있습니다. 새 리소스 권장사항으로 포드가 다시 시작되지 않거나 실제 사용량과 일치하지 않는 권장사항이 표시될 수 있습니다.
이 문서를 사용하여 VerticalPodAutoscaler 구성 또는 예기치 않은 추천과 관련된 일반적인 문제를 해결합니다. 이러한 문제 해결 단계를 따르면 수요에 따라 애플리케이션을 효율적이고 안정적으로 확장할 수 있습니다.
이 정보는 VerticalPodAutoscaler 리소스를 구성하고 애플리케이션이 올바르게 확장되는지 확인해야 하는 애플리케이션 개발자에게 중요합니다. 또한 플랫폼 관리자와 운영자가 자동 확장된 워크로드에 영향을 미치는 클러스터 구성 문제를 해결하는 데도 도움이 됩니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE 사용자 역할 및 태스크를 참고하세요.
VerticalPodAutoscaler 문제 진단
VerticalPodAutoscaler 문제를 진단하려면 kubectl 또는 Google Cloud 콘솔을 사용하여 상태와 구성을 검사하세요.
VerticalPodAutoscaler 설명
실시간 계산과 최근 확장 결정을 보려면 kubectl describe vpa 명령어를 사용하세요.
kubectl describe vpa VPA_NAME -n NAMESPACE_NAME
다음을 바꿉니다.
VPA_NAME: VerticalPodAutoscaler의 이름입니다.NAMESPACE_NAME: VerticalPodAutoscaler의 네임스페이스입니다.
출력은 다음과 비슷합니다.
Name: sample-deployment-vpa
Namespace: default
API Version: autoscaling.k8s.io/v1
Kind: VerticalPodAutoscaler
# Multiple lines are omitted here
Spec:
Target Ref:
API Version: apps/v1
Kind: Deployment
Name: sample-deployment
Update Policy:
Update Mode: Auto
Status:
Conditions:
Last Transition Time: 2025-10-09T10:00:00Z
Message: VPA is fetching history in order to provide recommendation
Reason: FetchingHistory
Status: True
Type: FetchingHistory
Last Transition Time: 2025-10-09T10:05:00Z
Message: VPA pod metrics aren't available yet
Reason: NoMetrics
Status: True
Type: LowConfidence
Last Transition Time: 2025-10-09T10:10:00Z
Message: VPA is able to provide a recommendation
Reason: RecommendationProvided
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: sample-container
Lower Bound:
Cpu: 100m
Memory: 128Mi
Target:
Cpu: 200m
Memory: 256Mi
Upper Bound:
Cpu: 500m
Memory: 512Mi
Events: <none>
출력에서 다음 주요 섹션을 검토합니다.
Spec:targetRef필드 (타겟팅된 워크로드) 및updatePolicy필드 (업데이트 적용 방법)를 포함한 구성 세부정보를 표시합니다.Status:Conditions섹션 (운영 상태)과Recommendation섹션 (각 컨테이너에 대해 생성된 CPU 및 메모리 리소스 값)을 표시합니다.Events: VerticalPodAutoscaler 객체와 관련된 최근 작업 또는 오류를 나열합니다.
VerticalPodAutoscaler 매니페스트 보기
VerticalPodAutoscaler의 전체 구성 및 상태를 보려면 kubectl 또는 Google Cloud 콘솔을 사용하여 YAML 매니페스트를 검사합니다.
콘솔
Google Cloud 콘솔에서 객체 브라우저 페이지로 이동합니다.
객체 종류 필터 목록을 클릭합니다.
기존 선택 항목을 지웁니다.
VerticalPodAutoscaler를 선택하고 확인을 클릭합니다.
필터링된 목록에서 autoscaling.k8s.io API 그룹을 선택합니다.
VerticalPodAutoscaler 객체 종류를 선택합니다.
검사할 VerticalPodAutoscaler의 이름을 클릭합니다.
kubectl
kubectl get vpa VPA_NAME \
-n NAMESPACE_NAME \
-o yaml
다음을 바꿉니다.
VPA_NAME: VerticalPodAutoscaler의 이름입니다.NAMESPACE_NAME: VerticalPodAutoscaler의 네임스페이스입니다.
Google Cloud 콘솔에서 VerticalPodAutoscaler 상태 확인
Google Cloud 콘솔에서 워크로드의 VerticalPodAutoscaler 상태를 검사하려면 다음 단계를 따르세요.
워크로드 페이지로 이동합니다.
워크로드 이름을 클릭합니다.
세부정보 탭으로 이동하여 자동 확장 섹션을 찾습니다.
수직형 포드 자동 확장 처리 행에서 측정항목 수집 및 구성 상태에 관한 상태 메시지를 검토합니다.
결정 로그 수집
VerticalPodAutoscaler 계산 및 결정에 대한 자세한 정보를 보려면 Cloud Logging에서 수직형 포드 자동 확장 처리 결정 로그 (미리보기)를 사용 설정하세요.
이러한 로그는 UPDATE_RECOMMENDATION, EVICT_POD, APPLY_RECOMMENDATION_IN_PLACE, APPLY_RECOMMENDATION_ON_EVICTION와 같은 이벤트를 캡처합니다.
결정 로그를 사용 설정하고 검사하려면 수직형 포드 자동 확장 처리 이벤트 로그 수집을 참고하세요.
VerticalPodAutoscaler 권장사항 문제 해결
다음 섹션에서는 VerticalPodAutoscaler가 추천을 생성하지 못하거나 예상과 다른 추천을 생성하는 문제를 다룹니다.
VerticalPodAutoscaler가 권장사항을 제공하지 않음
증상:
- VerticalPodAutoscaler 매니페스트의
Status.Recommendation필드가 비어 있습니다. - VerticalPodAutoscaler 매니페스트의 조건에
NoPodsMatched,FetchingHistory또는LowConfidence상태 조건이 표시됩니다.
원인:
- 잘못된 타겟: VerticalPodAutoscaler 매니페스트의
spec.targetRef필드가 동일한 네임스페이스의 기존 워크로드를 가리키지 않습니다. - 초기 측정항목 수집: VerticalPodAutoscaler가 최근에 생성되었으며 아직 이전 리소스 사용량 데이터를 수집하는 중입니다.
metrics-server구성요소 문제: VerticalPodAutoscaler는metrics-server구성요소의 측정항목을 사용합니다.metrics-server구성요소가 올바르게 작동하지 않으면 VerticalPodAutoscaler가 사용량 데이터를 검색할 수 없습니다.- 실행 중인 포드 없음: 타겟 워크로드에 VerticalPodAutoscaler가 관찰할 실행 중이거나 준비된 포드가 없습니다.
해결 방법:
targetRef필드 확인:spec.targetRef섹션에서kind,name,apiVersion필드의 값을 확인합니다. 모든 값이 타겟 워크로드와 일치하는지 확인합니다. 워크로드가 있는지 확인하려면 다음을 실행합니다.kubectl get KIND WORKLOAD_NAME \ -n NAMESPACE_NAME다음을 바꿉니다.
KIND: 워크로드 유형(예:deployment또는statefulset)입니다.WORKLOAD_NAME: 워크로드의 이름입니다.NAMESPACE_NAME: 워크로드의 네임스페이스
측정항목 수집 시간 허용: 새 VerticalPodAutoscaler 리소스는 데이터를 수집하는 데 시간이 필요합니다.
RecommendationProvided상태 조건으로 전환되는지Status.Conditions필드를 모니터링합니다.metrics-server구성요소 확인:metrics-server구성요소의 포드가 실행 중인지 확인합니다.kubectl get pods -n kube-system | grep metrics-server포드가 실행되고 있지 않거나 다시 시작 횟수가 많은 경우 로그를 확인합니다.
kubectl logs -n kube-system -l k8s-app=metrics-servererror,failed,unable to fetch와 같은 단어가 포함된 로그 항목은 측정항목 수집에 문제가 있음을 나타냅니다.
포드가 실행 중인지 확인: 타겟 워크로드에 실행 중이고 준비된 포드가 하나 이상 있는지 확인합니다.
VerticalPodAutoscaler 권장사항이 예상치 않음
증상:
Status.Recommendation섹션의 CPU 또는 메모리 값이 예상보다 높거나 낮습니다.- 추천이 관찰된 워크로드 리소스 사용량과 일치하지 않습니다.
원인:
- 워크로드 동작 변경: VerticalPodAutoscaler 추천은 이전 사용량을 기반으로 합니다. 최근 애플리케이션 소비 패턴의 변화가 아직 반영되지 않았을 수 있습니다.
- 워크로드 특성: 사용량 패턴이 매우 급격한 단기 작업 또는 워크로드에는 최적의 추천이 제공되지 않을 수 있습니다.
- 충돌하는 VerticalPodAutoscaler 리소스: 여러 VerticalPodAutoscaler 리소스가 동일한 워크로드를 타겟팅하도록 구성될 수 있습니다.
해결 방법:
- 조정 시간 허용: 애플리케이션 변경 후 VerticalPodAutoscaler가 새로운 사용 패턴을 학습할 시간을 줍니다.
- 적합성 평가: VerticalPodAutoscaler 또는 수평형 포드 자동 확장 처리가 워크로드 유형에 가장 적합한지 평가합니다.
충돌하는 VerticalPodAutoscaler 리소스 확인:
클러스터의 모든 VerticalPodAutoscaler 리소스를 나열합니다.
kubectl get vpa --all-namespaces각 리소스의
spec.targetRef필드를 검사합니다. 여러 VerticalPodAutoscaler 리소스가 동일한 워크로드를 타겟팅하는 경우 하나의 VerticalPodAutoscaler만 특정 워크로드를 타겟팅하도록 충돌하는 리소스를 삭제하거나 조정합니다.
포드 리소스 업데이트 문제 해결
다음 섹션에서는 추천이 있지만 타겟 포드에 적용되지 않는 문제를 다룹니다.
포드 리소스 요청이 업데이트되지 않음
증상:
- VerticalPodAutoscaler 매니페스트는
Status섹션에 권장사항을 표시하지만 포드 매니페스트의resources.requests필드는 업데이트되지 않습니다. Auto또는Recreate업데이트 모드를 사용할 때 포드가 권장사항을 적용하기 위해 다시 시작되지 않습니다.
원인:
updateMode필드가Off인 경우:spec.updatePolicy.updateMode필드가Off로 설정되면 VerticalPodAutoscaler가 추천을 생성하지만 적용하지는 않습니다.- 워크로드에 복제본이 하나만 있음:
Auto또는Recreate업데이트 모드에서 VerticalPodAutoscaler는 다운타임을 방지하기 위해 단일 복제본 워크로드를 제거하지 않습니다.
해결 방법:
updateMode필드 확인:spec.updatePolicy.updateMode필드를Auto,Recreate또는InPlaceOrRecreate로 설정하도록 VerticalPodAutoscaler 매니페스트를 수정합니다.- 복제본 수 늘리기:
Auto또는Recreate업데이트 모드를 사용하는 워크로드의 경우 배포 또는 StatefulSet에 복제본이 두 개 이상 있는지 확인합니다.
적용 업데이트가 실패하거나 지연됨
증상:
- 준비된 컨테이너 크기 조절이 완료되지 않거나 지연됩니다.
원인:
- 노드 용량 부족: 노드에 업데이트된 리소스 요청을 처리할 용량이 부족하면 현재 위치 크기 조절 작업이 지연됩니다.
해결 방법:
지연된 크기 조절 상태 및 노드 용량 확인:
크기 조절이 5분 넘게 지연되면 VerticalPodAutoscaler는 권장사항을 적용하기 위해 포드를 삭제하고 다시 만드는 것으로 대체됩니다. 지연된 업데이트의 상태를 확인하려면 다음을 실행하세요.
포드 주석을 검사하여
vpaInPlaceUpdated주석이"true"로 설정되어 있는지 확인합니다.metadata: annotations: vpaInPlaceUpdated: "true" vpaUpdates: 'Pod resources updated by sample-deployment-vpa: container 0: cpu request, memory request'지연된 크기 조절 이벤트의
status.conditions필드를 검사하여 지연된 상태를 확인합니다.status: conditions: - type: PodResizePending status: "True" reason: Deferred message: "Node didn't have enough resource: ..."포드의 Kubernetes 이벤트를 검사합니다.
kubectl get events -n NAMESPACE_NAME --field-selector involvedObject.kind=Pod,involvedObject.name=POD_NAME다음을 바꿉니다.
NAMESPACE_NAME: 포드의 네임스페이스입니다.POD_NAME: 포드의 이름입니다.
ResizedPod(성공적인 인플레이스 업데이트) 또는EvictedByVPA(다시 만들기로 대체) 이유 중 하나가 있는 이벤트를 찾습니다.
다음 단계
문서에서 문제 해결 방법을 찾을 수 없으면 지원 받기를 참조하여 다음 주제에 대한 조언을 포함한 추가 도움을 요청하세요.
- Cloud Customer Care에 문의하여 지원 케이스를 엽니다.
- StackOverflow에서 질문하고
google-kubernetes-engine태그를 사용하여 유사한 문제를 검색해 커뮤니티의 지원을 받습니다.#kubernetes-engineSlack 채널에 가입하여 더 많은 커뮤니티 지원을 받을 수도 있습니다. - 공개 Issue Tracker를 사용하여 문제나 기능 요청을 엽니다.