Windows Server ノードプールを使用したクラスタの作成


このページでは、Microsoft Windows Server を実行するノードプールを使用して、Google Kubernetes Engine(GKE)クラスタを作成する方法について説明します。このクラスタでは、Windows Server コンテナを使用できます。Microsoft Hyper-V コンテナは、現時点ではサポートされていません。Linux コンテナと同様に、Windows Server コンテナではプロセスと Namespace を分離できます。

Windows Server ノードには、一般的な Linux ノードよりも多くのリソースが必要です。Windows Server ノードには、Windows OS の実行とコンテナで実行できない Windows Server コンポーネントのために、追加のリソースが必要です。Windows Server ノードでは、Linux ノードよりも多くのリソースが必要になるため、割り当て可能なリソースが少なくなります。

Windows Server ノードプールを使用したクラスタの作成

このセクションでは、Windows Server コンテナを使用するクラスタを作成します。

このクラスタを作成するには、以下のタスクを実行する必要があります。

  1. gcloud を更新して構成する。
  2. ノードイメージを選択する。
  3. クラスタとノードプールを作成する。
  4. kubectl 認証情報を取得する。
  5. クラスタの初期化を待機する。

gcloud を更新して構成する

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. ゾーンクラスタの場合はデフォルトの Compute Engine ゾーン、リージョン クラスタまたは Autopilot クラスタの場合はデフォルトの Compute Engine リージョンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project PROJECT_ID
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone COMPUTE_ZONE
  • Autopilot クラスタまたはリージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region COMPUTE_REGION
  • gcloud を最新バージョンに更新します。
    gcloud components update
  • クラスタを作成するための適切な権限があることを確認します。少なくとも、Kubernetes Engine Cluster 管理者である必要があります。

Windows Server ノードイメージを選択する

GKE で実行するには、Windows Server バージョン 2019(LTSC)または Windows Server バージョン 1909(SAC)で Windows Server コンテナ イメージをビルドする必要があります。1 つのクラスタで、異なる Windows Server バージョンを使用する複数の Windows Server ノードプールを使用できますが、各ノードプールで使用できる Windows Server のバージョンは 1 つのみです。

イメージタイプを選択する際は、次の点を考慮してください。

  • オペレーティング システムのライフサイクルとサポート ポリシーに記載されているように、Windows Server ノードイメージのサポートのタイミングには、Microsoft が提供するサポートのタイミングが適用されます。サポート ライフサイクルがより長いため、LTSC の使用をおすすめします。LTSC リリースではまだ使用できない機能に依存している場合は、SAC を検討してください。

  • SAC のバージョンでは、最初のリリースから 18 か月間に限って Microsoft のサポートを受けられます。ノードプールのイメージタイプとして SAC を選択したものの、それよりも新しいバージョンの SAC を対象とする新しい GKE バージョンにノードプールをアップグレードしなければ、SAC バージョンのサポート ライフサイクルが終了した時点で、ノードプールに新しいノードを作成できなくなります。Google による Windows Server オペレーティング システムのサポートの詳細をご覧ください。

  • SAC は、ノードプールと、その中で定期的に実行されているコンテナをアップグレードできる場合にのみ選択してください。GKE は、新しい GKE リリースで Windows ノードプールに使用される SAC バージョンを定期的に更新します。そのため、ノードプールのイメージタイプに対して SAC を選択した場合、コンテナの再構築を頻繁に行う必要が生じます。

  • 通常、新しい Windows Server の機能は最初に SAC バージョンに導入されます。このため、新しい GKE Windows 機能が最初に SAC ノードプールに導入される可能性があります。

  • Stable リリース チャンネルに GKE クラスタを登録している場合は、SAC を選択しないでください。SAC のバージョンでは、18 か月間のみ Microsoft によるサポートを受けられます。そのため、GKE の安定バージョンがまだ利用可能な間に、SAC ノードプール イメージがサポートされなくなるリスクがあります。

使用する Windows Server のイメージタイプがわからない場合は、Windows Server LTSC を選択して、ノードプールをアップグレードする際のバージョンの非互換性の問題を回避することをおすすめします。詳細については、Microsoft のドキュメントの Windows Server サービス チャネル: LTSC と SAC をご覧ください。

バージョンの互換性

Windows Server CoreNano Server の両方をコンテナのベースイメージとして使用できます。

