Azure Kubernetes Service (AKS) Windows ワークロードの OS バージョンをアップグレードする

Azure Kubernetes Service (AKS) で実行中の Windows ワークロードの OS バージョンをアップグレードするときは、Windows のバージョンが各ノード プールで確実に一致するように、新しいノード プールをデプロイする必要があります。 この記事では、AKS 上の Windows ワークロードの OS バージョンをアップグレードする手順について説明します。 この例では、Windows Server 2019 から Windows Server 2022 へのアップグレードに重点を置いていますが、同じプロセスに従って任意の Windows Server バージョンから別のバージョンにアップグレードできます。

Windows Server OS バージョンのサポート

Windows Server オペレーティング システムの新しいバージョンがリリースされると、AKS はそれをサポートし、修正、機能強化、新機能を利用するために最新バージョンにアップグレードすることをお勧めします。 AKS では、Windows Server 2022 以降、すべての Windows Server バージョンに対して 5 年間のサポート ライフサイクルを提供します。 この期間中、AKS はアップグレード対象の新しいバージョンの Windows Server OS をサポートする新しいバージョンをリリースします。

Note

  • Windows Server 2019 は、Kubernetes バージョン 1.32 がサポート終了 (EOL) に達した後に廃止されました。 詳細については、「AKS リリース ノート」を参照してください。
  • Windows Server 2022 は、Kubernetes バージョン 1.34 がサポート終了 (EOL) に達した後に廃止されました。 詳細については、「AKS リリース ノート」を参照してください。

制限事項

Windows Server 2019 と Windows Server 2022 は、AKS 上の同じノード プールに共存できません。 新しい OS バージョンをホストするには、新しいノード プールを作成する必要があります。 前のノード プールのアクセス許可とアクセス権を新しいものに一致させることが重要です。

開始する前に

  • Dockerfile の FROM ステートメントを新しい OS バージョンに更新します。
  • アプリケーションを確認し、コンテナー アプリが新しい OS バージョンで動作することを確認します。
  • AKS 上の検証済みコンテナー アプリを開発またはテスト環境にデプロイします。
  • この記事で使用する新しいイメージ名またはタグをメモしておきます。

Note

Docker for Windows ワークロードを構築する方法については、「Windows 上の Dockerfile」と「Windows Dockerfile を最適化する」を参照してください。

既存のクラスターに Windows Server 2022 ノード プールを追加する

YAML ファイルを更新する

ノード セレクターは、Windows ノードに Windows ポッドを配置するための最も一般的で推奨されるオプションです。

  1. 次の注釈を追加して、YAML ファイルにノード セレクターを追加します。

          nodeSelector:
            "kubernetes.io/os": windows
    

    この注釈は、使用可能なすべての Windows ノードを検索し、そのノードにポッドを配置します (他のすべてのスケジュール ルールに従います)。 Windows Server 2019 から Windows Server 2022 にアップグレードする場合は、Windows ノードおよび最新の OS バージョンを実行しているノードで配置を適用する必要があります。 これを実現する 1 つのオプションとして、別の注釈を使用できます。

          nodeSelector:
            "kubernetes.azure.com/os-sku": Windows2022
    
  2. YAML ファイルの nodeSelector を更新したら、使用するコンテナー イメージも更新する必要があります。 この情報は、Dockerfile の FROM ステートメントを変更することで、コンテナー化されたアプリケーションの新しいバージョンを作成した前の手順から取得できます。

Note

アプリケーションの最初のデプロイに使用したのと同じ YAML ファイルを使用する必要があります。 これにより、nodeSelector とコンテナー イメージ以外の構成は変更されません。

