チュートリアル:Azure Kubernetes Service (AKS) での Kubernetes のアップグレード

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

このチュートリアル (7 部構成の第 7 部) では、Kubernetes クラスターがアップグレードされます。 学習内容は次のとおりです。

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

開始する前に

これまでのチュートリアルでは、アプリケーションをコンテナー イメージにパッケージ化しました。 このイメージを Azure Container Registry にアップロードし、AKS クラスターを作成しました。 その後、AKS クラスターにアプリケーションをデプロイしました。 これらの手順を完了しておらず、順番に進めたい場合は、チュートリアル 1 - コンテナー イメージを作成するに関するページから開始してください。

このチュートリアルでは、Azure CLI バージョン 2.0.53 以降を実行している必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

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

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

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

次の例では、現在のバージョンが 1.18.10 であることがわかります。また、 [Upgrades] の下に、利用可能なバージョンが示されています。

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

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

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

  1. Kubernetes スケジューラが、アップグレードされるノードに追加のポッドがスケジュールされないようにします。
  2. ノードで実行中のポッドは、クラスター内の他のノードにスケジュールされます。
  3. 最新の Kubernetes コンポーネントを実行するノードが作成されます。
  4. 新しいノードの準備が整い、クラスターに参加すると、Kubernetes スケジューラによってそのノードでポッドの実行が開始されます。
  5. 古いノードが削除され、クラスター内の次のノードが切断およびドレイン プロセスを開始します。

注意

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

エイリアス マイナー バージョンでアップグレードする場合、上位のマイナー バージョンのみがサポートされます。 たとえば、1.20.x から 1.20 にアップグレードした場合、最新 GA 1.20 パッチにはアップグレードされませんが、1.21 にアップグレードした場合、最新 GA 1.21 パッチにアップグレードされます。

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

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

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.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"
}

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

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

  • サージ – サージ ノードを作成します。
  • ドレイン – ポッドがノードから削除されます。 各ポッドには、削除完了までの 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    ProvisioningState    Fqdn
------------  ----------  ---------------  -------------------  -------------------  ----------------------------------------------------------------
myAKSCluster  eastus      myResourceGroup  1.19.1               Succeeded            myaksclust-myresourcegroup-19da35-bd54a4be.hcp.eastus.azmk8s.io

クラスターを削除する

このチュートリアルはシリーズの最後の部分なので、AKS クラスターを削除することをお勧めします。 Kubernetes ノードは Azure 仮想マシン (VM) で実行され、クラスターを使用しない場合でも引き続き料金が発生するためです。 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 ソリューション ガイダンスを参照してください。