Windows Server コンテナには、バージョンの互換性に関する重要な要件があります。

  • LSC 用に構築された Windows Server コンテナは、SAC ノードでは動作せず、その逆も同様です。
  • 特定の LTSC バージョンまたは SAC バージョン用にビルドされた Windows Server コンテナは、他のバージョンを対象とするように再ビルドしないと、他の LTSC バージョンまたは SAC バージョンでは動作しません。

Windows Server コンテナ イメージを、複数の Windows Server バージョンを対象とするマルチ アーキテクチャ イメージとしてビルドすることで、バージョニングの複雑さに対処できます。

バージョン マッピング

Microsoft は約 6 か月ごとに新しい SAC バージョンをリリースし、2~3 年ごとに新しい LSC バージョンをリリースしています。こうした新しいバージョンは通常、新しい GKE マイナー バージョンで利用できます。GKE のマイナー バージョンでは、通常、LTSC バージョンと SAC バージョンは固定されたままとなります。

次の表は、GKE バージョンを Windows Server バージョンにマッピングする方法を示しています。

1.16

GKE バージョン SAC バージョン LTSC バージョン
1.16.8-gke.8~1.16.13-gke.401 10.0.18363.720(Windows Server バージョン 1909 Core) 10.0.17763.1098(Windows Server 2019 Core)
1.16.13-gke.402~1.16.13-gke.404 10.0.18363.1082(Windows Server バージョン 1909 Core) 10.0.17763.1457(Windows Server 2019 Core)
1.16.15-gke.500 10.0.18363.720(Windows Server バージョン 1909 Core) 10.0.17763.1098(Windows Server 2019 Core)
1.16.15-gke.1600~1.16.15-gke.3500 10.0.18363.1082(Windows Server バージョン 1909 Core) 10.0.17763.1457(Windows Server 2019 Core)
1.16.15-gke.4300~1.16.15-gke.7400 10.0.18363.1016(Windows Server バージョン 1909 Core) 10.0.17763.1397(Windows Server 2019 Core)
1.16.15-gke.7800~1.16.15-gke.11800(1.16.15-gke.7801 を除く) 10.0.18363.1198(Windows Server バージョン 1909 Core) 10.0.17763.1577(Windows Server 2019 Core)
1.16.15-gke.7801+(1.16.15-gke.10600 と 1.16.15-gke.11800 を除く) 10.0.18363.1379(Windows Server バージョン 1909 Core) 10.0.17763.1757(Windows Server 2019 Core)

1.17

GKE バージョン SAC バージョン LTSC バージョン
1.17.9-gke.1504~1.17.12-gke.500 10.0.18363.900(Windows Server バージョン 1909 Core) 10.0.17763.1282(Windows Server 2019 Core)
1.17.12-gke.1501 10.0.18363.1082(Windows Server バージョン 1909 Core) 10.0.17763.1457(Windows Server 2019 Core)
1.17.12-gke.1504~1.17.13-gke.600 10.0.18363.900(Windows Server バージョン 1909 Core) 10.0.17763.1282(Windows Server 2019 Core)
1.17.13-gke.1400~1.17.14-gke.1600 10.0.18363.1016(Windows Server バージョン 1909 Core) 10.0.17763.1397(Windows Server 2019 Core)
1.17.15-gke.300~1.17.17-gke.1500(1.17.17-gke.1101 を除く) 10.0.18363.1198(Windows Server バージョン 1909 Core) 10.0.17763.1577(Windows Server 2019 Core)
1.17.17-gke.1101+(1.17.17-gke.1500 を除く) 10.0.18363.1379(Windows Server バージョン 1909 Core) 10.0.17763.1757(Windows Server 2019 Core)

1.18

