AKS(Azure Kubernetes Service) 클러스터 업그레이드

AKS 클러스터 수명 주기 중 일부에는 최신 Kubernetes 버전으로 정기적으로 업그레이드하는 작업이 포함됩니다. 최신 보안 릴리스를 적용하거나 업그레이드하여 최신 기능을 받는 것은 중요합니다. 이 문서에서는 AKS 클러스터에 대한 업그레이드를 확인, 구성, 적용하는 방법을 보여 줍니다.

여러 노드 풀 또는 Windows Server 노드를 사용하는 AKS 클러스터의 경우 AKS에서 노드 풀 업그레이드를 참조하세요. Kubernetes 클러스터 업그레이드를 수행하지 않고 특정 노드 풀을 업그레이드하려면 특정 노드 풀 업그레이드를 참조하세요.

참고

수동으로 수행하든 자동으로 수행하든 업그레이드 작업은 노드 이미지가 아직 최신 버전이 아닌 경우 해당 버전을 업그레이드합니다. 최신 버전은 전체 AKS 릴리스에 따라 결정되며 AKS 릴리스 추적기를 방문하여 확인할 수 있습니다.

참고

업그레이드 작업을 수행하려면 Microsoft.ContainerService/managedClusters/agentPools/write RBAC 역할이 필요합니다. Azure RBAC 역할에 대한 자세한 내용은 [Azure 리소스 공급자 작업]을 참조하세요.

시작하기 전에

  • Azure CLI를 사용하는 경우 이 문서에서는 Azure CLI 버전 2.34.1 이상을 실행해야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • Azure PowerShell을 사용하는 경우 이 자습서에서는 Azure PowerShell 버전 5.9.0 이상을 실행해야 합니다. Get-InstalledModule -Name Az을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure PowerShell 설치를 참조하세요.

경고

AKS 클러스터 업그레이드는 노드의 차단 및 드레이닝을 트리거합니다. 사용 가능한 계산 할당량이 낮은 경우 업그레이드가 실패할 수 있습니다. 자세한 내용은 할당량 늘리기를 참조하세요.

사용할 수 있는 AKS 클러스터 업그레이드를 위한 확인

클러스터에 사용할 수 있는 Kubernetes 릴리스를 확인하려면 az aks get-upgrades 명령을 사용합니다. 다음 예제에서는 myResourceGroupmyAKSCluster에 가능한 업그레이드를 확인합니다.

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster --output table

참고

지원되는 AKS 클러스터를 업그레이드하는 경우 Kubernetes 부 버전은 건너뛸 수 없습니다. 모든 업그레이드는 주 버전 번호로 순차적으로 수행되어야 합니다. 예를 들어 1.14.x ->1.15.x 또는 1.15.x ->1.16.x 업그레이드는 가능하지만 1.14.x ->1.16.x 업그레이드는 가능하지 않습니다.

지원되지 않는 버전에서 지원되는 버전으로 다시 업그레이드하는 경우에만 여러 버전을 건너뛸 수 있습니다. 예를 들어, 지원되지 않는 1.10.x 버전에서 지원되는 1.15.x 버전으로 업그레이드(사용 가능한 경우)는 완료할 수 있습니다. 두 개 이상의 부 버전을 건너뛰는 지원되지 않는 버전에서 업그레이드를 수행하는 경우 업그레이드는 기능을 보장하지 않고 수행되며 서비스 수준 계약 및 제한된 보증에서 제외됩니다. 버전이 상당히 오래된 경우 클러스터를 다시 만드는 것이 좋습니다.

다음 예제 출력에서는 1.19.1 또는 1.19.3 버전으로 클러스터를 업그레이드할 수 있음을 보여줍니다.

Name     ResourceGroup    MasterVersion    Upgrades
-------  ---------------  ---------------  --------------
default  myResourceGroup  1.18.10          1.19.1, 1.19.3

다음 예제 출력은 appservice-kube 확장이 Azure CLI 버전과 호환되지 않음을 의미합니다(최소 버전 2.34.1이 필요함).

The 'appservice-kube' extension is not compatible with this version of the CLI.
You have CLI core version 2.0.81 and this extension requires a min of 2.34.1.
Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.

이 출력을 수신하는 경우 Azure CLI 버전을 업데이트해야 합니다. az upgrade 명령은 버전 2.11.0에 추가되었으며 2.11.0 이전 버전에서는 작동하지 않습니다. Azure CLI 설치의 설명에 따라 Azure CLI를 다시 설치하여 이전 버전을 업데이트할 수 있습니다. Azure CLI 버전이 2.11.0 이상인 경우 Azure CLI를 최신 버전으로 업그레이드하기 위해 az upgrade를 실행하라는 메시지가 표시됩니다.

Azure CLI가 업데이트되고 다음 예제 출력이 표시되는 경우 업그레이드를 사용할 수 없음을 의미합니다.

ERROR: Table output unavailable. Use the --query option to specify an appropriate query. Use --debug for more info.

