이 페이지에서는 Google Kubernetes Engine(GKE)의 수직형 포드 자동 확장에 대해 간략하게 설명하며 VerticalPodAutoscaler
커스텀 리소스 및 관련 유형의 참조 자료를 제공합니다.
수직형 포드 자동 확장은 시간 경과에 따른 리소스 사용량에 대한 권장사항을 제공합니다. 리소스 사용량이 갑자기 증가하면 수평형 포드 자동 확장 처리를 사용합니다.
수직형 포드 자동 확장을 사용하는 방법은 컨테이너 리소스 요청 및 한도 확장을 참조하세요.
수직형 포드 자동 확장의 작동 방식
수직형 포드 자동 확장을 사용하면 포드에 필요한 CPU 및 메모리 리소스를 분석하고 설정할 수 있습니다. 포드에서 컨테이너의 최신 CPU 요청 및 제한과 메모리 요청 및 제한을 설정할 필요 없이 수직형 포드 자동 확장을 구성하여 포드를 수동으로 업데이트하는 데 사용할 수 있는 CPU 및 메모리 요청과 한도의 권장 값을 제공하거나 수직형 포드 자동 확장을 구성하여 값을 자동으로 업데이트할 수 있습니다.
수직형 포드 자동 확장은 기본적으로 Autopilot 클러스터에서 사용 설정됩니다.
자동 모드의 수직형 pod 자동 확장
Kubernetes 제한사항에 따라 실행 중인 포드의 리소스 요청을 수정하는 유일한 방법은 포드를 다시 만드는 것입니다. updateMode
가 Auto
인 VerticalPodAutoscaler
객체를 만들면 VerticalPodAutoscaler
는 포드의 리소스 요청을 변경해야 하는 경우 포드를 삭제합니다.
포드 재시작 수를 제한하려면 포드 중단 예산을 사용합니다. 클러스터가 새로운 크기의 워크로드를 처리할 수 있도록 클러스터 자동 확장 처리 및 노드 자동 프로비저닝을 사용합니다.
수직형 포드 자동 확장은 업데이트 전에 클러스터 자동 확장 처리에 업데이트를 알리며 워크로드를 다시 만들기 전에 크기가 조절된 워크로드에 필요한 리소스를 제공하여 중단 시간을 최소화합니다.
이점
수직형 포드 자동 확장은 다음과 같은 이점을 제공합니다.
- 워크로드에 적합한 리소스 요청 및 한도를 설정하면 안정성과 비용 효율성이 향상됩니다. 포드 리소스 크기가 워크로드에 필요한 것보다 작은 경우 애플리케이션이 제한되거나 메모리 부족 오류로 인해 실패할 수 있습니다. 리소스 크기가 너무 크면 낭비하게 되어 더 많은 비용이 청구됩니다.
- 포드가 필요한 만큼만 사용하기 때문에 클러스터 노드가 효율적으로 사용됩니다.
- 사용할 수 있는 적절한 리소스가 있는 노드에 포드가 예약됩니다.
- CPU 및 메모리 요청의 정확한 값을 알아내기 위해 런타임을 소비하는 벤치마크 테스트를 실행할 필요가 없습니다.
- 시간이 지나면서 자동 확장 처리가 사용자 개입 없이 CPU 및 메모리 요청을 조정할 수 있기 때문에 유지보수 시간이 단축됩니다.
GKE 수직형 포드 자동 확장은 Kubernetes 오픈소스 자동 확장 처리에 비해 다음과 같은 이점을 제공합니다.
- 추천 대상을 결정할 때 최대 노드 크기 및 리소스 할당량을 고려합니다.
- 클러스터 용량을 조정하도록 클러스터 자동 확장 처리에 알립니다.
- 이전 데이터를 사용하여 수직형 포드 자동 확장을 사용 설정하기 전에 수집된 측정항목을 제공합니다.
- 워커 노드에 배포하는 대신 수직형 pod 자동 확장 처리 pod를 제어 영역 프로세스로 실행합니다.
제한사항
- 수평형 포드 자동 확장과 함께 수직형 포드 자동 확장을 사용하려면 다차원 포드 자동 확장을 사용합니다. 커스텀 측정항목과 외부 측정항목에서 수평형 포드 자동 확장과 함께 수직형 포드 자동 확장을 사용할 수도 있습니다.
- 워크로드의 실제 메모리 사용량에 대한 제한된 공개 상태로 인해 수직형 포드 자동 확장을 아직 JVM 기반 워크로드에서 사용할 수 없습니다.
- 배포가 포드를 수정된 리소스 값으로 대체할 때 수직형 포드 자동 확장의 기본 설정은 최소 2개의 복제본을 생성하는 것입니다. GKE 버전 1.22 이상에서는 PodUpdatePolicy 필드에
minReplicas
값을 지정하여 이 설정을 재정의할 수 있습니다.
권장사항
- 클러스터 업데이트 중단을 방지하려면 클러스터당
VerticalPodAutoscaler
객체 수를 1,000 미만으로 유지하는 것이 좋습니다. - 수직형 포드 자동 확장은 장기 실행되는 동종 워크로드에서 가장 잘 작동합니다.
API 참조
v1
API 참조입니다. 이 버전의 API를 사용하는 것이 좋습니다.
VerticalPodAutoscaler v1 autoscaling.k8s.io
필드 | |
---|---|
|
API 그룹, 버전, 종류 |
metadata |
표준 객체 메타데이터 |
spec |
원하는 |
status |
가장 최근에 관찰된 |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
필드 | |
---|---|
targetRef |
자동 확장 처리가 제어할 pod 집합을 관리하는 컨트롤러를 가리킵니다(예: 배포 또는 StatefulSet).
확장 하위 리소스가 있는 컨트롤러의 |
updatePolicy |
포드가 시작될 때 추천 업데이트가 적용되는지 여부와 포드의 수명 동안 추천 업데이트가 적용되는지 여부를 지정합니다. |
resourcePolicy |
개별 컨테이너의 CPU 및 메모리 요청을 조정하는 방법에 대한 정책을 지정합니다. 리소스 정책을 사용하면 개별 컨테이너의 추천에 제약조건을 설정할 수 있습니다. 지정되지 않은 경우 자동 확장 처리는 추가 제약 없이 포드의 모든 컨테이너에 대한 추천 리소스를 계산합니다. |
recommenders |
이 VPA 객체의 권장사항을 생성하는 추천자입니다. GKE에서 제공되는 기본 추천자를 사용하려면 비워 둡니다. 그렇지 않으면 사용자가 제공한 대체 추천자에 해당하는 정확히 하나의 항목이 목록에 포함될 수 있습니다. GKE 1.22부터 지원됩니다. |
VerticalPodAutoscalerList v1 autoscaling.k8s.io
필드 | |
---|---|
|
API 그룹, 버전, 종류 |
metadata |
표준 객체 메타데이터 |
items |
|
PodUpdatePolicy v1 autoscaling.k8s.io
필드 | |
---|---|
updateMode |
포드가 시작될 때 추천 업데이트가 적용되는지 여부와 포드의 수명 동안 추천 업데이트가 적용되는지 여부를 지정합니다. 가능한 값은 'Off', 'Initial', 'Recreate', 'Auto'입니다. 값을 지정하지 않으면 기본값은 'Auto'입니다. |
minReplicas |
업데이터가 포드 삭제를 시도하기 위해 사용 설정해야 하는 최소 복제본 수입니다(포드 중단 예산 같은 다른 검사 대기 중). 양수 값만 허용됩니다. 기본값은 GKE에서 2로 설정된 전역 '--min-replicas' 플래그입니다. GKE 1.22부터 지원됩니다. |
PodResourcePolicy v1 autoscaling.k8s.io
필드 | |
---|---|
containerPolicies |
개별 컨테이너의 리소스 정책 배열 이름이 지정된 컨테이너마다 최대 한 개의 항목이 포함될 수 있으며, 개별 정책이 없는 모든 컨테이너를 처리하는 `containerName = '*'`가 있는 단일 와일드 카드 항목이 선택적으로 있을 수 있습니다. |
ContainerResourcePolicy v1 autoscaling.k8s.io
필드 | |
---|---|
containerName |
정책이 적용될 컨테이너의 이름입니다. 지정하지 않으면 기본 정책으로 사용됩니다. |
mode |
컨테이너가 시작될 때 추천 업데이트가 적용되는지 여부와 컨테이너의 수명 동안 추천 업데이트가 적용되는지 여부를 지정합니다. 가능한 값은 'Off'와 'Auto'입니다. 값을 지정하지 않으면 기본값은 'Auto'입니다. |
minAllowed |
컨테이너에 허용되는 최소 CPU 요청 및 메모리 요청을 지정합니다. 기본적으로 적용되는 최솟값은 없습니다. |
maxAllowed |
컨테이너에 허용되는 최대 CPU 요청 및 메모리 요청을 지정합니다. 기본적으로 적용되는 최댓값은 없습니다. |
ControlledResources |
|
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
필드 | |
---|---|
name |
이 객체의 권장사항을 생성하는 추천자의 이름입니다. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
필드 | |
---|---|
recommendation |
최근에 추천된 CPU 및 메모리 요청입니다. |
conditions |
|
RecommendedPodResources v1 autoscaling.k8s.io
필드 | |
---|---|
containerRecommendation |
개별 컨테이너의 리소스 추천 배열 |
RecommendedContainerResources v1 autoscaling.k8s.io
필드 | |
---|---|
containerName |
추천이 적용되는 컨테이너의 이름 |
target |
컨테이너에 추천되는 CPU 요청 및 메모리 요청 |
lowerBound |
컨테이너에 추천되는 최소 CPU 요청 및 메모리 요청. 이 양은 애플리케이션을 안정적으로 실행하는 데 충분하다는 것을 보장하지 않습니다. 더 적은 CPU 및 메모리 요청으로 실행하면 성능이나 가용성에 상당한 영향을 미칠 가능성이 높습니다. |
upperBound |
컨테이너에 추천되는 최대 CPU 요청 및 메모리 요청. 이 값보다 높은 CPU 및 메모리 요청은 낭비될 가능성이 높습니다. |
uncappedTarget |
자동 확장 처리에서 계산한 최근의 리소스 추천으로, ContainerResourcePolicy를 고려하지 않고 실제 리소스 사용량을 기준으로 계산한 것입니다. 실제 리소스 사용량으로 인해 대상이 ContainerResourcePolicy를 위반하게 되는 경우 제한된 추천과 다를 수 있습니다. 이 필드는 실제 리소스 할당에는 영향을 미치지 않습니다. 상태 표시 용도로만 사용됩니다. |
VerticalPodAutoscalerCondition v1 autoscaling.k8s.io
필드 | |
---|---|
type |
설명하고 있는 조건의 유형. 가능한 값은 'RecommendationProvided', 'LowConfidence', 'NoPodsMatched', 'FetchingHistory'입니다. |
status |
조건의 상태. 가능한 값은 True, False, Unknown입니다. |
lastTransitionTime |
조건이 한 상태에서 다른 상태로 전환된 마지막 시간 |
reason |
마지막 상태 전환의 이유 |
message |
인간이 읽을 수 있으며 마지막 상태 전환의 세부정보를 제공하는 문자열 |
다음 단계
컨테이너 리소스 요청 및 제한 확장 방법 알아보기
클러스터 자동 확장 처리 알아보기