AKS の Windows Server ノード プールに関してよく寄せられる質問

Azure Kubernetes Service (AKS) では、Windows Server をゲスト OS としてノード上で実行するノード プールを作成することができます。 これらのノードは、.NET Framework 上に構築されたものなど、ネイティブの Windows コンテナー アプリケーションを実行できます。 Linux と Windows OS では、コンテナーのサポート方法に違いがあります。 Windows ノード プールでは、一般的な Linux Kubernetes およびポッド関連の機能の一部は現在使用できません。

この記事では、AKS 内の Windows Server ノードのよく寄せられる質問および OS の概念について説明します。

Windows ではどのような種類のディスクがサポートされていますか?

Azure Disk と Azure Files はサポートされているボリュームの種類であり、Windows Server コンテナー内で NTFS ボリュームとしてアクセスされます。

Linux と Windows では第 2 世代仮想マシン (VM) がサポートされますか?

第 2 世代 VM は、Linux と Windows の WS2022 でのみサポートされています。 詳細については、「Azure での第 2 世代 VM のサポート」を参照してください。

Windows ノードに修正プログラムを適用するにはどうすればいいですか?

Windows ノードの最新の修正プログラムを入手するには、ノード プールをアップグレードするか、ノード イメージをアップグレードします。 AKS のノードでは Windows Update は有効になっていません。 AKS では、修正プログラムが利用可能になるとすぐに新しいノード プール イメージがリリースされます。更新プログラムや修正プログラムを最新の状態に維持するために、ノード プールをアップグレードするのは、お客様の責任です。 このパッチ プロセスは、使用されている Kubernetes のバージョンにも当てはまります。 新しいバージョンが利用可能になると、AKS のリリース ノートに掲載されます。 Windows Server ノード プールのアップグレードの詳細については、AKS でのノード プールのアップグレードに関するページを参照してください。 ノード イメージの更新にのみ関心がある場合は、AKS ノード イメージのアップグレードに関する記事を参照してください。

Note

更新された Windows Server イメージは、ノード プールをアップグレードする前にクラスターのアップグレード (コントロール プレーンのアップグレード) が実行された場合にのみ使用されます。

クライアント ソース IP の保持はサポートされていますか?

現時点で、クライアント ソース IP の保持は Windows ノードではサポートされていません。

ノードあたりのポッドの最大数を変更できますか?

はい。 変更に伴う影響と使用可能なオプションについては、ポッドの最大数に関するページを参照してください。

Windows OS の既定の TCP タイムアウトは何ですか?

Windows OS の既定の TCP タイムアウトは 4 分です。 この値は構成できません。 アプリケーションでタイムアウト時間が長くなる場合、同じノード内の異なるコンテナー間の TCP 接続は 4 分後に終了します。

新しい Windows エージェント プールを作成しようとしたときにエラーが表示されるのはなぜですか。

2020 年 2 月より前にクラスターを作成し、クラスターのアップグレード操作を行っていない場合、クラスターは引き続き古い Windows イメージを使用します。 次のようなエラーが表示されている可能性があります。

"デプロイ テンプレートから参照されている次のイメージの一覧が見つかりません:発行元: MicrosoftWindowsServer、オファー:WindowsServer、Sku:2019-datacenter-core-smalldisk-2004、バージョン: 最新。 使用可能なイメージを検索する方法については、「Azure PowerShell を使用して Azure Marketplace VM イメージを検索して使用する」を参照してください。

このエラーを修復するには:

  1. クラスター コントロール プレーンをアップグレードして、イメージ オファーと発行元を更新します。
  2. 新しい Windows エージェント プールを作成します。
  3. Windows ポッドを既存の Windows エージェント プールから新しい Windows エージェント プールに移動します。
  4. 古い Windows エージェント プールを削除します。

Windows ポッドをデプロイするとしたときにエラーが表示されるのはなぜですか?

--max-pods で作成するポッドの数より小さい値を指定すると、No available addresses エラーが表示されることがあります。

このエラーを修正するには、十分な --max-pods 値の az aks nodepool add コマンドを使用します:

