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 ノード プールを追加する
- 既存のクラスターに Windows Server 2022 ノード プールを追加します。
YAML ファイルを更新する
ノード セレクターは、Windows ノードに Windows ポッドを配置するための最も一般的で推奨されるオプションです。
次の注釈を追加して、YAML ファイルにノード セレクターを追加します。
nodeSelector: "kubernetes.io/os": windows
この注釈は、使用可能なすべての Windows ノードを検索し、そのノードにポッドを配置します (他のすべてのスケジュール ルールに従います)。 Windows Server 2019 から Windows Server 2022 にアップグレードする場合は、Windows ノードおよび最新の OS バージョンを実行しているノードで配置を適用する必要があります。 これを実現する 1 つのオプションとして、別の注釈を使用できます。
nodeSelector: "kubernetes.azure.com/os-sku": Windows2022
YAML ファイルの
nodeSelector
を更新したら、使用するコンテナー イメージも更新する必要があります。 この情報は、Dockerfile のFROM
ステートメントを変更することで、コンテナー化されたアプリケーションの新しいバージョンを作成した前の手順から取得できます。
Note
アプリケーションの最初のデプロイに使用したのと同じ YAML ファイルを使用する必要があります。 これにより、nodeSelector
とコンテナー イメージ以外の構成は変更されません。
既存のワークロードに更新された YAML ファイルを適用する
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
kubectl apply
コマンドを使用して、更新された YAML ファイルの名前を指定することで、YAML ファイルを既存のワークロードに適用します。kubectl apply -f <filename>
次の出力例は、デプロイの "構成済み" の状態を示しています。
deployment.apps/sample configured service/sample unchanged
この時点で、AKS は、既存のポッドを終了して Windows Server 2022 ノードに新しいポッドをデプロイするプロセスを開始します。
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 コンテナー アプリケーションのデプロイに関する記事を参照してください。
Azure Kubernetes Service