다음을 통해 공유


AKS(Azure Kubernetes Service) 노드 풀에 대한 롤링 업그레이드 구성

롤링 업그레이드 전략은 노드를 한 번에 하나씩(또는 한 번에 몇 개) 업그레이드하여 업그레이드 프로세스 전체에서 노드 풀을 계속 사용할 수 있도록 하면서 워크로드 중단을 최소화합니다. 이 문서에서는 AKS 노드 풀에 대한 점진적 업그레이드를 구성하는 방법을 설명하며, 서지 설정, 배출 시간 제한 및 적응 시간을 포함합니다.

시작하기 전 주의 사항:

  • 컨트롤 플레인이 이미 대상 Kubernetes 버전으로 업그레이드되었는지 확인합니다. 노드 풀을 컨트롤 플레인보다 높은 버전으로 업그레이드할 수 없습니다. 자세한 내용은 AKS 클러스터 컨트롤 플레인 업그레이드를 참조하세요.
  • Azure CLI를 사용하는 경우 이 문서에서는 Azure CLI 버전 2.34.1 이상이 필요합니다. az --version 명령을 사용하여 버전을 찾습니다. 설치하거나 업그레이드해야 하는 경우 [Azure CLI 설치][azure-cli-install]를 참조하세요.
  • AKS 노드 풀에 대한 롤링 업그레이드를 구성하려면 Microsoft.ContainerService/managedClusters/agentPools/write RBAC 역할 권한이 필요합니다.

롤링 업그레이드 작동 방식 개요

롤링 업그레이드 중에 AKS는 노드 풀의 각 노드에 대해 다음 작업을 수행합니다.

  1. 서지 노드 추가: 업그레이드 중에 용량을 유지하기 위해 최대 서지(--max-surge) 설정에 따라 새 버퍼 노드를 추가합니다.
  2. 코돈 및 드레인 노드: 애플리케이션 실행 중단을 최소화하려면 이전 노드를 하나씩 코돈하고 드레이닝 하세요. 최대 서지를 사용할 때 지정된 버퍼 노드 수만큼 노드를 동시에 차단 및 드레이닝할 수 있습니다.
  3. 흡수 시간( 선택 사항): 업그레이드를 계속하기 전에 워크로드가 새 노드에서 안정화되도록 진행하기 전에 구성된 흡수 기간을 기다립니다.
  4. 이전 노드를 재이미징하기: 이전 노드가 소진되면 새 버전을 수신하기 위해 재이미징됩니다. 이미지화된 노드는 업그레이드할 다음 노드 집합에 대한 버퍼 노드가 됩니다.
  5. 반복: 노드 풀의 모든 노드가 업그레이드될 때까지 프로세스가 반복됩니다.
  6. 서지 노드 제거: 모든 노드를 업그레이드한 후 나머지 버퍼 노드가 제거되어 원래 노드 풀 크기와 균형을 유지합니다.

롤링 업그레이드 설정하기

노드 급증 사용자 정의

중요합니다

  • 노드 서지에는 각 업그레이드 작업에 요청된 최대 서지 수에 대한 구독 할당량이 필요합니다. 예를 들어, 각각 4개의 노드로 구성된 5개의 노드 풀이 있는 클러스터는 총 20개의 노드를 갖습니다. 각 노드 풀의 최대 서지 값이 50개%경우 업그레이드를 완료하려면 10개 노드(2개 노드 × 5 개 풀)의 추가 컴퓨팅 및 IP 할당량이 필요합니다.
  • 노드 풀의 최대 서지 설정은 영구적입니다. 후속 Kubernetes 업그레이드 또는 노드 버전 업그레이드는 이 설정을 사용합니다. 언제든지 노드 풀의 최대 서지 값을 변경할 수 있습니다. 프로덕션 노드 풀의 최대 서지 설정은 33%를 권장합니다.
  • Azure CNI를 사용하는 경우 Azure CNI의 IP 요구 사항을 충족하기 위해 서브넷에 사용 가능한 IP가 있는지 확인합니다.