az aks nodepool add \
    --cluster-name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --name $NODEPOOL_NAME \
    --max-pods 3

詳細については、--max-podsドキュメント を参照してください。

VM ノードに "sshd" という名前の予期しないユーザーが存在するのはなぜですか?

AKS は、OpenSSH サービスのインストール時に "sshd" という名前のユーザーを追加します。 このユーザーは悪質ではありません。 この予期しないユーザー アカウントを無視するようにアラートを更新することをお勧めします。

Windows ノード プールのサービス プリンシパルはどのようにローテーションするのですか?

Windows ノード プールは、サービス プリンシパルのローテーションをサポートしていません。 サービス プリンシパルを更新するには、新しい Windows ノード プールを作成し、ポッドを古いプールから新しいものに移行します。 ポッドを新しいプールに移行した後、古いノード プールを削除します。

サービス プリンシパルの代わりにマネージド ID を使用します。これは基本的に、サービス プリンシパルをラップするラッパーです。 詳細については、「Azure Kubernetes Service でマネージド ID を使用する」を参照してください。

クラスター上の Windows Server ノードの管理者パスワードはどのように変更しますか?

AKS クラスターを作成するとき、--windows-admin-password--windows-admin-username の各パラメーターを指定して、クラスター上の Windows Server ノードの管理者資格情報を設定します。 Azure portal を使用してクラスターを作成するときや、Azure CLI を使用して --vm-set-type VirtualMachineScaleSets--network-plugin azure を設定するときなどに、管理者の資格情報を指定しなかった場合、ユーザー名は既定の azureuser になり、パスワードはランダムに生成されます。

管理者パスワードを変更するには、az aks update コマンドを使用します。

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --windows-admin-password $NEW_PW

重要

az aks update 操作を実行すると、Windows Server ノード プールのみがアップグレードされ、再起動が行われます。 Linux ノード プールは影響を受けません。

--windows-admin-password を変更する場合、新しいパスワードは 14 文字以上かつ Windows Server のパスワード要件を満たしている必要があります。

ノード プールはいくつ作成できますか?

Windows ノード プールを含む AKS クラスターには、AKS サービスに指定された既定値と異なる AKS リソース制限はありません。 詳しくは、「Azure Kubernetes Service (AKS) のクォータ、仮想マシンのサイズの制限、およびリージョンの可用性」を参照してください。

Windows ノード プールにはどのような名前を指定できますか?

Windows ノード プールには 6 文字の名前を付けることができます。

Windows ノードではすべての機能がサポートされていますか?

Kubernet は現在、Windows ノードではサポートされていません。

Windows ノードでイングレス コントローラーを実行できますか?

はい。Windows Server コンテナーがサポートされているイングレス コントローラーは、AKS の Windows ノードで実行できます。

Windows Server コンテナーで gMSA を使用できますか?

グループ管理サービス アカウント (gMSA) のサポートは、AKS 上の Windows で一般提供されています。 「Azure Kubernetes Service (AKS) クラスター上の Windows Server ノードでグループ管理サービス アカウント (GMSA) を有効にする」を参照してください

Windows ノードとコンテナーを含むコンテナーには Azure Monitor を使用できますか?

はい、できます。 ただし、Windows コンテナーからログ (stdout、stderr) とメトリックを収集するための Azure Monitor はパブリック プレビュー段階です。 また、Windows コンテナーから stdout ログのライブ ストリームにアタッチできます。

Windows ノードを含むクラスター上のサービス数に制限はありますか?

Windows ノードを含むクラスターでは、ポート不足が発生するまで、約 500 個 (より少ない場合もあります) のサービスを設定できます。 この制限は、外部トラフィック ポリシーが "クラスター" に設定された Kubernetes サービスに適用されます。

サービスの外部トラフィック ポリシーがクラスターとして構成されている場合、トラフィックはノードで追加のソース NAT を受け取ります。これにより、TCPIP 動的ポート プールからのポートも予約されます。 このポート プールは限られたリソース (既定では最大 16,000 個のポート) であり、サービスへのアクティブな接続が多数あると、動的ポート プールが使い果たされ、接続が切断される可能性があります。

