チュートリアル - Azure Kubernetes Service (AKS) クラスターのアップグレード

アプリケーションとクラスターのライフサイクルの一環として、使用可能な最新バージョンの Kubernetes にアップグレードすることができます。 Azure CLI、Azure PowerShell、または Azure portal を使って、Azure Kubernetes Service (AKS) クラスターをアップグレードできます。

このチュートリアルでは、7 部構成の 7 番目で AKS クラスターをアップグレードします。 以下の方法について説明します。

  • Kubernetes の現在のバージョンと使用可能なバージョンを識別します。
  • Kubernetes ノードをアップグレードします。
  • 正常なアップグレードを検証します。

開始する前に

前のチュートリアルでは、アプリケーションをコンテナー イメージにパッケージ化し、コンテナー イメージを Azure Container Registry (ACR) にアップロードしました。 また、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 のインストールに関するページをご覧ください。

使用可能なクラスターのバージョンを取得する

  • アップグレードの前にご使用のクラスターに利用できる Kubernetes リリースを確認するには、az aks get-upgrades コマンドを使用します。

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

    次の出力例では、現在のバージョンが 1.28.9 として示され、使用できるバージョンが upgrades の下に一覧表示されます。

      {
        "agentPoolProfiles": null,
        "controlPlaneProfile": {
          "kubernetesVersion": "1.28.9",
          ...
          "upgrades": [
            {
              "isPreview": null,
              "kubernetesVersion": "1.29.4"
            },
            {
              "isPreview": null,
              "kubernetesVersion": "1.29.2"
            }
          ]
        },
        ...
      }
    

AKS クラスターのアップグレード

実行中のアプリケーションが中断する可能性を最小限に抑えるため、AKS ノードは慎重に切断およびドレインされます。 このプロセスの間に、AKS は次の手順を実行します。

  • 指定された Kubernetes バージョンを実行するクラスターに 1 つの新しいバッファー ノード (または最大サージに構成されている数のノード) が追加されます。
  • 実行中のアプリケーションの中断を最小限に抑えるために、古いノードを 1 つ切断およびドレインします。 最大サージを使用している場合は、指定されたバッファー ノードの数と同数のノードが同時に切断およびドレインされます。
  • 古いノードが完全にドレインされると、新しいバージョンを受け取るための再イメージ化が実行され、次にアップグレードされるノード用のバッファー ノードになります。
  • このプロセスは、クラスター内のすべてのノードがアップグレードされるまで繰り返されます。
  • プロセスの最後に、最後にバッファー ノードが削除され、既存のエージェント ノードの数とゾーン バランスが維持されます。

Note

パッチが指定されていない場合、クラスターは、指定されたマイナー バージョンの最新 GA パッチに自動的にアップグレードされます。 たとえば、--kubernetes-version1.28 に設定すると、クラスターは 1.28.9 にアップグレードされます。

詳細については、AKS でサポートされている Kubernetes マイナー バージョンのアップグレードに関する記事を参照してください。

クラスターを手動でアップグレードするか、クラスターの自動アップグレードを構成できます。 クラスターが常に最新バージョンの Kubernetes を実行するように、クラスターの自動アップグレードを構成することをお勧めします

クラスターを手動でアップグレードする

  • az aks upgrade コマンドを使用してクラスターをアップグレードします。

    az aks upgrade \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --kubernetes-version KUBERNETES_VERSION
    
  • アップグレード操作を確認し、コントロール プレーン "および" すべてのノード プールを選択したバージョンの Kubernetes にアップグレードするかどうかを確認するプロンプトが表示されます。

     Are you sure you want to perform this operation? (y/N): y
    Since control-plane-only argument is not specified, this will upgrade the control plane AND all nodepools to version 1.29.2. Continue? (y/N): y
    

    Note

    一度に 1 つのマイナー バージョンのみをアップグレードできます。 たとえば、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.29.2 にアップグレードした結果が示されています。 kubernetesVersion1.29.2 として表示されていることがわかります。

    {
      ...
      "agentPoolProfiles": [
        {
          ...
          "count": 3,
          "currentOrchestratorVersion": "1.29.2",
          "maxPods": 110,
          "name": "nodepool1",
          "nodeImageVersion": "AKSUbuntu-2204gen2containerd-202405.27.0",
          "orchestratorVersion": "1.29.2",
          "osType": "Linux",
          "upgradeSettings": {
            "drainTimeoutInMinutes": null,
            "maxSurge": "10%",
            "nodeSoakDurationInMinutes": null,
            "undrainableNodeBehavior": null
          },
          "vmSize": "Standard_DS2_v2",
          ...
        }
      ],
      ...
      "currentKubernetesVersion": "1.29.2",
      "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.29.2",
      "location": "eastus",
      "name": "myAKSCluster",
      "type": "Microsoft.ContainerService/ManagedClusters"
      ...
    }
    

