자습서: AKS(Azure Kubernetes Service)에서 Kubernetes 업그레이드

애플리케이션 및 클러스터 수명 주기의 일부로 사용 가능한 최신 버전의 Kubernetes로 업그레이드할 수 있습니다. Azure CLI, Azure PowerShell 또는 Azure Portal 사용하여 AKS(Azure Kubernetes Service) 클러스터를 업그레이드할 수 있습니다.

7부 중 마지막인 이 자습서에서는 다음과 같은 방법에 대해 알아봅니다.

  • 현재 및 사용 가능한 Kubernetes 버전을 확인합니다.
  • Kubernetes 노드를 업그레이드합니다.
  • 성공적인 업그레이드의 유효성을 검사합니다.

시작하기 전에

이전 자습서에서는 애플리케이션을 컨테이너 이미지에 패키지하고 컨테이너 이미지를 ACR(Azure Container Registry)에 업로드했습니다. 또한 AKS 클러스터를 만들고 애플리케이션을 배포했습니다. 이러한 단계를 완료하지 않았고 이 자습서와 함께 수행하려는 경우 자습서 1: AKS용 애플리케이션 준비로 시작합니다.

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

사용 가능한 클러스터 버전 가져오기

  • 업그레이드하기 전에 명령을 사용하여 az aks get-upgrades 클러스터에 사용할 수 있는 Kubernetes 릴리스를 검사.

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

    다음 예제 출력은 현재 버전을 1.18.10 으로 표시하고 업그레이드에서 사용 가능한 버전을 나열 합니다.

    {
      "agentPoolProfiles": null,
      "controlPlaneProfile": {
        "kubernetesVersion": "1.18.10",
        ...
        "upgrades": [
          {
            "isPreview": null,
            "kubernetesVersion": "1.19.1"
          },
          {
            "isPreview": null,
            "kubernetesVersion": "1.19.3"
          }
        ]
      },
      ...
    }
    

클러스터 업그레이드

AKS 노드는 실행 중인 애플리케이션에 대한 잠재적인 중단을 최소화하기 위해 신중하게 차단 및 드레이닝됩니다. 이 프로세스 중에 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 .

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

    참고

    부 버전을 한 번에 하나씩 업그레이드할 수 있습니다. 예를 들어 1.14.x 에서 1.15.x로 업그레이드할 수 있지만 1.14.x 에서 1.16.x 로 직접 업그레이드할 수는 없습니다. 1.14.x에서 1.16.x로 업그레이드하려면 먼저 1.14.x에서 1.15.x로 업그레이드한 다음 1.15.x에서 1.16.x로의 또 다른 업그레이드까지 수행해야 합니다.

    다음 예 출력은 1.19.1로 업그레이드한 결과를 보여 줍니다. 이제 kubernetesVersion1.19.1이 표시됩니다.

    {
      "agentPoolProfiles": [
        {
          "count": 3,
          "maxPods": 110,
          "name": "nodepool1",
          "osType": "Linux",
          "storageProfile": "ManagedDisks",
          "vmSize": "Standard_DS1_v2",
        }
      ],
      "dnsPrefix": "myAKSClust-myResourceGroup-19da35",
      "enableRbac": false,
      "fqdn": "myaksclust-myresourcegroup-19da35-bd54a4be.hcp.eastus.azmk8s.io",
      "id": "/subscriptions/<Subscription ID>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
      "kubernetesVersion": "1.19.1",
      "location": "eastus",
      "name": "myAKSCluster",
      "type": "Microsoft.ContainerService/ManagedClusters"
    }
    

업그레이드 이벤트 보기

참고

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

  • 서지: 서지 노드를 만듭니다.
  • 드레이닝: 노드에서 Pod를 제거합니다. 각 Pod에는 제거를 완료하는 데 5분의 시간 제한이 있습니다.
  • 업데이트: 노드 업데이트가 성공했거나 실패했습니다.
  • 삭제: 서지 노드를 삭제합니다.
  • 명령을 사용하여 기본 네임스페이스에서 업그레이드 이벤트를 봅니다 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)
    ...
    

업그레이드 유효성 검사

  • 명령을 사용하여 업그레이드가 성공했는지 확인합니다 az aks show .

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

    다음 예제 출력에서는 AKS 클러스터에서 KubernetesVersion 1.19.1을 실행하는 것을 보여줍니다.

    Name          Location    ResourceGroup    KubernetesVersion    CurrentKubernetesVersion  ProvisioningState    Fqdn
    ------------  ----------  ---------------  -------------------  ------------------------  -------------------  ----------------------------------------------------------------
    myAKSCluster  eastus      myResourceGroup  1.19.1               1.19.1                    Succeeded            myaksclust-myresourcegroup-19da35-bd54a4be.hcp.eastus.azmk8s.io
    

클러스터 삭제

이 자습서는 시리즈의 마지막 부분이므로 AKS 클러스터를 삭제하는 것이 좋습니다. Kubernetes 노드는 Azure Virtual Machines에서 실행되며 클러스터를 사용하지 않는 경우에도 요금이 계속 부과됩니다.

  • 명령을 사용하여 리소스 그룹, 컨테이너 서비스 및 모든 관련 리소스를 az group delete 제거합니다.

    az group delete --name myResourceGroup --yes --no-wait
    

참고

클러스터를 삭제하면 AKS 클러스터에서 사용하는 azure Active Directory(Azure AD) 서비스 주체가 제거되지 않습니다. 서비스 주체를 제거하는 방법에 대한 단계는 AKS 서비스 주체 고려 사항 및 삭제를 참조하세요. 관리 ID를 사용한 경우 ID는 플랫폼에서 관리되며 비밀을 프로비전하거나 회전할 필요가 없습니다.

다음 단계

이 자습서에서는 AKS 클러스터에서 Kubernetes를 업그레이드했습니다. 구체적으로 다음 작업 방법을 알아보았습니다.

  • 현재 및 사용 가능한 Kubernetes 버전을 확인합니다.
  • Kubernetes 노드를 업그레이드합니다.
  • 성공적인 업그레이드의 유효성을 검사합니다.

AKS에 대한 자세한 내용은 AKS 개요를 참조하세요. AKS를 사용하여 전체 솔루션을 만드는 방법에 대한 지침은 AKS 솔루션 지침을 참조하세요.