Windows Server 半期チャネルのサービス終了


このページでは、Google Kubernetes Engine(GKE)Standard クラスタにおける Windows Server 半期チャネル(SAC)ノードイメージ タイプのサービス終了に関する情報を提供します。サポートされているノードイメージへの移行手順については、サポート対象の Windows イメージに移行するをご覧ください。

Windows Server SAC の廃止について

Microsoft は、2022 年 8 月 9 日に Windows Server Semi-Annual Channel を廃止します。これは、Windows Server バージョン 20H2 のサービス終了のタイミングと一致します。Windows Server では、長期サービス チャネル(LTSC)がプライマリ リリース チャンネルとして使用されます。この変更により、Microsoft は Windows Server SAC イメージのセキュリティ更新プログラムなどの重要な更新をリリースしなくなります。その結果、GKE ではこれらのイメージのサポートを提供できなくなります。

GKE Standard では、Windows Server SAC イメージタイプを使用する新しいノードプールを作成できなくなりました。既存のノードプールで次のいずれかのイメージタイプを使用している場合、GKE バージョンをアップグレードするには、サポート対象のイメージタイプに移行する必要があります。

  • windows_sac: Docker を含む Windows Server SAC
  • windows_sac_containerd: containerd を含む Windows Server SAC

既存の Windows Server SAC ノードプールは、2022 年 8 月 9 日以降も期待どおりに機能します。ただし、今後は SAC の更新がないため、これらのノードがセキュリティの脆弱性やプラットフォームの不安定性にさらされるリスクがあります。

タイムラインとマイルストーン

2022 年 8 月 9 日以降は、以下のことができなくなります。

  • Windows Server SAC ノードイメージを使用する新しいクラスタを作成する。
  • Windows Server SAC ノードイメージを使用する新しいノードプールを作成する。
  • --autoprovisioning-image-type フラグを windows_sac または windows_sac_containerd に設定して、ノードの自動プロビジョニングを有効する。
  • 既存の Windows Server SAC ノードの GKE バージョンをアップグレードする。

どうすればよいですか。

Windows Server SAC ノードプールは、windows_ltsc_containerd ノードイメージ タイプに移行することをおすすめします。GKE バージョン 1.23 以降では、これが、新しいクラスタとノードプールでサポートされる唯一の Windows Server イメージタイプです。

コンテナ ランタイムとして Docker を使用する windows_ltsc イメージタイプは、Docker ノードイメージの非推奨により、GKE バージョン 1.23 以降ではサポートされていません。

現在お使いの GKE バージョンに応じて、次のことを行ってください。

  • GKE バージョン 1.20 以前: ノードプールを windows_ltsc イメージに移行します。
  • GKE バージョン 1.21 以降: ノードプールを windows_ltsc_containerd イメージに移行します。

移行による影響

現在、Docker をコンテナ ランタイムとする windows_sac イメージを使用している場合は、windows_ltsc_containerd イメージタイプに移行すると、Docker コマンドに依存する既存のツールに影響を与える可能性があります。containerd を使用するイメージタイプに移行した場合の影響については、Docker ノードイメージの非推奨についてに記載されている状況の一覧をご覧ください。

Windows Server LTSC に移行する

この移行プロセスは以下の手順で構成されます。

  1. アーキテクチャ更新用のコンテナ イメージを特定する
  2. マルチアーキテクチャの Windows コンテナ イメージをビルドする
  3. 既存のノードプールを Windows Server LTSC に更新する

アーキテクチャ更新用のコンテナ イメージを特定する

Windows Server SAC で実行されるシングルアーキテクチャのコンテナ イメージは、Windows Server LTSC イメージと互換性がありません。互換性のないコンテナ イメージを特定し、そのアーキテクチャを更新する準備を行う必要があります。マルチアーキテクチャ イメージがある場合は、マルチアーキテクチャ イメージを検査して Windows Server 2019 LTSC のバリエーション(バージョン番号 10.0.17763.X)をサポートしていることを確認する必要があります。

シングルアーキテクチャ イメージ

サポートされている Windows バージョンを調べるには、Pod が実行されている Windows Server SAC ノードの中から次のコマンドを実行します。

docker image inspect IMAGE_NAME

IMAGE_NAME は、コンテナ イメージの名前に置き換えます。

イメージが Windows Server SAC のバリエーションをサポートしている場合、出力は次のようになります。

[
  {
    ...
    "Architecture": "amd64",
    "Os": "windows",
    "OsVersion": "10.0.19042.1645" // 1645 can be any build number
  }
]

イメージが Windows Server LTSC のバリエーションをサポートしている場合、出力は次のようになります。