GKE バージョン SAC バージョン LTSC バージョン
1.18.6-gke.3503~1.18.9-gke.801 10.0.18363.900(Windows Server バージョン 1909 Core) 10.0.17763.1282(Windows Server 2019 Core)
1.18.9-gke.1501 10.0.18363.1082(Windows Server バージョン 1909 Core) 10.0.17763.1457(Windows Server 2019 Core)
1.18.9-gke.2501~1.18.10-gke.601 10.0.18363.900(Windows Server バージョン 1909 Core) 10.0.17763.1282(Windows Server 2019 Core)
1.18.10-gke.1500~1.18.12-gke.1700(1.18.12-gke.1201 を除く) 10.0.18363.1016(Windows Server バージョン 1909 Core) 10.0.17763.1397(Windows Server 2019 Core)
1.18.12-gke.1201 10.0.18363.1198(Windows Server バージョン 1909 Core) 10.0.17763.1577(Windows Server 2019 Core)
1.18.14-gke.1200~1.18.15-gke.1500(1.18.15-gke.1102 を除く) 10.0.18363.1198(Windows Server バージョン 1909 Core) 10.0.17763.1577(Windows Server 2019 Core)
1.18.15-gke.1102+(1.18.15-gke.1500 を除く) 10.0.18363.1379(Windows Server バージョン 1909 Core) 10.0.17763.1757(Windows Server 2019 Core)

1.19

GKE バージョン SAC バージョン LTSC バージョン
1.19.6-gke.600~1.19.7-gke.1500 10.0.18363.658(Windows Server バージョン 1909 Core) 10.0.17763.1577(Windows Server 2019 Core)
1.19.8-gke.1600+ 10.0.19042.804(Windows Server バージョン 20H2 Core) 10.0.17763.1757(Windows Server 2019 Core)

1.20

GKE バージョン SAC バージョン LTSC バージョン
1.20.2-gke.1500 10.0.18363.658(Windows Server バージョン 1909 Core) 10.0.17763.1757(Windows Server 2019 Core)
1.20.4-gke.500+ 10.0.19042.804(Windows Server バージョン 20H2 Core) 10.0.17763.1757(Windows Server 2019 Core)

クラスタとノードプールを作成する

Windows Server コンテナを実行するには、クラスタに少なくとも 1 つの Windows ノードプールと 1 つの Linux ノードプールが必要です。Windows Server ノードプールのみを使用するクラスタを作成することはできません。Linux ノードプールは、重要なクラスタ アドオンを実行するために必要です。

Linux ノードプールは重要であるため、サイズをゼロに変更せず、クラスタ アドオンを実行するための十分な容量を確保してください。

gcloud

次のフィールドを使用してクラスタを作成します。

gcloud container clusters create CLUSTER_NAME \
    --enable-ip-alias \
    --num-nodes=NUMBER_OF_NODES \
    --cluster-version=VERSION_NUMBER \
    --release-channel CHANNEL

次のように置き換えます。

  • CLUSTER_NAME: クラスタに付ける名前。
  • --enable-ip-alias により、エイリアス IP が有効になります。Windows Server ノードにはエイリアス IP が必要です。そのメリットについて詳しくは、エイリアス IP でのネイティブ コンテナ ルーティングについてをご覧ください。
  • NUMBER_OF_NODES: 作成する Linux ノードの数。クラスタ アドオンを実行するために十分なコンピューティング リソースを提供する必要があります。これは省略可能なフィールドで、省略した場合、デフォルト値の 3 が使用されます。
  • VERSION_NUMBER: 使用する特定のクラスタ バージョン。1.16.8-gke.9 以降である必要があります。--release-channel フラグを使用してリリース チャンネルを選択することもできます。
  • CHANNEL: クラスタを登録するリリース チャンネルrapidregularstableNone のいずれかです。--cluster-version--release-channel--no-enable-autoupgrade--no-enable-autorepair の各フラグが指定されていない場合、クラスタは、デフォルトで regular リリース チャネルに登録されます。

次のフィールドを使用して、Windows Server ノードプールを作成します。

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --image-type=IMAGE_NAME \
    --no-enable-autoupgrade \
    --machine-type=MACHINE_TYPE_NAME