기본적으로 AKS는 추가 노드를 한 가지 사용하여 서지로 업그레이드를 구성합니다. 최대 서지 설정에 대한 기본값 1 을 사용하면 기존 애플리케이션의 코돈/드레이닝 전에 추가 노드를 만들어 이전 버전의 노드를 대체하여 워크로드 중단을 최소화할 수 있습니다. 노드 풀당 최대 서지 값을 사용자 지정할 수 있습니다. 최대 서지 값을 늘리면 업그레이드 프로세스가 더 빠르게 완료되지만 업그레이드 프로세스 중에 더 많은 중단이 발생할 수 있습니다.

예를 들어, 최대 서지 값 100%은 가능한 가장 빠른 업그레이드 프로세스를 제공하지만, 노드 풀의 모든 노드를 동시에 비웁니다. 테스트 환경에 이와 같은 더 높은 값을 사용할 수 있습니다. 프로덕션 노드 풀의 경우 최대 서지 설정을 33%로 권장합니다.

AKS는 정수 값과 최대 서지의 백분율 값을 모두 허용합니다. 다음은 그 예입니다.

값 형식 예시 Description
정수 5 확장을 위한 5개의 추가 노드
백분율 50% 풀에서 현재 노드 수의 절반에 해당하는 서지 값입니다.

최대 서지 백분율 값은 최소 1% 값 및 최대 100%값일 수 있습니다. 백분율 값은 가장 가까운 노드 수로 반올림 됩니다. 최대 서지 값이 업그레이드에 필요한 노드 수보다 큰 경우 업그레이드할 노드 수를 최대 서지 값으로 사용합니다.

최대 서지 값 설정

명령 az aks nodepool add 또는 az aks nodepool update과 매개 변수 --max-surge를 사용하여 새 노드 풀 또는 기존 노드 풀의 최대 서지 값을 설정합니다. 다음은 그 예입니다.

# Set max surge for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33%

# Update max surge for an existing node pool 
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 5

사용할 수 없는 노드 사용자 지정

중요합니다

  • 최대 사용 불가 값을 설정하려면 최대 서지 0 값을 설정해야 합니다. 두 값 모두 동시에 활성화할 수 없습니다.
  • 최대 미사용 상태는 업그레이드 프로세스 중에 서지 노드를 생성하지 않습니다. 대신 AKS는 한 번에 n 개의 노드(사용할 수 없는 최대 개수)를 코돈한 다음 에이전트 풀의 다른 노드로 Pod를 제거합니다. 이로 인해 Pod를 예약할 수 없는 경우 워크로드가 중단될 수 있습니다.
  • "최대 미사용 가능 설정이 적용되면 예약할 Pod의 리소스가 줄어들어 Pod 중단 예산(PDB)을 충족하지 못하게 되고, 이는 더 많은 오류를 야기할 수 있습니다." 자세한 내용은 Pod 중단 예산 문제 해결을 참조하세요.
  • 시스템 노드 풀에서 사용할 수 없는 최대값을 설정할 수 없습니다.

AKS는 서지 노드를 사용하지 않도록 업그레이드를 구성하고 현재 위치에서 노드를 업그레이드할 수도 있습니다. 사용할 수 없는 최대 값은 기존 노드 풀 노드에서 동시에 코드되고 드레이닝될 수 있는 노드 수를 결정합니다.

AKS는 정수 값과 사용할 수 없는 최대값에 대한 백분율 값을 모두 허용합니다. 다음은 그 예입니다.

값 형식 예시 Description
정수 5 5개의 노드가 기존 노드에서 격리됩니다.
백분율 50% 풀의 현재 노드 수의 절반을 사용할 수 없습니다.

사용할 수 없는 최대 백분율 값은 최소 1% 값 및 최대 100%값일 수 있습니다. 백분율 값은 가장 가까운 노드 수로 반올림 됩니다.

사용할 수 없는 최대값 설정

az aks nodepool add, az aks nodepool update, 또는 az aks nodepool upgrade 명령과 함께 --max-unavailable 매개 변수를 사용하여 새 노드 풀 또는 기존 노드 풀에 사용할 수 없는 최대 값을 설정합니다. 다음은 그 예입니다.

# Set max unavailable for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

# Update max unavailable for an existing node pool 
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

# Set max unavailable at upgrade time
az aks nodepool upgrade \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 0 \
    --max-unavailable 5

노드 드레이닝 시간 제한 사용자 지정

