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

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

Kubernetes 버전 업그레이드

지원되는 AKS 클러스터를 업그레이드하면 Kubernetes 부 버전을 건너뛸 수 없습니다. 모든 업그레이드는 주 버전 번호별로 순차적으로 수행해야 합니다. 예를 들어 1.14.x ->1.15.x로 또는 1.15.x ->1.16.x로의 업그레이드는 허용되지만, 1.14.x ->1.16.x는 허용되지 않습니다. 지원되지 않는 버전에서 지원되는 버전으로 다시 업그레이드하는 경우에만 여러 버전을 건너뛸 수 있습니다. 예를 들어, 지원되지 않는 1.10.x에서 지원되는 1.12.x로(사용 가능한 경우) 업그레이드할 수 있습니다.

부 버전을 두 개 이상 건너뛰는 지원되지 않는 버전에서 업그레이드하는 경우, 업그레이드는 기능을 보장하지 않고 서비스 수준 계약 및 제한된 보증에서 제외됩니다. 버전이 상당히 오래된 경우 대신 클러스터를 다시 만드는 것이 좋습니다.

시작하기 전에

  • Azure CLI를 사용하는 경우 이 문서에서는 Azure CLI 버전 2.34.1 이상이 필요합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • Azure PowerShell을 사용하는 경우 이 문서에서는 Azure PowerShell 버전 5.9.0 이상이 필요합니다. Get-InstalledModule -Name Az을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure PowerShell 설치를 참조하세요.
  • 업그레이드 작업을 수행하려면 Microsoft.ContainerService/managedClusters/agentPools/write RBAC 역할이 필요합니다. Azure RBAC 역할에 대한 자세한 내용은 Azure 리소스 공급자 작업을 참조하세요.
  • 1.30 kubernetes 버전 및 1.27 LTS 버전부터 업그레이드하면 베타 API가 기본적으로 사용하지 않도록 설정됩니다.

Warning

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

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

참고 항목

AKS 수정, 릴리스 및 업데이트를 최신 상태로 유지하려면 AKS 릴리스 추적기를 참조하세요.

  • az aks get-upgrades 명령을 사용하여 클러스터에 사용할 수 있는 Kubernetes 릴리스를 확인합니다.

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

    다음 예제 출력에서는 현재 버전을 1.26.6으로 표시하고 사용 가능한 버전을 upgrades 아래에 나열합니다.

    {
      "agentPoolProfiles": null,
      "controlPlaneProfile": {
        "kubernetesVersion": "1.26.6",
        ...
        "upgrades": [
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.1"
          },
          {
            "isPreview": null,
            "kubernetesVersion": "1.27.3"
          }
        ]
      },
      ...
    }
    

AKS 클러스터 업그레이드 오류 메시지 문제 해결

다음 예제 출력은 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 이상인 경우 az upgrade를 실행하여 Azure CLI를 최신 버전으로 업그레이드합니다.

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에 사용 가능한 업그레이드가 없다고 표시되는 경우 AKS는 클러스터를 최신 Kubernetes 버전으로 업그레이드하는 기능을 지원하지 않습니다.

AKS 클러스터 업그레이드

클러스터 업그레이드 프로세스 중에 AKS는 다음 작업을 수행합니다.

  • 지정된 Kubernetes 버전을 실행하는 클러스터에 새 버퍼 노드(또는 최대 서지로 구성된 노드)를 추가합니다.
  • 실행 중인 애플리케이션의 중단을 최소화하기 위해 이전 노드 중 하나를 차단 및 드레이닝합니다. 최대 서지를 사용하는 경우 지정된 버퍼 노드 수만큼 많은 노드를 동시에 차단 및 드레이닝합니다.
  • 장기 실행 Pod의 경우 노드 드레이닝 시간 제한을 구성하여 Pod 제거 시 사용자 지정 대기 시간을 허용하고 노드별로 정상 종료할 수 있습니다. 지정하지 않은 경우 기본값은 30분입니다.
  • 이전 노드가 완전히 드레이닝되면 새 버전을 받기 위해 이미지로 다시 설치되고 업그레이드할 다음 노드의 버퍼 노드가 됩니다.
  • 필요에 따라 노드를 드레이닝하고 이미지로 다시 설치하며 다음 노드로 이동하는 동안 대기하는 시간을 설정할 수 있습니다. 간격이 짧으면 업그레이드 프로세스 중에 Grafana 대시보드에서 애플리케이션 상태를 확인하는 등의 다른 작업을 완료할 수 있습니다. 업그레이드 프로세스는 가능한 한 적정하게 0분에 가까운 짧은 시간을 권장합니다. 그렇지 않으면 노드 흡수 시간이 길어질수록 문제를 검색하는 데까지 걸리는 시간에 영향을 줍니다. 최소/최대 흡수 시간 값은 각각 0분과 30분입니다. 지정하지 않은 경우 기본값은 0분입니다.
  • 클러스터의 모든 노드가 업그레이드될 때까지 이 프로세스를 반복합니다.
  • 프로세스가 끝나면 마지막 버퍼 노드가 삭제되어 기존 에이전트 노드 수와 영역 잔량이 유지됩니다.