次のように置き換えます。

  • NODE_POOL_NAME: Windows Server ノードプールに付ける名前。
  • CLUSTER_NAME: 上記で作成したクラスタの名前。
  • IMAGE_NAME: WINDOWS_LTSC または WINDOWS_SAC。これらのノードイメージの詳細については、Windows ノードイメージを選択するをご覧ください。
  • --no-enable-autoupgrade は、ノードの自動アップグレードを無効にします。有効にする前に、Windows Server ノードプールのアップグレードを確認してください。
  • MACHINE_TYPE_NAME: マシンタイプを定義します。Windows Server ノードには追加でリソースが必要になるため、n1-standard-2 が推奨される最小マシンタイプです。マシンタイプ f1-microg1-small はサポートされていません。マシンタイプごとに課金方法は異なります。詳細については、マシンタイプの価格表をご覧ください。

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [ 作成] をクリックします。

  3. [クラスタの基本] セクションで、次の操作を行います。

    1. [名前] に、クラスタの名前を入力します。
    2. [ロケーション タイプ] で、クラスタに使用するリージョンまたはゾーンを選択します。
    3. [コントロール プレーンのバージョン] で [リリース チャンネル] を選択するか、[静的バージョン] を指定します。静的バージョンは 1.16.8-gke.9 以降である必要があります。
  4. ナビゲーション パネルの [ノードプール] で [default-pool] をクリックし、Linux ノードプールを作成します。このノードプールの構成時に、クラスタ アドオンを実行するために十分なコンピューティング リソースを提供する必要があります。ノードとそのリソース(ファイアウォール ルートなど)に使用できるリソース割り当てが必要です。

  5. ページ上部の [ノードプールを追加] をクリックして、Windows Server ノードプールを作成します。

  6. [ノードプールの詳細] セクションで、次の操作を行います。

    1. [名前] に、ノードプールの名前を入力します。
    2. 静的バージョン ノードの場合は、[ノードのバージョン] を選択します。
    3. ノードプール内に作成するノードの数を入力します。
  7. ナビゲーション パネルで、[ノードプール] の下の [ノード] をクリックします。

    1. [イメージタイプ] プルダウン リストから、[Windows Semi-Annual Channel] または [Windows Long-Term Servicing Channel] を選択します。これらのノードイメージの詳細については、Windows ノードイメージを選択するをご覧ください。
    2. インスタンスに使用するデフォルトの [マシンの構成] を選択します。Windows Server ノードには追加でリソースが必要になるため、n1-standard-2 は推奨される最小サイズです。マシンタイプ f1-microg1-small はサポートされていません。マシンタイプごとに課金方法は異なります。詳細については、マシンタイプの価格表をご覧ください。
  8. ナビゲーション パネルで、Windows Server ノードプールの名前を選択します。[ノードプールの詳細] ページに戻ります。

    1. [自動化] で、[ノードの自動アップグレードを有効にする] チェックボックスをオフにします。自動アップグレードを有効にする前に Windows Server ノードプールのアップグレード セクションを確認してください。
  9. ナビゲーション パネルの [クラスタ] の下にある [ネットワーキング] をクリックします。

    1. [高度なネットワーキングのオプション] で、[VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] が選択されていることを確認します。Windows Server ノードにはエイリアス IP が必要です。そのメリットについて詳しくは、エイリアス IP でのネイティブ コンテナ ルーティングについてをご覧ください。
  10. [作成] をクリックします。

Terraform

Google Terraform プロバイダを使用して、Windows Server ノードプールがある GKE クラスタを作成できます。

このブロックを Terraform の構成に追加します。

resource "google_container_cluster" "cluster" {
  project  = "PROJECT_ID"
  name     = "CLUSTER_NAME"
  location = "LOCATION"

  min_master_version = "VERSION_NUMBER"

  # Enable Alias IPs to allow Windows Server networking.
  ip_allocation_policy {
    cluster_ipv4_cidr_block  = "/14"
    services_ipv4_cidr_block = "/20"
  }

  # Removes the implicit default node pool, recommended when using
  # google_container_node_pool.
  remove_default_node_pool = true
  initial_node_count       = 1
}

# Small Linux node pool to run some Linux-only Kubernetes Pods.
resource "google_container_node_pool" "linux_pool" {
  name     = "linux-pool"
  project  = google_container_cluster.cluster.project
  cluster  = google_container_cluster.cluster.name
  location = google_container_cluster.cluster.location

  node_config {
    image_type = "COS_CONTAINERD"
  }
}

# Node pool of Windows Server machines.
resource "google_container_node_pool" "windows_pool" {
  name     = "NODE_POOL_NAME"
  project  = google_container_cluster.cluster.project
  cluster  = google_container_cluster.cluster.name
  location = google_container_cluster.cluster.location

  node_config {
    image_type   = "IMAGE_NAME"
    machine_type = "MACHINE_TYPE_NAME"
  }

  # The Linux node pool must be created before the Windows Server node pool.
  depends_on = [google_container_node_pool.linux_pool]
}

