롤링 업그레이드 전략은 노드를 한 번에 하나씩(또는 한 번에 몇 개) 업그레이드하여 업그레이드 프로세스 전체에서 노드 풀을 계속 사용할 수 있도록 하면서 워크로드 중단을 최소화합니다. 이 문서에서는 AKS 노드 풀에 대한 점진적 업그레이드를 구성하는 방법을 설명하며, 서지 설정, 배출 시간 제한 및 적응 시간을 포함합니다.
시작하기 전 주의 사항:
- 컨트롤 플레인이 이미 대상 Kubernetes 버전으로 업그레이드되었는지 확인합니다. 노드 풀을 컨트롤 플레인보다 높은 버전으로 업그레이드할 수 없습니다. 자세한 내용은 AKS 클러스터 컨트롤 플레인 업그레이드를 참조하세요.
- Azure CLI 사용하는 경우 이 문서에는 Azure CLI 버전 2.34.1 이상이 필요합니다.
az --version명령을 사용하여 버전을 찾습니다. 설치하거나 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요. - AKS 노드 풀에 대한 롤링 업그레이드를 구성하려면
Microsoft.ContainerService/managedClusters/agentPools/writeRBAC 역할 권한이 필요합니다.
롤링 업그레이드 작동 방식 개요
롤링 업그레이드 중에 AKS는 노드 풀의 각 노드에 대해 다음 작업을 수행합니다.
-
서지 노드 추가: 업그레이드 중에 용량을 유지하기 위해 최대 서지(
--max-surge) 설정에 따라 새 버퍼 노드를 추가합니다. - 코돈 및 드레인 노드: 애플리케이션 실행 중단을 최소화하려면 이전 노드를 하나씩 코돈하고 드레이닝 하세요. 최대 서지를 사용할 때 지정된 버퍼 노드 수만큼 노드를 동시에 차단 및 드레이닝할 수 있습니다.
- 흡수 시간( 선택 사항): 업그레이드를 계속하기 전에 워크로드가 새 노드에서 안정화되도록 진행하기 전에 구성된 흡수 기간을 기다립니다.
- 이전 노드를 재이미징하기: 이전 노드가 소진되면 새 버전을 수신하기 위해 재이미징됩니다. 이미지화된 노드는 업그레이드할 다음 노드 집합에 대한 버퍼 노드가 됩니다.
- 반복: 노드 풀의 모든 노드가 업그레이드될 때까지 프로세스가 반복됩니다.
- 서지 노드 제거: 모든 노드를 업그레이드한 후 나머지 버퍼 노드가 제거되어 원래 노드 풀 크기와 균형을 유지합니다.
롤링 업그레이드 설정하기
노드 급증 사용자 정의
중요합니다
- 노드 서지에는 각 업그레이드 작업에 요청된 최대 서지 수에 대한 구독 할당량이 필요합니다. 예를 들어, 각각 4개의 노드로 구성된 5개의 노드 풀이 있는 클러스터는 총 20개의 노드를 갖습니다. 각 노드 풀의 최대 서지 값이 50개%경우 업그레이드를 완료하려면 10개 노드(2개 노드 × 5 개 풀)의 추가 컴퓨팅 및 IP 할당량이 필요합니다.
- 노드 풀의 최대 서지 설정은 영구적입니다. 후속 Kubernetes 업그레이드 또는 노드 버전 업그레이드는 이 설정을 사용합니다. 언제든지 노드 풀의 최대 서지 값을 변경할 수 있습니다. 프로덕션 노드 풀의 최대 서지 설정은 33%를 권장합니다.
- Azure CNI를 사용하는 경우, 서브넷에 사용 가능한 IP가 있는지 확인하여 Azure CNI의 IP 요구 사항을 충족하십시오.
기본적으로 AKS는 추가 노드를 한 가지 사용하여 서지로 업그레이드를 구성합니다. 최대 서지 설정에 대한 기본값 1 을 사용하면 기존 애플리케이션의 코돈/드레이닝 전에 추가 노드를 만들어 이전 버전의 노드를 대체하여 워크로드 중단을 최소화할 수 있습니다. 노드 풀당 최대 서지 값을 사용자 지정할 수 있습니다. 최대 서지 값을 늘리면 업그레이드 프로세스가 더 빠르게 완료되지만 업그레이드 프로세스 중에 더 많은 중단이 발생할 수 있습니다.
예를 들어, 최대 서지 값 100%은 가능한 가장 빠른 업그레이드 프로세스를 제공하지만, 노드 풀의 모든 노드를 동시에 비웁니다. 테스트 환경에 이와 같은 더 높은 값을 사용할 수 있습니다. 프로덕션 노드 풀의 경우 최대 서지 설정을 33%로 권장합니다.
AKS는 정수 값과 최대 서지의 백분율 값을 모두 허용합니다. 다음은 그 예입니다.
| 값 형식 | 예시 | Description |
|---|---|---|
| 정수 | 5 |
확장을 위한 5개의 추가 노드 |
| 백분율 | 50% |
풀에서 현재 노드 수의 절반에 해당하는 서지 값입니다. |
최대 초과 수는 정수 또는 백분율 값으로 설정할 수 있습니다. 백분율 값은 가장 가까운 노드 수로 반올림 됩니다. 최대 서지 값이 업그레이드에 필요한 노드 수보다 큰 경우 업그레이드할 노드 수를 최대 서지 값으로 사용합니다.
할당량 또는 용량 제한으로 인해 최대 서지 값으로 스케일링할 수 없는 경우 Kubernetes 버전 >이 1.35인 에이전트 풀의 경우 AKS는 자동으로 대체로 1의 서지를 시도합니다. 1의 서지가 성공하면 업그레이드는 1개의 서지 노드로 진행됩니다.
최대 서지 값 설정
명령 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
사용할 수 없는 노드 사용자 지정
중요합니다
- 최대 미사용 상태는 업그레이드 프로세스 중에 서지 노드를 생성하지 않습니다. 대신 AKS는 한 번에 n 개의 노드(사용할 수 없는 최대 개수)를 코돈한 다음 에이전트 풀의 다른 노드로 Pod를 제거합니다. 이로 인해 Pod를 예약할 수 없는 경우 워크로드가 중단될 수 있습니다.
- "최대 미사용 가능 설정이 적용되면 예약할 Pod의 리소스가 줄어들어 Pod 중단 예산(PDB)을 충족하지 못하게 되고, 이는 더 많은 오류를 야기할 수 있습니다." 자세한 내용은 Pod 중단 예산 문제 해결을 참조하세요.
- 시스템 노드 풀에서 사용할 수 없는 최대값을 설정할 수 없습니다.
AKS는 서지 노드를 사용하지 않도록 업그레이드를 구성하고 현재 위치에서 노드를 업그레이드할 수도 있습니다. 사용할 수 없는 최대 값은 기존 노드 풀 노드에서 동시에 코드되고 드레이닝될 수 있는 노드 수를 결정합니다. 업그레이드 급증 시, 추가 할당량이나 용량을 가져올 수 없다면 현재 위치 업그레이드에 사용 불가한 최대값을 사용하는 것이 권장됩니다.
AKS는 정수 값과 사용할 수 없는 최대값에 대한 백분율 값을 모두 허용합니다. 다음은 그 예입니다.
| 값 형식 | 예시 | Description |
|---|---|---|
| 정수 | 5 |
5개의 노드가 기존 노드에서 격리됩니다. |
| 백분율 | 50% |
풀의 현재 노드 수의 절반을 사용할 수 없습니다. |
maxUnavailable 의 기본값은 0입니다.
maxUnavailable이(가) 0인 경우 AKS에서는 maxSurge가 0보다 커야 합니다. 자세한 내용은 AgentPoolUpgradeSettings API 참조를 참조하세요.
사용할 수 없는 최대값 설정
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
MaxUnavailable 대체 옵션(미리 보기)
중요합니다
AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.
둘 다 maxSurgemaxUnavailable 0보다 크면 AKS는 업그레이드 중에 대체 전략을 사용합니다.
-
전체 서지 시도: AKS는 먼저 구성된
maxSurge값을 사용하여 서지를 시도합니다. - 1의 서지로 대체: 할당량 또는 용량 제한으로 인해 전체 서지가 불가능한 경우 AKS는 대신 1개 노드의 서지를 시도합니다(Kubernetes 버전 >= 1.35인 에이전트 풀의 경우).
-
현재 위치 업그레이드로 대체: AKS가 서지 노드를 얻지 못하면 새 노드를 추가하지 않고 기존 노드를 조정하고 드레이닝하여
maxUnavailable을(를) 사용하여 현재 위치 업그레이드로 대체합니다.
이 대체 접근 방식을 사용하면 용량이 제한된 경우에도 업그레이드를 진행할 수 있지만 리소스를 사용할 수 있을 때 중단이 적은 서지 기반 접근 방식을 선호합니다.
MaxUnavailable 대체를 사용하려면 aks-preview Azure CLI 확장이 필요합니다.
maxSurge 및 maxUnavailable는 대체 동작을 위해 함께 또는 개별적으로 사용할 수 있습니다.
최대 서지 값과 최대 사용 불가 값을 모두 설정
# Configure fallback: try surge first, fall back to in-place upgrade if capacity is unavailable
az aks nodepool add \
--name <node-pool-name> \
--resource-group <resource-group-name> \
--cluster-name <cluster-name> \
--max-surge 33% \
--max-unavailable 3
# Update an existing node pool with fallback configuration
az aks nodepool update \
--name <node-pool-name> \
--resource-group <resource-group-name> \
--cluster-name <cluster-name> \
--max-surge 33% \
--max-unavailable 3
노드 드레이닝 시간 제한 사용자 지정
런타임 중에 다른 노드로 다시 예약할 수 없는 특정 Pod에 장기 실행 워크로드가 있을 수 있습니다. 예를 들어 실행을 완료해야 하는 메모리 집약적 상태 저장 워크로드입니다. 이러한 경우 AKS가 업그레이드 워크플로에서 준수하는 노드 드레이닝 시간 제한을 구성할 수 있습니다.
기본 노드 드레이닝 시간 제한 값은 30분입니다. 노드 드레이닝 시간 제한 값은 최소 5분 및 최대 24시간이 될 수 있습니다.
드레인 타임아웃 값이 경과하고, 파드가 여전히 실행 중인 경우 업그레이드 작업이 중지됩니다. 후속 PUT 작업은 중지된 업그레이드를 다시 시작합니다.
팁 (조언)
장시간 실행되는 Pod의 경우, Pod 사양에서 terminationGracePeriodSeconds을(를) 구성해야 합니다.
노드 드레이닝 시간 제한 값 설정
새 노드 풀 또는 기존 노드 풀에 대한 노드 드레인 시간 초과(분)를 설정하려면 az aks nodepool add 또는 az aks nodepool update 명령과 --drain-timeout 매개 변수를 사용하십시오.
# 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-timeout 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-timeout 45
노드 흡수 시간 사용자 지정
지정된 기간 동안 노드를 드레이닝한 후 다시 이미지를 구성하고 다음 노드로 이동하기 전에 대기 기간을 설정하려면, 지연 시간을 설정할 수 있습니다. 이렇게 시간을 흡수하면 업그레이드 프로세스 중에 모니터링 대시보드에서 애플리케이션 상태 확인과 같은 다른 작업을 수행할 수 있습니다.
기본 노드 흡수 시간은 0분입니다. 노드 흡수 시간 값은 최소 0분 및 최대 30분이 될 수 있습니다. 가능한 한 짧게 몸을 담그는 것이 좋습니다. 노드 흡수 시간이 높을수록 총 업그레이드 기간이 늘어나고 문제 검색이 지연됩니다.
노드 흡수 시간 값 설정
신규 또는 기존 노드 풀에 대한 노드 흡수 시간을 (분 단위로) 설정하려면 az aks nodepool add 플래그를 사용하여 az aks nodepool update, az aks nodepool upgrade, 또는 --node-soak-duration 명령을 사용하십시오.
# 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
프로덕션 워크로드에 권장되는 AKS 노드 풀 업그레이드 설정
다음 표에서는 프로덕션 워크로드에 권장되는 노드 풀 업그레이드 설정을 간략하게 설명합니다.
| Setting | Recommendation |
|---|---|
| 최대 서지 | 프로덕션 노드 풀의% 33으로 설정 |
| 드레인 타임아웃 | 가장 오랫동안 실행되는 Pod의 요구 사항에 맞춰 구성하세요. |
| 침지 시간 | 수동 확인이 필요하지 않은 경우 짧은 기간(0-5분) 사용 |
| Pod 중단 예산 | Pod 제거를 제어하도록 중요한 워크로드에 대한 PDB 구성 |
| 업그레이드 순서 | 비프로덕션 노드 풀을 먼저 업그레이드하여 새 버전의 유효성을 검사합니다. |