VerticalPodAutoscaler의 API 버전 간 마이그레이션

이 페이지에서는 API 버전 v1beta1에서 v1beta2로 VerticalPodAutoscaler 객체를 이전하는 방법을 설명합니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

다음 방법 중 하나를 사용하여 기본 gcloud 설정을 진행합니다.

  • gcloud init를 사용하여 기본값 설정 과정을 진행합니다.
  • gcloud config를 사용하여 프로젝트 ID, 영역, 리전을 개별적으로 설정합니다.

gcloud init 사용

One of [--zone, --region] must be supplied: Please specify location 오류가 표시되면 이 섹션을 완료합니다.

  1. gcloud init를 실행하고 다음 안내를 따르세요.

    gcloud init

    원격 서버에서 SSH를 사용하는 경우 --console-only 플래그를 사용하여 다음 명령어로 브라우저를 실행하지 못하게 할 수 있습니다.

    gcloud init --console-only
  2. 안내를 따라 gcloud에서 Google Cloud 계정을 사용하도록 승인합니다.
  3. 새 구성을 만들거나 기존 구성을 선택합니다.
  4. Google Cloud 프로젝트를 선택합니다.
  5. 기본 Compute Engine 영역을 선택합니다.

gcloud config 사용

  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project PROJECT_ID
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone COMPUTE_ZONE
  • 리전 클러스터를 사용하는 경우 기본 컴퓨팅 리전을 설정합니다.
    gcloud config set compute/region COMPUTE_REGION
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

클러스터에 수직형 Pod 자동 확장 사용 설정

수직형 Pod 자동 확장이 사용 설정된 새 클러스터를 만들려면 다음 명령어를 입력합니다.

gcloud beta container clusters create cluster-name --enable-vertical-pod-autoscaling

여기서 cluster-name은 새 클러스터에 대해 선택하는 이름입니다.

기존 클러스터가 수직형 Pod 자동 확장을 사용하도록 설정하려면 다음 명령어를 입력하세요.

gcloud beta container clusters update cluster-name --enable-vertical-pod-autoscaling

여기서 cluster-name은 기존 클러스터의 이름입니다.

v1beta2 API 소개

수직형 Pod 자동 확장은 GKE 버전 1.11에 도입된 베타 기능입니다. v1beta1 API는 라벨 선택기를 사용하여 특정 VerticalPodAutoscaler에 속하는 Pod를 지정합니다. Google에서는 사용자 의견을 수렴한 결과 다음과 같은 사용성 문제로 인해 API를 수정하기로 결정했습니다.

  • 선택기를 사용하면 구성이 잘못되기 쉽습니다. 예를 들어 VerticalPodAutoscaler 객체가 클러스터의 모든 Pod를 타겟팅하거나 Pod가 두 개 이상의 VerticalPodAutoscaler 객체에 속합니다.
  • 현재 가장 일반적인 사용 사례는 VerticalPodAutoscaler가 전체 배포를 타겟팅하는 것입니다.
  • 이 변경사항은 VPA와 HorizontalPodAutoscaler API를 일치시킵니다.

v1beta2 API를 사용하면 VerticalPodAutoscaler 객체가 컨트롤러(예: 배포 또는 DaemonSet)를 직접 가리킵니다.

v1beta1에서 v1beta2 API로 마이그레이션

이 가이드에서는 VerticalPodAutoscaler로 확장된 배포를 v1beta1에서 v1beta2로 안전하게 마이그레이션하는 방법을 보여줍니다.

배포를 위한 샘플 매니페스트는 다음과 같습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    label: vpa-label
spec:
  replicas: 2
  selector:
    matchLabels:
      label: vpa-label
  template:
    metadata:
      labels:
        label: vpa-label
    spec:
      containers:
      - {...}

v1beta1에서는 배포의 모든 Pod와 일치하도록 selector를 지정하여 VerticalPodAutoscaler를 확장합니다.

apiVersion: autoscaling.k8s.io/v1beta1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  selector:
    matchLabels:
      label: vpa-label
  updatePolicy:
    updateMode: {...}

v1beta2에서는 VerticalPodAutoscaler가 배포를 직접 타겟팅합니다.

apiVersion: autoscaling.k8s.io/v1beta2 # different API version
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment
    name:       deployment-name
  updatePolicy:
    updateMode: {...}

v1beta2 매니페스트를 vpa-v1beta2.yaml 파일에 저장합니다.

updateMode"Off"로 설정되어 있는 경우 다음 명령어를 실행할 수 있습니다.

kubectl apply -f vpa-v1beta2.yaml

VerticalPodAutoscaler는 전환 중에 권장사항을 유지합니다.

updateMode가 사용 설정되어 있는 경우("Initial", "Auto" 또는 "Recreate") 여러 단계를 수행하여 마이그레이션합니다.

  1. 새 이름(vpa-name-new)과 "Off"로 설정된 updateMode 필드를 사용하여 v1beta2 VerticalPodAutoscaler 매니페스트를 만듭니다.

    apiVersion: autoscaling.k8s.io/v1beta2
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-name-new # Different name
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       deployment-name
      updatePolicy:
        updateMode: "Off" # Recommendation only mode.
    
  2. 이 매니페스트를 vpa-v1beta1-off.yaml로 저장합니다.

  3. 새 VerticalPodAutoscaler 객체를 만듭니다.

    kubectl apply -f vpa-v1beta1-off.yaml
    
  4. 권장사항이 채워질 때까지 기다린 후 원래 VerticalPodAutoscaler 객체의 권장사항과 비교합니다.

  5. 권장사항이 일치한다고 판단되면 v1beta1 VerticalPodAutoscaler 객체를 삭제합니다.

    kubectl delete vpa-name
    
  6. 원래 업데이트 전략에 따라 새로운 VerticalPodAutoscaler를 업데이트합니다. 예를 들어 updateMode: "Auto"의 경우 다음과 같습니다.

    apiVersion: autoscaling.k8s.io/v1beta2
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-name-new
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       deployment-name
      updatePolicy:
        updateMode: "Auto" # Mode switched to auto
    
  7. 이 매니페스트를 vpa-v1beta1-final.yaml로 저장합니다.

  8. 새 구성을 적용합니다.

    kubectl apply -f vpa-v1beta1-final.yaml
    