次のように置き換えます。

  • PROJECT_ID: クラスタを作成するプロジェクト ID。
  • CLUSTER_NAME: GKE クラスタの名前。
  • LOCATION: クラスタを作成するロケーション(リージョンまたはゾーン)。
  • VERSION_NUMBER: 1.16.8-gke.9 以上にする必要があります。
  • NODE_POOL_NAME: Windows Server ノードプールに付ける名前。
  • IMAGE_NAME: WINDOWS_LTSC または WINDOWS_SAC。これらのノードイメージの詳細については、Windows ノードイメージを選択するをご覧ください。
  • MACHINE_TYPE_NAME: マシンタイプを定義します。Windows Server ノードには追加でリソースが必要になるため、n1-standard-2 が推奨される最小マシンタイプです。マシンタイプ f1-microg1-small はサポートされていません。マシンタイプごとに課金方法は異なります。詳細については、マシンタイプの価格表をご覧ください。

Windows Server ノードプールを作成した後、コントロール プレーン(マスター)が更新されるまでの数分間、クラスタが RECONCILE 状態になります。

kubectl 認証情報を取得する

作成したクラスタで kubectl が動作するようにするには、get-credentials コマンドを使用します。

gcloud container clusters get-credentials CLUSTER_NAME

get-credentials コマンドについて詳しくは、SDK get-credentials のドキュメントをご覧ください。

クラスタの初期化を待機する

クラスタを使用する前に、windows.config.common-webhooks.networking.gke.io が作成されるまで数秒間お待ちください。この Webhook は、kubernetes.io/os: windows ノードセレクタで作成された Pod にスケジュール許容範囲を追加して、Pod が Windows Server ノードで動作できるようにします。さらに Pod を検証し、Windows でサポートされている機能のみを使用することを確認します。

Webhook が作成されるようにするには、次のコマンドを実行します。

kubectl get mutatingwebhookconfigurations

出力には、Webhook の実行が次のように表示されます。

NAME                                              CREATED AT
windows.config.common-webhooks.networking.gke.io  2019-12-12T16:55:47Z

これでノードプールが 2 つある(Linux と Windows 用に 1 つずつ)クラスタが作成されたので、Windows アプリケーションをデプロイできます。

Windows Server ノードプールのアップグレード

Windows Server コンテナ バージョンの互換性の要件により、ノードプールをアップグレードする前に、新しい GKE バージョンの Windows Server バージョンに合わせてコンテナ イメージを再ビルドする必要がある可能性があります。

コンテナ イメージとノードの互換性を維持するために、バージョン マッピング表を確認し、Windows Server コンテナ イメージを、複数の Windows Server バージョンを対象とすることが可能なマルチ アーキテクチャ イメージとしてビルドします。その後、GKE ノードプールのアップグレードを手動で起動する前に、現在の GKE バージョンと次の GKE バージョンの両方で動作するマルチ アーキテクチャ イメージを対象としてコンテナ デプロイを更新できます。ノードのバージョンは、コントロール プレーン バージョンの 2 つ前のマイナー バージョン以降でなければならないため、ノードプールの手動アップグレードは定期的に実行する必要があります。

Windows Server SAC をノード イメージ タイプとして使用している場合は特に、最新の Windows Server バージョンを対象とするマルチ アーキテクチャ Windows Server コンテナ イメージを継続的にビルドする場合のみノードの自動アップグレードを有効にすることをおすすめします。ノードの自動アップグレードでは、Windows Server LTSC ノード イメージ タイプの場合は問題を引き起こす可能性が低くなりますが、バージョンの互換性の問題が発生するリスクがあります。

Windows Updates

Windows Server ノードでは Windows Update が無効になります。自動更新を行うと、予期しないタイミングでノードが再起動する可能性があります。GKE によってノードが再作成された場合、ノードの起動後にインストールされた Windows Updates が失われることになります。GKE では、新しい GKE リリースで使用される Windows Server ノードイメージを定期的に更新することで、Windows Updates を利用できるようにします。そのため、Microsoft が Windows Updates をリリースしてから GKE で利用可能になるまでに時間がかかることがあります。重要なセキュリティ アップデートがリリースされた場合、GKE はできる限り早く Windows Server ノードイメージを更新します。

ログの表示とクエリ

ロギングは、GKE クラスタで自動的に有効になります。Kubernetes Engine Monitoring を使用して、コンテナのログと Windows Server ノード上の他のサービスからのログを表示できます。

以下に、コンテナログを取得するフィルタの例を示します。