런타임 중에 다른 노드로 다시 예약할 수 없는 특정 Pod에 장기 실행 워크로드가 있을 수 있습니다. 예를 들어 실행을 완료해야 하는 메모리 집약적 상태 저장 워크로드입니다. 이러한 경우 AKS가 업그레이드 워크플로에서 준수하는 노드 드레이닝 시간 제한을 구성할 수 있습니다.

기본 노드 드레이닝 시간 제한 값은 30분입니다. 노드 드레이닝 시간 제한 값은 최소 5분 및 최대 24시간이 될 수 있습니다.

드레인 타임아웃 값이 경과하고, 파드가 여전히 실행 중인 경우 업그레이드 작업이 중지됩니다. 후속 PUT 작업은 중지된 업그레이드를 다시 시작합니다.

팁 (조언)

장시간 실행되는 Pod의 경우, Pod 사양에서 terminationGracePeriodSeconds을(를) 구성해야 합니다.

노드 드레이닝 시간 제한 값 설정

새 노드 풀 또는 기존 노드 풀에 대한 노드 드레인 시간 초과(분)를 설정하려면 az aks nodepool add 또는 az aks nodepool update 명령과 --drain-time-out 매개 변수를 사용하십시오.

# Set drain timeout for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --drain-time-out 100

# Update drain timeout for an existing node pool
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --drain-time-out 45

노드 흡수 시간 사용자 지정

지정된 기간 동안 노드를 드레이닝한 후 다시 이미지를 구성하고 다음 노드로 이동하기 전에 대기 기간을 설정하려면, 지연 시간을 설정할 수 있습니다. 이렇게 시간을 흡수하면 업그레이드 프로세스 중에 모니터링 대시보드에서 애플리케이션 상태 확인과 같은 다른 작업을 수행할 수 있습니다.

기본 노드 흡수 시간은 0분입니다. 노드 흡수 시간 값은 최소 0분 및 최대 30분이 될 수 있습니다. 가능한 한 짧게 몸을 담그는 것이 좋습니다. 노드 흡수 시간이 높을수록 총 업그레이드 기간이 늘어나고 문제 검색이 지연됩니다.

노드 흡수 시간 값 설정

신규 또는 기존 노드 풀에 대한 노드 흡수 시간을 (분 단위로) 설정하려면 --node-soak-duration 플래그를 사용하여 az aks nodepool add, az aks nodepool update, 또는 az aks nodepool upgrade 명령을 사용하십시오.

# Set node soak time for a new node pool
az aks nodepool add \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --node-soak-duration 10

# Update node soak time for an existing node pool
az aks nodepool update \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33% \
    --node-soak-duration 5

# Set node soak time when upgrading an existing node pool
az aks nodepool upgrade \
    --name <node-pool-name> \
    --resource-group <resource-group-name> \
    --cluster-name <cluster-name> \
    --max-surge 33% \
    --node-soak-duration 20

AKS 노드 업그레이드 이벤트 보기

명령을 사용하여 kubectl get events 업그레이드 이벤트를 보고 롤링 업그레이드 진행률을 모니터링합니다.

kubectl get events --field-selector reason=Drain,reason=Surge,reason=Upgrade

업그레이드 이벤트 중 출력 예제:

default  2m1s  Normal  Drain    node/aks-nodepool1-12345678-vmss000001  Draining node: [aks-nodepool1-12345678-vmss000001]
default  9m22s Normal  Surge    node/aks-nodepool1-12345678-vmss000002  Created a surge node [aks-nodepool1-12345678-vmss000002 nodepool1] for agentpool nodepool1
default  1m45s Normal  Upgrade  node/aks-nodepool1-12345678-vmss000001  Soak duration 5m0s after draining node: aks-nodepool1-12345678-vmss000001

다음 표에서는 프로덕션 워크로드에 권장되는 노드 풀 업그레이드 설정을 간략하게 설명합니다.

Setting Recommendation
최대 서지 프로덕션 노드 풀의% 33으로 설정
드레인 타임아웃 가장 오랫동안 실행되는 Pod의 요구 사항에 맞춰 구성하세요.
침지 시간 수동 확인이 필요하지 않은 경우 짧은 기간(0-5분) 사용
Pod 중단 예산 Pod 제거를 제어하도록 중요한 워크로드에 대한 PDB 구성
업그레이드 순서 비프로덕션 노드 풀을 먼저 업그레이드하여 새 버전의 유효성을 검사합니다.