참조

v1beta1 API 참조 섹션입니다. v1beta2 참조도 확인하세요.

VerticalPodAutoscaler v1beta1 autoscaling.k8s.io

필드

TypeMeta

API 그룹, 버전, 종류

metadata

ObjectMeta

표준 객체 메타데이터

spec

VerticalPodAutoscalerSpec

원하는 VerticalPodAutoscaler의 동작

status

VerticalPodAutosclerStatus

VerticalPodAutoscaler의 가장 최근에 관찰된 상태

VerticalPodAutoscalerSpec v1beta1 autoscaling.k8s.io

필드
selector

LabelSelector

VerticalPodAutoscaler에 의해 제어되는 포드 집합을 결정하는 라벨 쿼리입니다.

updatePolicy

PodUpdatePolicy

pod가 시작될 때 추천 업데이트가 적용되는지 여부와 Pod의 수명 동안 추천 업데이트가 적용되는지 여부를 지정합니다.

resourcePolicy

PodResourcePolicy

개별 컨테이너의 CPU 및 메모리 요청을 조정하는 방법에 대한 정책을 지정합니다.

VerticalPodAutoscalerList v1beta1 autoscaling.k8s.io

필드

TypeMeta

API 그룹, 버전, 종류

metadata

ObjectMeta

표준 객체 메타데이터

items

VerticalPodAutoscaler array

VerticalPodAutoscaler 객체의 목록

PodUpdatePolicy v1beta1 autoscaling.k8s.io

필드
updateMode

string

pod가 시작될 때 추천 업데이트가 적용되는지 여부와 Pod의 수명 동안 추천 업데이트가 적용되는지 여부를 지정합니다. 가능한 값은 'Off', 'Initial', 'Recreate', 'Auto'입니다.

PodResourcePolicy v1beta1 autoscaling.k8s.io

필드
containerPolicies

ContainerResourcePolicy array

개별 컨테이너를 위한 다수의 리소스 정책

ContainerResourcePolicy v1beta1 autoscaling.k8s.io

필드
containerName

string

정책이 적용될 컨테이너의 이름입니다. 지정하지 않으면 기본 정책으로 사용됩니다.

mode

ContainerScalingMode

컨테이너가 시작될 때 추천 업데이트가 적용되는지 여부와 컨테이너의 수명 동안 추천 업데이트가 적용되는지 여부를 지정합니다. 가능한 값은 'Off'와 'Auto'입니다.

minAllowed

ResourceList

컨테이너에 허용되는 최소 CPU 요청 및 메모리 요청을 지정합니다.

maxAllowed

ResourceList

컨테이너에 허용되는 최대 CPU 요청 및 메모리 요청을 지정합니다.

VerticalPodAutoscalerStatus v1beta1 autoscaling.k8s.io

필드
recommendation

RecommendedPodResources

최근에 추천된 CPU 및 메모리 요청입니다.

conditions

VerticalPodAutoscalerCondition array

VerticalPodAutoscaler의 현재 상태를 설명합니다.

RecommendedPodResources v1beta1 autoscaling.k8s.io

필드
containerRecommendation

RecommendedContainerResources array

개별 컨테이너를 위한 다수의 리소스 추천

RecommendedContainerResources v1beta1 autoscaling.k8s.io

필드
containerName

string

추천이 적용되는 컨테이너의 이름

target

ResourceList

컨테이너에 추천되는 CPU 요청 및 메모리 요청

lowerBound

ResourceList

컨테이너에 추천되는 최소 CPU 요청 및 메모리 요청. 이 양은 애플리케이션을 안정적으로 실행하는 데 충분하다는 것을 보장하지 않습니다. 더 적은 CPU 및 메모리 요청으로 실행하면 성능이나 가용성에 상당한 영향을 미칠 가능성이 높습니다.

upperBound

ResourceList

컨테이너에 추천되는 최대 CPU 요청 및 메모리 요청. 이 값보다 높은 CPU 및 메모리 요청은 낭비될 가능성이 높습니다.

uncappedTarget

ResourceList

자동 확장 처리에서 계산한 최근의 리소스 추천으로, ContainerResourcePolicy를 고려하지 않고 실제 리소스 사용량만을 기준으로 계산한 것입니다. 실제 리소스 사용량으로 인해 대상이 ContainerResourcePolicy를 위반하게 되는 경우 제한된 추천과 다를 수 있습니다. 이 필드는 상태 표시용일 뿐이며 실제 리소스 할당에는 영향을 미치지 않습니다.

VerticalPodAutoscalerCondition v1beta1 autoscaling.k8s.io

필드
type

VerticalPodAutoscalerConditionType

설명하고 있는 조건의 유형. 가능한 값은 'RecommendationProvided', 'LowConfidence', 'NoPodsMatched', 'FetchingHistory'입니다.

status

ConditionStatus

조건의 상태. 가능한 값은 True, False, Unknown입니다.

lastTransitionTime

Time

조건이 한 상태에서 다른 상태로 전환된 마지막 시간

reason

string

마지막 상태 전환의 이유

message

string

사람이 읽을 수 있으며 마지막 상태 전환의 세부정보를 제공하는 문자열