resource.type="k8s_container"
resource.labels.cluster_name="your_cluster_name"
resource.labels.namespace_name="your_namespace_id"
resource.labels.container_name="your_container_name"
resource.labels.Pod_name="your_Pod_name"

リモート デスクトップ プロトコル(RDP)を使用して Windows Server ノードにアクセスする

RDP を使用して、クラスタ内の Windows Server ノードに接続できます。接続方法については、Compute Engine ドキュメントの Windows インスタンスへの接続をご覧ください。

マルチアーキテクチャ イメージをビルドする

マルチアーキテクチャ イメージを手動でビルドすることも、Cloud Build ビルダーを使用することもできます。手順については、Windows マルチアーキテクチャ イメージのビルドをご覧ください。

gMSA の使用

次の手順は、Windows Server ノードプールでグループ マネージド サービス アカウント(gMSA)を使用する方法を示しています。

  1. AD ドメインに自動的に参加するようにクラスタ内の Windows Server ノードを構成します。手順については、AD ドメインに自動的に参加するように Windows Server ノードを構成するをご覧ください。

  2. ドメイン参加サービスによって自動的に作成されたセキュリティ グループへの gMSA アクセスを作成して付与します。この手順は、AD ドメインに対する管理者権限があるマシンで行う必要があります。

    $instanceGroupUri = gcloud container node-pools describe NODE_POOL_NAME --cluster CLUSTER_NAME --format="value(instanceGroupUrls)"
    $securityGroupName = ([System.Uri]$instanceGroupUri).Segments[-1]
    $securityGroup = dsquery group -name $securityGroupName
    $gmsaName = GMSA_NAME
    $dnsHostName = DNS_HOST_NAME
    
    New-ADServiceAccount -Name $gmsaName -DNSHostName $dnsHostName -PrincipalsAllowedToRetrieveManagedPassword $securityGroup
    
    Get-ADServiceAccount $gmsaName
    Test-ADServiceAccount $gmsaName
    

    次のように置き換えます。

    • NODE_POOL_NAME: Windows Server ノードプールの名前。自動生成されるセキュリティ グループの名前は、Windows Server ノードプールと同じです。
    • CLUSTER_NAME: クラスタの名前。
    • GMSA_NAME: 新しい gMSA に付ける名前。
    • DNS_HOST_NAME: 作成したサービス アカウントの完全修飾ドメイン名(FQDN)。たとえば、GMSA_NAMEwebapp01 でドメインが example.com の場合、DNS_HOST_NAMEwebapp01.example.com となります。
  3. Windows Pod とコンテナに GMSA を構成するのチュートリアルに従い、gMSA を構成します。

Windows Server ノードプールの削除

gcloud または Google Cloud Console を使用して、Windows Server ノードプールを削除します。

gcloud

gcloud container node-pools delete NODE_POOL_NAME \
    --cluster=CLUSTER_NAME

Console

Cloud Console を使用して Windows Server ノードプールを削除するには、次の手順を行います。

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. 編集するクラスタの横にある [アクション] をクリックし、 [編集] をクリックします。

  3. [ノード] タブを選択します。

  4. [ノードプール] セクションで、削除するノードプールの横にある [削除] をクリックします。

  5. 確認するメッセージが表示されたら、もう一度 [削除] をクリックします。

制限事項

Kubernetes 機能の中には、Windows Server コンテナでまだサポートされていないものがあります。また、Linux 固有のもので、Windows では動作しない機能もあります。サポートされている Kubernetes 機能とサポートされていない Kubernetes 機能の完全なリストについては、Kubernetes のドキュメントをご覧ください。

また、一部の GKE 機能はサポートされていません。

クラスタの場合、次の機能は Windows Server ノードプールではサポートされていません。

Windows Server ノードプールでは、次の機能はサポートされていません。

トラブルシューティング

Pod のデバッグService の一般的なガイダンスについては、Kubernetes のドキュメントをご覧ください。

Windows Pod が起動しない

Windows Server コンテナと、コンテナを実行しようとしている Windows ノードのバージョンが一致しない場合、Windows Pod が起動しないことがあります。