업그레이드를 사용할 수 없는 경우 지원되는 버전의 Kubernetes를 사용하여 새 클러스터를 만들고 워크로드를 기존 클러스터에서 새 클러스터로 마이그레이션합니다. az aks get-upgrades에 사용 가능한 업그레이드가 표시되지 않는 경우 클러스터를 최신 Kubernetes 버전으로 업그레이드하는 것은 지원되지 않습니다.

노드 서지 업그레이드 사용자 지정

중요

노드 서지에는 각 업그레이드 작업에 요청된 최대 서지 수에 대한 구독 할당량이 필요합니다. 예를 들어 각각 4개의 노드가 있는 5개의 노드 풀을 가진 클러스터에는 총 20개의 노드가 있습니다. 각 노드 풀의 최대 서지 값이 50%일 경우, 업그레이드를 완료하려면 10개 노드의 추가 계산 및 IP 할당량(노드 2개 * 풀 5개)이 필요합니다.

Azure CNI를 사용하는 경우 서브넷에 사용할 수 있는 IP가 있는지 확인하여 Azure CNI의 IP 요구 사항을 충족할 수 있습니다.

기본적으로 AKS는 하나의 추가 노드를 사용하여 서지로 업그레이드를 구성합니다. 최대 서지 설정에 기본값 1을 사용하면 AKS가 기존 애플리케이션의 연결/드레인 전에 추가 노드를 만들어 이전 버전의 노드를 대체함으로써 워크로드가 중단되는 것을 최소화할 수 있습니다. 업그레이드 속도와 업그레이드가 중단되는 현상을 절충하기 위해 최대 서지 값을 노드 풀별로 맞춤 설정할 수 있습니다. 최대 서지 값을 늘리면 업그레이드 프로세스가 더 빠르게 완료되지만 최대 서지 값을 크게 설정하면 업그레이드 프로세스가 중단될 수 있습니다.

예를 들어 최대 서지 값이 100%면 가능한 가장 빠른 업그레이드 프로세스(노드 수 두 배)를 제공하지만 노드 풀의 모든 노드가 동시에 드레이닝됩니다. 테스트 환경에 이처럼 더 높은 값을 사용하기를 원할 수도 있습니다. 프로덕션 노드 풀의 경우 33%의 max_surge 설정을 하는 것이 좋습니다.

AKS는 정수 값과 최대 서지의 백분율 값을 모두 허용합니다. “5”와 같은 정수는 서지할 5개의 추가 노드를 나타냅니다. "50%"값은 풀에서 현재 노드 수의 절반에 해당하는 서지 값을 나타냅니다. 최소 서지 값은 1%이고 최대 값은 100%가 될 수 있습니다. 백분율 값은 가장 가까운 노드 수로 반올림 됩니다. 최대 서지 값이 업그레이드에 필요한 노드 수보다 큰 경우 업그레이드할 노드 수를 최대 서지 값으로 사용합니다.

업그레이드하는 동안 최소 서지 값은 1이고 최대 값은 노드 풀의 노드 수와 같을 수 있습니다. 더 큰 값을 설정할 수 있지만, 최대 서지 수에 사용되는 최대 노드 수는 업그레이드 시 풀의 노드 수보다 높을 수 없습니다.

중요

노드 풀의 최대 서지 설정은 영구적입니다. 이후 Kubernetes 업그레이드 또는 노드 버전 업그레이드 시 이 설정이 사용됩니다. 언제든지 노드 풀의 최대 서지 값을 변경할 수 있습니다. 프로덕션 노드 풀의 경우 33%의 최대 서지 설정을 하는 것이 좋습니다.

다음 명령을 사용하여 새 노드 풀 또는 기존 노드 풀의 최대 서지 값을 설정할 수 있습니다.

# Set max surge for a new node pool
az aks nodepool add -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33%
# Update max surge for an existing node pool 
az aks nodepool update -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 5

AKS 클러스터 업그레이드

AKS 클러스터에 대한 사용 가능한 버전 목록을 통해 az aks upgrade 명령을 사용하여 업그레이드합니다. 업그레이드 프로세스 중 AKS는 다음을 수행합니다.

  • 지정된 Kubernetes 버전을 실행하는 클러스터에 새 버퍼 노드(또는 최대 서지로 구성된 노드)를 추가합니다.
  • 실행 중인 애플리케이션의 중단을 최소화하기 위해 이전 노드 중 하나를 차단 및 드레이닝합니다. 최대 서지를 사용하는 경우 지정된 버퍼 노드 수만큼 많은 노드를 동시에 차단 및 드레이닝합니다.
  • 이전 노드가 완전히 드레이닝되면 새 버전을 받기 위해 이미지로 다시 설치되고 업그레이드할 다음 노드의 버퍼 노드가 됩니다.
  • 이 프로세스는 클러스터의 모든 노드가 업그레이드될 때까지 반복됩니다.
  • 프로세스가 끝나면 마지막 버퍼 노드가 삭제되어 기존 에이전트 노드 수와 영역 잔량이 유지됩니다.