クラスターの自動アップグレードを構成する

  • patch に設定されている --auto-upgrade-channel パラメータを含む az aks update コマンドを使用して、クラスターにアップグレード チャネルを設定します。

    az aks update --resource-group myResourceGroup --name myAKSCluster --auto-upgrade-channel patch
    

詳細については、「Azure Kubernetes Service (AKS) クラスターの自動アップグレード」をご覧ください。

AKS ノード イメージをアップグレードする

AKS では、新しいノード イメージが定期的に提供されます。 Linux のノード イメージは毎週更新され、Windows のノード イメージは毎月更新されます。 最新の AKS 機能とセキュリティ更新プログラムを使用するために、ノード イメージを頻繁にアップグレードすることをお勧めします。 詳細については、「Azure Kubernetes Service (AKS) でのノード イメージのアップグレード」を参照してください。 ノード イメージの自動アップグレードを構成するには、「Azure Kubernetes Service (AKS) クラスター ノードのオペレーティング システム イメージの自動アップグレード」を参照してください。

アップグレード イベントの表示

Note

クラスターをアップグレードすると、ノードで次の Kubernetes イベントが発生する可能性があります。

  • サージ: サージ ノードを作成します。
  • ドレイン: ノードからポッドを削除します。 各ポッドには、削除完了までに 5 分間のタイムアウトが設定されます。
  • 更新: ノードの更新は成功または失敗しています。
  • 削除: サージ ノードを削除します。
  • kubectl get events コマンドを使用して、既定の名前空間のアップグレード イベントを表示します。

    kubectl get events --field-selector source=upgrader
    

    次の出力例では、上記のイベントの一部がアップグレード中に一覧表示されています。

    LAST SEEN   TYPE      REASON    OBJECT                                   MESSAGE
    ...
    5m          Normal    Drain     node/aks-nodepool1-96663640-vmss000000   Draining node: aks-nodepool1-96663640-vmss000000
    5m          Normal    Upgrade   node/aks-nodepool1-96663640-vmss000000   Deleting node aks-nodepool1-96663640-vmss000000 from API server
    4m          Normal    Upgrade   node/aks-nodepool1-96663640-vmss000000   Successfully reimaged node: aks-nodepool1-96663640-vmss000000
    4m          Normal    Upgrade   node/aks-nodepool1-96663640-vmss000000   Successfully upgraded node: aks-nodepool1-96663640-vmss000000
    4m          Normal    Drain     node/aks-nodepool1-96663640-vmss000000   Draining node: aks-nodepool1-96663640-vmss000000
    ...
    

アップグレードを検証する

  • az aks show コマンドを使用して、アップグレードが成功したことを確認します。

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

    次の出力例は、AKS クラスターで KubernetesVersion 1.27.3 が実行されていることを示しています。

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

クラスターを削除する

このチュートリアルはシリーズの最後の部分なので、Azure の料金が発生しないように AKS クラスターを削除することをお勧めします。

  • az group delete コマンドを使用して、リソース グループ、コンテナー サービス、すべての関連リソースを削除します。

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

Note

クラスターを削除しても、AKS クラスターで使用される Azure Active Directory サービス プリンシパルは削除されません。 サービス プリンシパルを削除する手順については、AKS のサービス プリンシパルに関する考慮事項と削除に関するページを参照してください。 マネージド ID を使った場合、その ID はプラットフォームによって管理されており、ユーザーがシークレットをプロビジョニングしたりローテーションしたりする必要はありません。

次のステップ

このチュートリアルでは、AKS クラスター内の Kubernetes をアップグレードしました。 以下の方法を学習しました。

  • Kubernetes の現在のバージョンと使用可能なバージョンを識別します。
  • Kubernetes ノードをアップグレードします。
  • 正常なアップグレードを検証します。

AKS の詳細については、AKS の概要に関するページを参照してください。 AKS で完全なソリューションを作成する方法のガイダンスについては、AKS ソリューションのガイダンスに関する記事をご覧ください。