Windows ノードプールのバージョンが 1.16.8-gke.8 以上の場合は、2020 年 2 月の Windows Server コンテナの非互換性の問題に関する Microsoft のドキュメントをご覧になり、2020 年 3 月以降の Windows Update が含まれるベース Windows イメージを使用してコンテナ イメージを構築してください。以前のベース Windows イメージでビルドされたコンテナ イメージは、これらの Windows ノードで動作せず、ステータス NotReady でノードに不具合が生じる可能性もあります。

Image pull のエラー

Windows Server コンテナ イメージとそれを構成する個々のレイヤが非常に大きくなる場合があります。そうなると、コンテナレイヤをダウンロードして抽出するときに、Kubelet がタイムアウトして失敗するおそれがあります。

この問題は、Pod でエラー メッセージ「Failed to pull image」または「Image pull context cancelled」が表示されるか、Pod のステータスが ErrImagePull になった場合に発生します。

Windows Server コンテナを正常に pull するには、次のオプションを試してください。

  • Windows Server コンテナ イメージのアプリケーション レイヤを小さなレイヤに分割して、各レイヤをすばやく pull し、抽出できるようにします。これにより、Docker のレイヤ キャッシングがより効果的になり、image pull の再試行が成功する確率が高くなります。レイヤについて詳しくは、Docker の記事 About images, containers, and storage drivers をご覧ください。

  • Pod を作成する前に、Windows Server ノードに接続し、コンテナ イメージで docker pull コマンドを手動で使用します。

  • コンテナ イメージを pull するためのタイムアウトが長くなるように kubelet サービスの image-pull-progress-deadline フラグを設定します。

    フラグを設定するには、Windows ノードに接続して、次の PowerShell コマンドを実行します。

    1. Windows レジストリから Kubelet サービスの既存のコマンドラインを取得します。

      PS C:\> $regkey = "HKLM\SYSTEM\CurrentControlSet\Services\kubelet"
      
      PS C:\> $name = "ImagePath"
      
      PS C:\> $(reg query ${regkey} /v ${name} | Out-String) -match `
      "${name}.*(C:.*kubelet\.exe.*)\r"
      
      PS C:\> $kubelet_cmd = $Matches[1]
      
    2. Kubelet サービスの新しいコマンドラインを設定し、タイムアウトを長くするためのフラグを追加します。

      PS C:\> reg add ${regkey} /f /v ${name} /t REG_EXPAND_SZ /d "${kubelet_cmd} `
      --image-pull-progress-deadline=15m
      
    3. この変更が正常に完了したことを確認します。

      PS C:\> reg query ${regkey} /v ${name}
      
    4. kubelet サービスを再起動して、この新しいフラグを有効にします。

      PS C:\> Restart-Service kubelet
      
    5. kubelet サービスが正常に再起動したことを確認します。

      PS C:\> Get-Service kubelet # ensure state is Running
      

ノードプールの作成中のタイムアウト

多数のノード(たとえば、500 個)を作成し、Windows Server イメージを使用するクラスタ内の最初のノードプールである場合、ノードプールの作成がタイムアウトになります。

この問題を解決するには、作成するノードの数を減らします。ノードの数は後で増やすことが可能です。

エラー「PLEG is not healthy」が発生し、Windows ノードが NotReady になる

これは Kubernetes の既知の問題であり、1 つの Windows ノードで複数の Pod が急速に起動した場合に発生します。この状況から回復するには、Windows Server ノードを再起動します。この問題を回避するために、Windows Pod の作成頻度を 30 秒につきに 1 つに制限することをおすすめします。

一貫性のない TerminationGracePeriod

コンテナの Windows システム タイムアウトが、構成した猶予期間とは異なる場合があります。この違いにより、ランタイムに渡された猶予期間が終了する前に、コンテナが強制終了する場合があります。

Windows タイムアウトを変更するには、イメージのビルド時にコンテナ ローカルのレジストリキーを編集します。Windows タイムアウトを変更した場合は、それに合わせて TerminationGracePeriodSeconds を調整する必要があります

ネットワーク接続の問題

Windows Server コンテナでネットワーク接続の問題が発生する場合は、Windows Server コンテナ ネットワーキングがネットワーク MTU 1500 を前提としている可能性があります。この MTU は、Google Cloud の MTU 1460 と互換性がありません。

コンテナ内のネットワーク インターフェースと Windows Server ノード自体のネットワーク インターフェースのいずれの MTU も 1460 以下であることを確認してください。MTU の設定方法については、Windows コンテナの既知の問題をご覧ください。

次のステップ