참고

패치가 지정되지 않은 경우 클러스터가 지정된 부 버전의 최신 GA 패치로 자동 업그레이드됩니다. 예를 들어 --kubernetes-version1.21로 설정하면 클러스터가 1.21.9로 업그레이드됩니다.

별칭 부 버전으로 업그레이드하는 경우 상위 부 버전만 지원됩니다. 예를 들어, 1.20.x에서 1.20로 업그레이드하면 최신 GA 1.20 패치로 업그레이드가 트리거되지 않지만 1.21로 업그레이드하면 최신 GA 1.21 패치로 업그레이드가 트리거됩니다.

az aks upgrade \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --kubernetes-version KUBERNETES_VERSION

노드 수에 따라 클러스터를 업그레이드하는 데 몇 분 정도 걸립니다.

중요

PodDisruptionBudgets(PDB)가 한 번에 1개 이상의 Pod 복제본을 이동하도록 허용해야 합니다. 그렇지 않으면 드레이닝/제거 작업이 실패합니다. 드레d이닝 작업이 실패하면 애플리케이션이 중단되지 않도록 업그레이드 작업이 의도적으로 실패합니다. 작업 중지(잘못된 PDB, 할당량 부족 등)의 원인을 수정한 후 작업을 다시 시도하세요.

업그레이드가 성공적이었는지 확인하려면 az aks show 명령을 사용합니다.

az aks show --resource-group myResourceGroup --name myAKSCluster --output table

다음 예제 출력은 클러스터가 이제 1.19.1을 실행하고 있음을 보여줍니다.

Name          Location    ResourceGroup    KubernetesVersion    ProvisioningState    Fqdn
------------  ----------  ---------------  -------------------  -------------------  ----------------------------------------------
myAKSCluster  eastus      myResourceGroup  1.19.1               Succeeded            myakscluster-dns-379cbbb9.hcp.eastus.azmk8s.io

업그레이드 이벤트 보기

클러스터를 업그레이드할 때 각 노드에서 다음 Kubernetes 이벤트가 발생할 수 있습니다.

  • 서지 – 서지 노드를 만듭니다.
  • 드레이닝 – 노드에서 Pod가 제거됩니다. 각 Pod에는 제거를 완료하는 데 30초의 시간 제한이 있습니다.
  • 업데이트 – 노드 업데이트가 성공했거나 실패했습니다.
  • 삭제 – 서지 노드를 삭제했습니다.

업그레이드를 실행하는 동안 기본 네임스페이스에 이벤트를 표시하는 데 kubectl get events를 사용합니다. 예를 들어 다음과 같습니다.

kubectl get events 

다음 예제 출력은 업그레이드 중에 나열된 위의 이벤트 중 일부를 보여 줍니다.

...
default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 Draining node: [aks-nodepool1-96663640-vmss000001]
...
default 9m22s Normal Surge node/aks-nodepool1-96663640-vmss000002 Created a surge node [aks-nodepool1-96663640-vmss000002 nodepool1] for agentpool %!s(MISSING)
...

자동 업그레이드 채널 설정

클러스터를 수동으로 업그레이드하는 것 외에도 클러스터에서 자동 업그레이드 채널을 설정할 수 있습니다. 자세한 내용은 AKS 클러스터 자동 업그레이드를 참조하세요.

여러 가용성 영역에 걸쳐 있는 노드 풀에 대한 특별 고려 사항

AKS는 노드 그룹에서 최상의 영역 분산을 사용합니다. 업그레이드 서지 동안 Virtual Machine Scale Sets 서지 노드에 대한 영역은 미리 알 수 없습니다. 이로 인해 업그레이드하는 동안 일시적으로 불균형 영역 구성이 발생할 수 있습니다. 그러나 업그레이드가 완료되면 AKS는 서지 노드를 삭제하고 원래 영역 균형을 유지합니다. 업그레이드하는 동안 영역의 균형을 유지하려면 서지를 3개 노드의 배수로 늘입니다. 그런 다음 Virtual Machine Scale Sets 최상의 영역 분산을 통해 가용성 영역 노드의 균형을 조정합니다.

Azure LRS 디스크에서 지원되는 PVC가 있는 경우 특정 영역에 바인딩되며 서지 노드가 PVC의 영역과 일치하지 않으면 즉시 복구하지 못할 수 있습니다. 이로 인해 업그레이드 작업이 노드를 계속 드레이닝하지만 PV가 영역에 바인딩될 때 애플리케이션이 가동 중지될 수 있습니다. 이 사례를 처리하고 고가용성을 유지하려면 애플리케이션에서 Pod 중단 예산을 구성합니다. 이를 통해 Kubernetes는 업그레이드의 드레이닝 작업 중에 가용성 요구 사항을 준수할 수 있습니다.

다음 단계

이 문서에서는 기존 AKS 클러스터를 업그레이드하는 방법을 설명했습니다. AKS 클러스터의 배포 및 관리에 대해 더 자세히 알아보려면 자습서 세트를 참조하세요.