既存のワークロードに更新された YAML ファイルを適用する

  1. kubectl get nodes コマンドを使用して、クラスター上のノードを表示します。

    kubectl get nodes -o wide
    

    次の出力例は、作成した新しいノード プールと既存のノード プールを含む、クラスター上のすべてのノードを示しています。

    NAME                                STATUS   ROLES   AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION     CONTAINER-RUNTIME
    aks-agentpool-18877473-vmss000000   Ready    agent   5h40m   v1.23.8   10.240.0.4     <none>        Ubuntu 18.04.6 LTS               5.4.0-1085-azure   containerd://1.5.11+azure-2
    akspoolws000000                     Ready    agent   3h15m   v1.23.8   10.240.0.208   <none>        Windows Server 2022 Datacenter   10.0.20348.825     containerd://1.6.6+azure
    akspoolws000001                     Ready    agent   3h17m   v1.23.8   10.240.0.239   <none>        Windows Server 2022 Datacenter   10.0.20348.825     containerd://1.6.6+azure
    akspoolws000002                     Ready    agent   3h17m   v1.23.8   10.240.1.14    <none>        Windows Server 2022 Datacenter   10.0.20348.825     containerd://1.6.6+azure
    akswspool000000                     Ready    agent   5h37m   v1.23.8   10.240.0.115   <none>        Windows Server 2019 Datacenter   10.0.17763.3165    containerd://1.6.6+azure
    akswspool000001                     Ready    agent   5h37m   v1.23.8   10.240.0.146   <none>        Windows Server 2019 Datacenter   10.0.17763.3165    containerd://1.6.6+azure
    akswspool000002                     Ready    agent   5h37m   v1.23.8   10.240.0.177   <none>        Windows Server 2019 Datacenter   10.0.17763.3165    containerd://1.6.6+azure
    
  2. kubectl apply コマンドを使用して、更新された YAML ファイルの名前を指定することで、YAML ファイルを既存のワークロードに適用します。

    kubectl apply -f <filename>
    

    次の出力例は、デプロイの "構成済み" の状態を示しています。

    deployment.apps/sample configured
    service/sample unchanged
    

    この時点で、AKS は、既存のポッドを終了して Windows Server 2022 ノードに新しいポッドをデプロイするプロセスを開始します。

  3. kubectl get pods コマンドを使用して、デプロイの状態を確認します。

    kubectl get pods -o wide
    

    次の出力例では、default 名前空間内のポッドを示しています。

    NAME                      READY   STATUS    RESTARTS   AGE     IP             NODE              NOMINATED NODE   READINESS GATES
    sample-7794bfcc4c-k62cq   1/1     Running   0          2m49s   10.240.0.238   akspoolws000000   <none>           <none>
    sample-7794bfcc4c-rswq9   1/1     Running   0          2m49s   10.240.1.10    akspoolws000001   <none>           <none>
    sample-7794bfcc4c-sh78c   1/1     Running   0          2m49s   10.240.0.228   akspoolws000000   <none>           <none>
    

セキュリティと認証に関する考慮事項

グループ管理サービス アカウント (gMSA) を使用している場合は、新しいノード プール用にマネージド ID 構成を更新する必要があります。 gMSA はシークレット (ユーザー アカウントとパスワード) を使用して、Windows ポッドを実行するノードが Microsoft Entra ID に対してコンテナーを認証できるようにします。 Azure Key Vault でそのシークレットにアクセスするために、ノードはマネージド ID を使用して、ノードがリソースにアクセスできるようにします。 マネージド ID はノード プールごとに構成されますが、ポッドが新しいノード プールに存在するようになっているため、その構成を更新する必要があります。 詳細については、「Azure Kubernetes Service (AKS) クラスター上の Windows Server ノードでグループ管理サービス アカウント (GMSA) を有効にする」を参照してください。

他の Azure リソースにアクセスするときに、他のポッドまたはノード プールのマネージド ID にも同じ原則が適用されます。 マネージド ID によって提供されるすべてのアクセスを更新して、新しいノード プールを反映する必要があります。 更新およびサインイン アクティビティを表示するには、マネージド ID のアクティビティを表示する方法に関する記事を参照してください。

次のステップ

この記事では、AKS 上の Windows ワークロードの OS バージョンをアップグレードする方法について説明しました。 AKS 上の Windows ワークロードの詳細については、Azure Kubernetes Service (AKS) での Windows コンテナー アプリケーションのデプロイに関する記事を参照してください。