[
  {
    ...
    "Architecture": "amd64",
    "Os": "windows",
    "OsVersion": "10.0.17763.2686" // 2686 can be any build number
  }
]

マルチアーキテクチャ イメージ

すでにマルチアーキテクチャの Windows コンテナ イメージを使用している場合は、そのイメージを検査してバージョン番号が 10.0.17763.X の Windows Server 2019 LTSC のバリエーションがサポートされていることを確認します。

docker manifest inspect MANIFEST_NAME

MANIFEST_NAME は、Docker マニフェストの名前(eu.gcr.io/gke-release-staging/internet-explorer:v2 など)に置き換えます。

出力は次のようになります。

{
  {
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    "size": 1575,
    "digest": "...",
    "platform": {
        "architecture": "amd64",
        "os": "windows",
        "os.version": "10.0.17763.1935"

  }
}

マルチアーキテクチャの Windows コンテナ イメージをビルドする

Windows Server 2019 LTSC のバリエーションをサポートするために更新する必要があるイメージを特定したら、マルチ アーキテクチャの Windows Server イメージをビルドすることをおすすめします。

マルチ アーキテクチャ イメージをビルドすると、GKE で提供されるどの Windows バージョンでもコンテナが動作するようになります。containerd が移行されたノードプールの Windows Server LTSC バージョンを検出してマニフェストから適切なイメージを選択するため、マルチアーキテクチャ イメージを使用することで移行が容易になります。

こうしたイメージは、手動でビルドすることも、Cloud Build の gke-windows-builder を使用してビルドことも可能です。定期的に更新され、新しい Windows Server LTSC イメージが利用可能になるとそれがすぐにサポートされる、Cloud Build のビルダーをおすすめします。マルチアーキテクチャ イメージの手動または Cloud Build による手順については、Windows Server マルチ アーキテクチャ イメージのビルドをご覧ください。

ノードを Windows Server LTSC にアップグレードする

Windows Server LTSC のバリエーションをサポートするようにコンテナ イメージを更新したら、ノードプールを Windows Server LTSC ノードイメージに移行します。ステージング クラスタまたはテストクラスタで移行のテストを行い、デプロイが意図したとおりに機能することを確認した後、本番環境をアップグレードすることを強くおすすめします。イメージを更新するには、次のいずれかを行います。

  • 新しいノードプールを作成し、ワークロードを新しいノードに移行する
  • 既存のノードプールでイメージタイプをアップグレードする

新しいノードプールを作成する

  1. 新しいノードプールを作成します。

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --image-type=WINDOWS_LTSC_IMAGE
    

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

    • NODE_POOL_NAME: 新しいノードプールの名前。
    • CLUSTER_NAME: GKE クラスタの名前。
    • WINDOWS_LTSC_IMAGE: 使用する Windows Server LTSC イメージ(windows_ltsc_containerd または windows_ltsc)。
  2. 次の nodeSelector をワークロードのマニフェストに追加します。

    spec:
      ...
      nodeSelector:
        kubernetes.io/os: windows
        cloud.google.com/gke-os-distribution: windows_ltsc
    

    windows_sac をラベル値としてこの nodeSelector を使用し、新しいノードで特定の Pod をスケジュールしないように GKE に指示することもできます。

  3. 更新したマニフェストをデプロイします。

    kubectl apply -f MANIFEST_NAME
    
  4. 古いノードプールをゼロにスケールします。

    gcloud container node-pools update OLD_POOL \
        --cluster=CLUSTER_NAME \
        --min-nodes=0 \
        --max-nodes=NODE_COUNT
    

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

    • OLD_POOL: 既存の Windows Server SAC ノードプールの名前。
    • NODE_COUNT: ノードプールのノードの最大数。このコマンドを繰り返して、この数が 0 になるまで徐々にスケールダウンします。問題が発生した場合は、この値をスケールアップして元に戻してください。
  5. 完全に移行されたら、古いノードプールを削除します。

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

既存のノードプールを更新する

  1. 既存の Windows Server SAC ノードプールのノードイメージ タイプを切り替えます。

    gcloud container clusters upgrade CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --node-pool=NODE_POOL \
        --image-type=WINDOWS_LTSC_IMAGE
    

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

    • CLUSTER_NAME: GKE クラスタの名前。
    • COMPUTE_REGION: クラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE を使用します。
    • NODE_POOL: Windows Server SAC ノードプールの名前。
    • WINDOWS_LTSC_IMAGE: 使用する Windows Server LTSC イメージ(windows_ltsc_containerd または windows_ltsc)。

次のステップ