참고 항목

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

자세한 내용은 AKS에서 지원되는 Kubernetes 부 버전 업그레이드를 참조하세요.

  1. az aks upgrade 명령을 사용하여 클러스터를 업그레이드합니다.

    az aks upgrade \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --kubernetes-version <KUBERNETES_VERSION>
    
  2. az aks show 명령을 사용하여 업그레이드가 성공했는지 확인합니다.

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

    다음 예제 출력은 클러스터에서 지금 1.27.3을 실행하고 있음을 보여 줍니다.

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

자동 업그레이드 채널 설정

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

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

Important

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

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

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

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

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

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

최대 서지 값 설정

  • az aks nodepool add 또는 az aks nodepool update 명령을 사용하여 새 노드 풀 또는 기존 노드 풀의 최대 서지 값을 설정합니다.

    # 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
    

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

경우에 따라 특정 Pod에 장기 실행 워크로드가 있을 수 있으며 런타임 중에 다른 노드로 다시 예약할 수 없습니다(예: 실행을 완료해야 하는 메모리 집약적 상태 저장 워크로드). 이러한 경우 AKS가 업그레이드 워크플로에서 준수할 노드 드레이닝 시간 제한을 구성할 수 있습니다. 노드 드레이닝 시간 제한 값을 지정하지 않은 경우 기본값은 30분입니다. 드레이닝 시간 제한 값을 경과하여 Pod가 계속 실행 중인 경우 업그레이드 작업이 중지됩니다. 이후의 PUT 작업에서는 중지된 업그레이드를 다시 시작합니다.

  • az aks nodepool add 또는 az aks nodepool update 명령을 사용하여 새 노드 풀 또는 기존 노드 풀의 노드 드레이닝 시간 제한을 설정합니다.

    # Set drain timeout for a new node pool
    az aks nodepool add -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster  --drain-timeout 100
    
    # Update drain timeout for an existing node pool
    az aks nodepool update -n mynodepool -g MyResourceGroup --cluster-name MyManagedCluster --drain-timeout 45
    

노드 흡수 시간 값 설정

노드를 드레이닝하고 이미지로 다시 설치하며 다음 노드로 이동하는 동안 대기하는 시간을 허용하려면 0분에서 30분 사이 값으로 흡수 시간을 설정하면 됩니다. 노드 흡수 시간 값이 지정되지 않은 경우 기본값은 0분입니다.

  • 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 -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --node-soak-duration 10
    
    # Update node soak time for an existing node pool
    az aks nodepool update -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 5
    
    # Set node soak time when upgrading an existing node pool
    az aks nodepool upgrade -n MyNodePool -g MyResourceGroup --cluster-name MyManagedCluster --max-surge 33% --node-soak-duration 20
    

업그레이드 이벤트 확인

  • kubectl get events 명령을 사용하여 업그레이드 이벤트를 확인합니다.

    kubectl get events 
    

    다음 예제 출력은 업그레이드 중에 발생하는 상기 이벤트 중 일부를 보여 줍니다.

    ...
    default 2m1s Normal Drain node/aks-nodepool1-96663640-vmss000001 Draining node: [aks-nodepool1-96663640-vmss000001]
    ...
    default 1m45s Normal Upgrade node/aks-nodepool1-96663640-vmss000001   Soak duration 5m0s after 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 nodepool1
    ...
    

다음 단계

자동 업그레이드 구성 방법을 알아보려면 AKS 클러스터 자동 업그레이드 구성을 참조하세요.

업그레이드 모범 사례 및 기타 고려 사항에 대한 자세한 내용은 AKS 패치 및 업그레이드 참고 자료을 참조하세요.