AKS(Azure Kubernetes Service) 클러스터 업그레이드 옵션
이 문서에서는 다양한 AKS 클러스터 업그레이드 옵션을 설명합니다. 기본 Kubernetes 버전을 업그레이드하려면 AKS 클러스터 업그레이드를 참조하세요.
여러 노드 풀 또는 Windows Server 노드를 사용하는 AKS 클러스터의 경우 AKS에서 노드 풀 업그레이드를 참조하세요. Kubernetes 클러스터 업그레이드를 수행하지 않고 특정 노드 풀을 업그레이드하려면 특정 노드 풀 업그레이드를 참조하세요.
수동 업그레이드 수행
수동으로 업그레이드하여 클러스터를 새 Kubernetes 버전으로 업그레이드하는 시기를 제어할 수 있습니다. 수동 업그레이드는 프로덕션 클러스터를 업그레이드하기 전에 새 Kubernetes 버전을 테스트하려는 경우 유용합니다. 또한 수동 업그레이드를 통해 사용 가능한 최신 버전이 아닌 특정 Kubernetes 버전으로 클러스터를 업그레이드할 수 있습니다.
수동으로 업그레이드하려면 다음 문서를 참조하세요.
- AKS 클러스터 업그레이드
- 노드 이미지 업그레이드
- 노드 서지 업그레이드 사용자 지정
- 프로세스 노드 OS 업데이트
- Azure Kubernetes Fleet Manager를 통해 여러 AKS 클러스터 업그레이드
자동 업그레이드 구성
자동 업그레이드를 구성하면 클러스터를 사용 가능한 최신 Kubernetes 버전으로 자동 업그레이드할 수 있습니다. 자동 업그레이드는 클러스터가 항상 최신 Kubernetes 버전을 실행하고 있는지 확인하려는 경우에 유용합니다. 또한 자동 업그레이드를 사용하여 클러스터가 항상 지원되는 Kubernetes 버전을 실행하도록 할 수도 있습니다.
자동 업그레이드를 구성하려면 다음 문서를 참조하세요.
- AKS 클러스터 자동 업그레이드
- 계획된 유지 관리를 사용하여 AKS 클러스터 업그레이드 예약 및 제어
- API 호환성이 손상되는 변경에서 AKS 클러스터 자동 업그레이드 중지(미리 보기)
- AKS 클러스터 노드 운영 체제 이미지 자동 업그레이드
- GitHub Actions를 사용하여 AKS 노드에 보안 업데이트 자동 적용
여러 가용성 영역에 걸쳐 있는 노드 풀에 대한 특별 고려 사항
AKS는 노드 그룹에서 최상의 영역 분산을 사용합니다. 업그레이드 서지 중에 Virtual Machine Scale Sets 서지 노드에 대한 영역은 미리 알 수 없으므로 업그레이드 중에 일시적으로 영역 구성이 불균형해질 수 있습니다. 그러나 업그레이드가 완료되면 AKS는 서지 노드를 삭제하고 원래 영역 균형을 유지합니다. 업그레이드하는 동안 영역의 균형을 유지하려는 경우 서지를 노드 3개의 배수로 늘릴 수 있으며, Virtual Machine Scale Sets에서 최상의 영역 분산을 통해 가용성 영역 간에 노드의 균형을 유지할 수 있습니다. 최상의 영역 균형을 사용하면 확장 집합은 균형을 유지하면서 규모 확장 및 감축을 시도합니다. 그러나 어떤 이유로든 이것이 가능하지 않은 경우(예: 하나의 영역이 다운되면 확장 집합이 해당 영역에 새 VM을 만들 수 없는 경우) 확장 집합을 사용하면 임시 불균형을 성공적으로 확장하거나 축소할 수 있습니다.
Azure LRS(로컬 중복 스토리지) 디스크에서 지원되는 PVC(영구 볼륨 클레임)는 특정 영역에 바인딩되며, 서지 노드가 PVC의 영역과 일치하지 않으면 즉시 복구하지 못할 수도 있습니다. 영역이 일치하지 않으면 업그레이드 작업 시 노드를 계속 드레이닝하지만 PV가 영역에 바인딩될 때 애플리케이션의 가동이 중지될 수 있습니다. 이 사례를 처리하고 고가용성을 유지하려면 Kubernetes가 드레이닝 작업 중에 가용성 요구 사항을 준수할 수 있도록 애플리케이션에서 Pod 중단 예산을 구성합니다.
그리기 불가능한 노드 동작에 최적화(미리 보기)
드레이닝 실패에 대한 업그레이드 프로세스 동작을 구성할 수 있습니다. 기본 업그레이드 동작은 Schedule
업그레이드 작업이 실패하게 하는 노드 드레이닝 오류로 구성되며, 그리지 않은 노드는 예약 가능한 상태로 유지됩니다. 또는 격리된 상태에 배치하여 드레이닝에 실패한 노드를 건너뛰고, 레이블을 지정kubernetes.azure.com/upgrade-status:Quarantined
하고, 나머지 노드 업그레이드를 진행하는 동작을 선택할 Cordon
수 있습니다. 이 동작은 모든 노드가 업그레이드되거나 격리되도록 합니다. 이 방법을 사용하면 드레이닝 오류를 해결하고 격리된 노드를 정상적으로 관리할 수 있습니다.
새 Cordon 동작을 설정할 어떻게 할까요? 있나요?
CLI 미리 보기를 사용하고 확장 9.0.0b3 이상을 설치 aks-preview
합니다.
다음 명령을 사용하여 확장을 업데이트하거나 설치 aks-preview
할 수 있습니다.
az extension update --name aks-preview
az extension add --name aks-preview
노드 풀에서 사용할 수 없는 노드 동작을 다음으로 업데이트합니다 Cordon
.
az aks nodepool update --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --resource-group $RESOURCE_GROUP --max-surge 1 --undrainable-node-behavior Cordon
다음 예제 출력은 업데이트된 그리할 수 없는 노드 동작을 보여줍니다.
"upgradeSettings": {
"drainTimeoutInMinutes": null,
"maxSurge": "1",
"nodeSoakDurationInMinutes": null,
"undrainableNodeBehavior": "Cordon"
}
차단된 노드에서 레이블을 확인합니다. 다음 명령을 사용하여 업그레이드 시 드레이닝 노드 오류가 발생하는 경우:
kubectl get nodes --show-labels=true
차단된 노드는 Pod에 대해 예약되지 않고 레이블 "kubernetes.azure.com/upgrade-status: Quarantined"
로 표시됩니다. 차단된 상태로 둘 수 있는 최대 노드 수는 값보다 많을 Max-Surge
수 없습니다.
차단된 노드를 제거할 어떻게 할까요? 있나요?
먼저 드레이닝의 원인이 되는 문제를 해결합니다. 다음 예제에서는 책임 있는 PDB를 제거합니다.
kubectl delete pdb nginx-pdb
poddisruptionbudget.policy "nginx-pdb" deleted.
그런 다음, 명령을 사용하여 차단된 노드를 삭제합니다 az aks nodepool delete-machines
. 이 명령은 이전 버전에 남아 있는 노드를 제거하여 노드 풀 공간을 줄이려는 경우에 유용합니다.
az aks nodepool delete-machines --cluster-name MyCluster --machine-names aks-nodepool1-test123-vmss000000 --name nodepool1 --resource-group TestRG
이 단계를 완료한 후에는 여기에 설명된 대로 선택적 필드 없이 업데이트 작업을 수행하여 클러스터 상태를 조정할 수 있습니다.
예제 명령:
az aks update --resource-group TestRG --name MyCluster
또는 노드 풀을 업그레이드된 노드 수와 동일한 수의 노드로 확장할 수 있습니다. 이 작업을 수행하면 노드 풀이 의도한 원래 크기로 설정됩니다. AKS는 차단된 노드 제거의 우선 순위를 지정합니다. 또한 이 명령은 클러스터 프로비저닝 상태를 .로 Succeeded
복원합니다. 지정된 2
예제에서는 업그레이드된 노드의 총 수입니다.
az aks nodepool scale --resource-group TestRG --cluster-name MyCluster --name nodepool1 --node-count 2
업그레이드를 최적화하여 성능 향상 및 중단 최소화
계획된 유지 관리 기간, 최대 서지, Pod 중단 예산, 노드 드레이닝 시간 제한 및 노드 흡수 시간의 조합으로 중단을 최소화하면서 유지 관리 기간이 끝날 무렵에 노드 업그레이드가 성공적으로 완료될 가능성을 크게 높일 수 있습니다.
- 계획된 유지 관리 기간을 사용하면 서비스 팀이 미리 정의된 기간(일반적으로 트래픽이 적은 기간)에 자동 업그레이드를 예약하여 워크로드에 미치는 영향을 최소화할 수 있습니다. 최소 4시간 동안 사용하는 것이 좋습니다.
- 노드 풀의 최대 서지를 사용하면 업그레이드 프로세스 중에 추가 할당량을 요청할 수 있으며, 동시에 업그레이드하기 위해 선택한 노드의 수를 제한할 수 있습니다. 최대 서지가 높을수록 업그레이드 프로세스가 빨라집니다. 모든 노드를 동시에 업그레이드하여 실행 중인 애플리케이션이 중단될 수 있으므로 100%로 설정하지 않는 것이 좋습니다. 프로덕션 노드 풀에는 최대 33%의 서지 할당량을 설정하는 것이 좋습니다.
- Pod 중단 예산은 서비스 애플리케이션에 대해 설정되며 AKS 제어 노드 업그레이드와 같이 자발적인 중단 중에 중단될 수 있는 Pod 수를 제한합니다. 활성화해야 하는 최소 애플리케이션 포드 수를 나타내는
minAvailable
복제본으로 구성하거나 종료할 수 있는 최대 애플리케이션 포드 수를 나타내는maxUnavailable
복제본으로 구성하여 애플리케이션의 고가용성을 보장할 수 있습니다. PDB(Pod 중단 예산) 구성에 제공된 지침을 참조하세요. 특정 서비스에 가장 적합한 설정을 확인하려면 PDB 값의 유효성을 검사해야 합니다. - 노드 풀의 노드 드레이닝 시간 제한을 사용하면 업그레이드 중에 Pod 제거 및 노드당 정상 종료 대기 시간을 구성할 수 있습니다. 이 옵션은 장기 실행 워크로드를 처리할 때 유용합니다. 노드 드레이닝 시간 제한(단위: 분)을 지정하면 AKS에서 Pod 중단 예산을 대기합니다. 지정하지 않으면 기본 시간 제한은 30분입니다.
- 노드 흡수 시간은 제어되는 방식으로 노드 업그레이드를 중지하는 데 도움이 되며 업그레이드 중에 발생하는 애플리케이션 가동 중지 시간을 최소화할 수 있습니다. 노드 업그레이드 사이에 애플리케이션 준비 상태를 확인하려면 대기 시간을 최대한 0분에 가깝게 지정하면 됩니다. 지정하지 않으면 기본값은 0분입니다. 노드 흡수 시간은 노드 풀에서 사용할 수 있는 최대 서지/노드 드레이닝 시간 제한 속성과 함께 작동하여 업그레이드 속도 및 애플리케이션 가용성 측면에서 올바른 결과를 제공합니다.
다음 단계
이 문서에서는 다양한 AKS 클러스터 업그레이드 옵션을 나열했습니다. 업그레이드 모범 사례 및 기타 고려 사항에 대한 자세한 내용은 AKS 패치 및 업그레이드 참고 자료를 참조하세요.
Azure Kubernetes Service