Kubernetes Service が外部トラフィック ポリシーを "ローカル" に設定して構成されている場合、ポートの枯渇の問題は 500 サービスで発生する可能性は高くありません。

Windows ノードで Azure ハイブリッド特典を使用できますか?

正解です。 Windows Server 向け Azure ハイブリッド特典では、オンプレミスの Windows Server ライセンスを AKS Windows ノードに持ち込めるため、運用コストを削減できます。

Azure ハイブリッド特典は、AKS クラスター全体または個々のノードで使用できます。 個々のノードの場合は、ノード リソース グループを参照し、ノードに Azure ハイブリッド特典を直接適用する必要があります。 個々のノードに Azure ハイブリッド特典を適用する方法の詳細については、「Windows Server 向け Azure Hybrid Benefit」を参照してください。

新しい AKS クラスターで Azure ハイブリッド特典を使用するには、az aks create コマンドを実行し、--enable-ahub 引数を使用します。

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --load-balancer-sku Standard \
    --windows-admin-password 'Password1234$' \
    --windows-admin-username azure \
    --network-plugin azure
    --enable-ahub

既存の AKS クラスターで Azure ハイブリッド特典を使用するには、az aks update コマンドを実行し、--enable-ahub 引数を使用してクラスターを更新します。

az aks update \
    --resource-group myResourceGroup
    --name myAKSCluster
    --enable-ahub

Azure ハイブリッド特典がクラスターの Windows ノード上に設定されているか確認するには、--name 引数と --resource-group 引数を指定して az vmss show コマンドを実行し、仮想マシン スケール セットにクエリを実行します。 Windows ノード プールのスケール セットが作成されているリソース グループを識別するには、az vmss list -o table コマンドを実行します。

az vmss show --name myScaleSet --resource-group MC_<resourceGroup>_<clusterName>_<region>

スケール セット内の Windows ノードで Azure ハイブリッド特典が有効になっている場合、az vmss show の出力は次のようになります。

""hardwareProfile": null,
    "licenseType": "Windows_Server",
    "networkProfile": {
      "healthProbe": null,
      "networkApiVersion": null,

実行中のコンテナーのタイム ゾーンの変更方法を教えてください

実行中の Windows Server コンテナーのタイム ゾーンを変更するには、PowerShell セッションを使用して実行中のコンテナーに接続します。 次に例を示します。

kubectl exec -it CONTAINER-NAME -- powershell

実行中のコンテナーで、Set-TimeZone を使用して、実行中のコンテナーのタイム ゾーンを設定します。 次に例を示します。

Set-TimeZone -Id "Russian Standard Time"

実行中のコンテナーの現在のタイム ゾーンまたは使用可能なタイム ゾーンの一覧を表示するには、Get-TimeZone を使用します。

Windows コンテナーを使用してクライアント接続からポッドへのセッション アフィニティを管理できますか?

Windows Server 2022 OS バージョンでは、Windows コンテナーを使用してクライアント接続からポッドへのセッション アフィニティを管理することがサポートされますが、現時点でクライアント IP によってセッション アフィニティを実現するには、ノードあたり 1 つのインスタンスを実行するように必要なポッドを制限し、ローカル ノードのポッドにトラフィックを転送するように Kubernetes サービスを構成します。

次の構成を使用します。

  1. 1.20 以上のバージョンを実行している AKS クラスターを使用します。
  2. Windows ノードあたり 1 つのインスタンスのみを許可するようにポッドを制限します。 これは、デプロイ構成でアンチアフィニティを使用して実現できます。
  3. Kubernetes サービス構成で、externalTrafficPolicy=Local を設定します。 これにより、Kubernetes サービスでローカル ノード内のポッドにのみトラフィックが送信されます。
  4. Kubernetes サービス構成で、sessionAffinity: ClientIP を設定します。 これにより、Azure Load Balancer がセッション アフィニティを使用して構成されます。

次のステップ

AKS で Windows Server コンテナーの使用を開始するには、AKS で Windows Server を実行するノード プールを作成することに関する記事を参照してください。