使用 Windows Server 節點集區建立叢集

本頁面說明如何建立 Google Kubernetes Engine (GKE) 叢集,並使用執行 Microsoft Windows Server 的節點集區。這個叢集可讓您使用 Windows Server 容器。目前不支援 Microsoft Hyper-V 容器。 與 Linux 容器類似,Windows Server 容器提供程序和命名空間隔離功能。

Windows Server 節點所需的資源比一般 Linux 節點多。Windows Server 節點需要額外資源才能執行 Windows OS,以及無法在容器中執行的 Windows Server 元件。由於 Windows Server 節點需要更多資源,因此可分配資源會比 Linux 節點少。

使用 Windows Server 節點集區建立叢集

在本節中,您將建立使用 Windows Server 容器的叢集。

如要建立這個叢集,請完成下列工作:

  1. 選擇 Windows Server 節點映像檔。
  2. 更新及設定 gcloud。
  3. 建立叢集和節點集區。
  4. 取得 kubectl 憑證。
  5. 等待叢集初始化。

為 GKE 設定 IAM 服務帳戶

GKE 會使用附加至節點的 IAM 服務帳戶,執行記錄和監控等系統工作。這些節點服務帳戶至少須具備專案的 Kubernetes Engine 預設節點服務帳戶 (roles/container.defaultNodeServiceAccount) 角色。根據預設,GKE 會使用Compute Engine 預設服務帳戶 (系統會在專案中自動建立) 做為節點服務帳戶。

如要將 roles/container.defaultNodeServiceAccount 角色授予 Compute Engine 預設服務帳戶,請完成下列步驟:

控制台

  1. 前往「歡迎」頁面:

    前往「歡迎」頁面

  2. 在「專案編號」欄位中,按一下「複製到剪貼簿」。
  3. 前往「IAM」頁面:

    前往「身分與存取權管理」頁面

  4. 按一下 「授予存取權」。
  5. 在「New principals」(新增主體) 欄位中,指定下列值:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    將 PROJECT_NUMBER 替換為您複製的專案編號。
  6. 在「選取角色」選單中,選取「Kubernetes Engine 預設節點服務帳戶」角色。
  7. 按一下 [儲存]。

gcloud

  1. 找出 Google Cloud 專案編號:
    gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)"

    將 PROJECT_ID 替換為專案 ID。

    輸出結果會與下列內容相似:

    12345678901
    
  2. 將 roles/container.defaultNodeServiceAccount 角色授予 Compute Engine 預設服務帳戶:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/container.defaultNodeServiceAccount"

    將 PROJECT_NUMBER 替換為上一個步驟中的專案編號。

選擇 Windows Server 節點映像檔

如要在 GKE 上執行,Windows Server 伺服器容器節點映像檔必須以建議的 Windows Server 2022 (LTSC) 版本或 Windows Server 2019 (LTSC) 版本為基礎建構。GKE 已淘汰 Windows Server 2019 (LTSC),因此無法用於執行 GKE 1.37 以上版本的節點集區。單一叢集可有多個使用不同 Windows Server 版本的 Windows Server 節點集區,但每個節點集區只能使用一個 Windows Server 版本。

選擇節點映像檔時,請考量下列事項:

  • 更新:請使用 LTSC2022,因為 GKE 已淘汰 LTSC2019。請注意下列 LTSC2019 相關事項:
    • 不更新節點映像檔:由於 Microsoft 已終止映像檔的主流支援,因此更新基礎映像檔會導致穩定性問題,GKE 不會為 LTSC2019 提供節點映像檔更新。GKE 節點映像檔會固定在 2025 年 12 月版的基礎映像檔。詳情請參閱「Windows Server 2019」。
    • 1.37 版的相容性:GKE 1.37 以上版本不支援 LTSC2019。您無法使用 LTSC2019 和 1.37 建立新的節點集區,也無法將現有的 LTSC2019 節點集區升級至 1.37。
  • 支援時間:
    • Windows Server 節點映像檔的支援時間取決於 Microsoft 提供的支援時間,詳情請參閱「作業系統映像檔支援政策」。如要查詢 GKE Windows 節點映像檔的支援終止日期,請使用「對應 GKE 和 Windows 版本」一節所述的 gcloud container get-server-config 指令。
  • 版本相容性和複雜度:

更新及設定 gcloud

開始之前,請務必先完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

建立叢集和節點集區

如要執行 Windows Server 容器,叢集必須至少有一個 Windows 和一個 Linux 節點集區。您無法只使用 Windows Server 節點集區建立叢集。執行重要叢集外掛程式時,需要 Linux 節點集區。

使用 Windows Server 節點集區建立叢集前,請先參閱「升級 Windows Server 節點集區」一節。

由於這項功能十分重要,建議您開啟自動調度資源功能,確保 Linux 節點集區有足夠的容量來執行叢集外掛程式。

gcloud

使用下列欄位建立叢集:

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

更改下列內容:

  • CLUSTER_NAME:您為叢集選擇的名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。提供區域叢集的區域,或可用區叢集的可用區。
  • --enable-ip-alias 開啟別名 IP。Windows Server 節點必須使用別名 IP。如要進一步瞭解其優點,請參閱「瞭解使用別名 IP 的原生容器路由」。
  • NUMBER_OF_NODES:您建立的 Linux 節點數量。您應提供足夠的運算資源,才能執行叢集外掛程式。這是選填欄位,如果省略,系統會使用 3 的預設值。
  • VERSION_NUMBER:要使用的特定叢集版本。如未指定發布管道,GKE 會將叢集註冊至最成熟的發布管道,並提供該版本。
  • CHANNEL:要註冊叢集的發布管道,可以是 rapid、regular、stable 或 None (已淘汰)。根據預設,叢集會註冊至 regular 發布管道。

強烈建議您指定權限最小的 IAM 服務帳戶,供節點使用,而非 Compute Engine 預設服務帳戶。如要瞭解如何建立僅具備必要權限的服務帳戶,請參閱「使用最低權限的服務帳戶」。

如要在 gcloud CLI 中指定自訂服務帳戶,請在指令中加入下列旗標:

--service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

將 SERVICE_ACCOUNT_NAME 替換為僅具備必要權限的服務帳戶名稱。

使用下列欄位建立 Windows Server 節點集區:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --image-type=WINDOWS_LTSC_CONTAINERD \
    --machine-type=MACHINE_TYPE_NAME \
    --windows-os-version=WINDOWS_OS_VERSION

更改下列內容:

  • NODE_POOL_NAME:您為 Windows Server 節點集區選擇的名稱。
  • CLUSTER_NAME:您在上方建立的叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。提供區域叢集的區域,或可用區叢集的可用區。
  • MACHINE_TYPE_NAME:定義機型。n1-standard-2 是建議的最低機器類型,因為 Windows Server 節點需要額外資源。不支援 f1-micro 和 g1-small 機型。每種機型的計費方式不同。詳情請參閱機型價目表。
  • WINDOWS_OS_VERSION:這是選用旗標,用於定義 WINDOWS_LTSC_CONTAINERD 映像檔類型要使用的 Windows OS 版本。如果是 GKE 1.37 以上版本,您只能使用 LTSC2022 (ltsc2022)。如果是 1.36 以下版本,建議您將值明確設為 ltsc2022。否則,GKE 會使用 LTSC2019 (ltsc2019),但由於 GKE 已淘汰這項功能,因此不建議使用。

以下範例說明如何建立 Windows Server 2022 節點集區:

gcloud container node-pools create node_pool_name \
    --cluster=cluster_name \
    --location=us-central1 \
    --image-type=WINDOWS_LTSC_CONTAINERD \
    --windows-os-version=ltsc2022

以下範例說明如何更新現有的 Windows 節點集區,以使用 Windows Server 2022 OS 映像檔:

gcloud container node-pools create node_pool_name \
    --cluster=cluster_name \
    --location=us-central1 \
    --windows-os-version=ltsc2022

控制台

  1. 前往 Google Cloud 控制台的「Create a Kubernetes cluster」(建立 Kubernetes 叢集) 頁面。

    前往「Create a Kubernetes cluster」(建立 Kubernetes 叢集)

  2. 在「叢集基本資訊」部分,完成下列操作:
    1. 輸入叢集的名稱。
    2. 在「Location type」(位置類型) 部分,為叢集選取區域或可用區。
    3. 在「發布管道」下方,選取「發布管道」和「目標版本」 (選用)。
  3. 在導覽窗格的「Node Pools」(節點集區) 下方,按一下「default-pool」建立 Linux 節點集區。設定這個節點集區時,請提供充足的運算資源,以執行叢集外掛程式。您也必須有節點及其資源 (例如防火牆路由) 的可用資源配額。
  4. 按一下頁面頂端的 「Add Node Pool」(新增節點集區),建立 Windows Server 節點集區。
  5. 在「Node pool details」(節點集區詳細資料) 部分,完成下列操作:
    1. 輸入節點集區的名稱。
    2. 輸入要在節點集區中建立的節點數量。
  6. 在導覽窗格的「Node Pools」(節點集區) 下方,按一下「Nodes」(節點)。

    1. 在「Image type」下拉式選單中,選取下列節點: image:

      • 採用 containerd 的 Windows 長期維護通道

      詳情請參閱「選擇 Windows 節點映像檔」一節。

    2. 選擇要用於執行個體的預設機器設定。n1-standard-2 是建議的最小大小,因為 Windows Server 節點需要額外資源。不支援 f1-micro 和 g1-small 機型。每種機器類型的計費方式不同。詳情請參閱機型價目表。

  7. 在導覽窗格的「Cluster」(叢集) 底下,選取「Networking」(網路)。

    1. 在「進階網路選項」底下,確認已選取「啟用虛擬私有雲原生流量轉送功能 (使用別名 IP)」。Windows Server 節點必須使用別名 IP。如要進一步瞭解其優點,請參閱「瞭解使用別名 IP 的原生容器路由」。
  8. 點選「建立」。

Terraform

如要使用 Terraform 建立 GKE Standard 叢集和 Windows Server 節點集區,請參閱下列範例:

resource "google_container_cluster" "default" {
  name     = "gke-standard-regional-cluster"
  location = "us-west1"

  initial_node_count = 1
}

resource "google_container_node_pool" "default" {
  name     = "windows-node-pool"
  cluster  = google_container_cluster.default.name
  location = google_container_cluster.default.location

  node_config {
    image_type = "WINDOWS_LTSC_CONTAINERD"
  }
}

這個範例使用 Windows Server LTSC 和 containerd。這是 Windows Server 2022 和 Windows Server 2019 OS 映像檔 (GKE 已淘汰) 的映像檔類型。如要進一步瞭解節點映像檔,請參閱「選擇 Windows 節點映像檔」。

如要進一步瞭解如何使用 Terraform,請參閱「GKE 的 Terraform 支援」。

建立 Windows Server 節點集區後,叢集會進入 RECONCILE 狀態幾分鐘,因為控制層正在更新。

取得 kubectl 憑證

使用 get-credentials 指令,讓 kubectl 能夠與您建立的叢集搭配使用。

gcloud container clusters get-credentials CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION

如要進一步瞭解 get-credentials 指令,請參閱 SDK get-credentials 說明文件。

等待叢集初始化

請稍候幾秒,等待 windows.config.common-webhooks.networking.gke.io 建立完成,再使用叢集。這個 Webhook 會將排程容許條件新增至使用節點選取器建立的 Pod,確保這些 Pod 可以在 Windows Server 節點上執行。kubernetes.io/os: windows此外,這個外掛程式也會驗證 Pod,確保 Pod 只使用 Windows 支援的功能。

如要確保已建立 Webhook,請執行下列指令:

kubectl get mutatingwebhookconfigurations

輸出內容應顯示執行中的 Webhook:

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

現在您有一個包含兩個節點集區 (一個 Linux 和一個 Windows) 的叢集,可以部署 Windows 應用程式。

對應 GKE 和 Windows 版本

Microsoft 每兩到三年會發布新的 LTSC 版本。這些新版本通常會在新的 GKE 子版本中提供。在 GKE 次要版本中,LTSC 版本通常會維持不變。

如要查看 GKE 版本和 Windows Server 版本之間的版本對應關係,請使用 gcloud beta container get-server-config 指令:

gcloud beta container get-server-config

版本對應關係會在回應的 windowsVersionMaps 欄位中傳回。如要篩選回應,查看叢集中特定 GKE 版本的版本對應,請在 Linux Shell 或 Cloud Shell 中執行下列步驟。

  1. 設定下列變數:

    CLUSTER_NAME=CLUSTER_NAME \
    NODE_POOL_NAME=NODE_POOL_NAME \
    CONTROL_PLANE_LOCATION=CONTROL_PLANE_LOCATION
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • NODE_POOL_NAME:Windows Server 節點集區的名稱。
    • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。如果是區域叢集,請提供區域;如果是可用區叢集,請提供可用區。
  2. 取得節點集區版本,並儲存在 NODE_POOL_VERSION 變數中:

    NODE_POOL_VERSION=`gcloud container node-pools describe $NODE_POOL_NAME \
    --cluster=$CLUSTER_NAME \
    --location=$CONTROL_PLANE_LOCATION \
    --format="value(version)"`
    
  3. 取得 NODE_POOL_VERSION 的 Windows Server 版本:

    gcloud beta container get-server-config \
        --location=$CONTROL_PLANE_LOCATION \
        --format="yaml(windowsVersionMaps.\"$NODE_POOL_VERSION\")"
    

    輸出結果會與下列內容相似:

    windowsVersionMaps:
      1.18.6-gke.6601:
        windowsVersions:
        - imageType: WINDOWS_SAC
          osVersion: 10.0.18363.1198
          supportEndDate:
            day: 10
            month: 5
            year: 2022
        - imageType: WINDOWS_LTSC
          osVersion: 10.0.17763.1577
          supportEndDate:
            day: 9
            month: 1
            year: 2024
    
  4. 取得 WINDOWS_LTSC 映像檔類型的 Windows Server 版本:

    gcloud beta container get-server-config \
      --flatten=windowsVersionMaps.\"$NODE_POOL_VERSION\".windowsVersions \
      --filter="windowsVersionMaps.\"$NODE_POOL_VERSION\".windowsVersions.imageType=WINDOWS_LTSC" \
      --format="value(windowsVersionMaps.\"$NODE_POOL_VERSION\".windowsVersions.osVersion)"
    

    輸出結果會與下列內容相似:

    10.0.17763.1577
    

升級 Windows Server 節點集區

根據 Windows Server 伺服器容器版本相容性規定,您可能需要先重建容器映像檔,使其與新 GKE 版本的 Windows Server 版本相符,才能升級節點集區。請參閱下列有關升級這類節點集區的最佳化建議:

  • 如要防止節點自動升級,請使用維護作業排除項目。
  • 請檢查版本對應,並將 Windows Server 伺服器容器映像檔建構為多架構映像檔,確保容器映像檔與節點保持相容,且可指定多個 Windows Server 版本。接著,您可以更新容器部署作業,指定可在目前和下一個 GKE 版本上運作的多架構映像檔,然後手動叫用 GKE 節點集區升級作業。
  • 如果您禁止節點自動升級,請定期手動升級節點集區,因為節點版本不得落後控制層版本超過兩個子版本。
  • 如要主動接收新版 GKE 和所用 Windows OS 版本的最新資訊,請訂閱升級通知。
  • 只有在您持續建構以最新 Windows Server 版本為目標的多架構 Windows Server 伺服器容器映像檔時,才讓 GKE 執行節點自動升級。節點自動升級功能不太可能導致 Windows Server LTSC 節點映像檔類型發生問題,但仍有遇到版本不相容問題的風險。

Windows 更新

Windows Server 節點已停用 Windows 更新。自動更新可能會導致節點在無法預測的時間重新啟動,而且在節點啟動後安裝的任何 Windows Update,都會在 GKE 重新建立節點時遺失。GKE 會定期更新新版 GKE 中使用的 Windows Server 節點映像檔,提供 Windows 更新。Microsoft 發布 Windows 更新後,可能需要一段時間才能在 GKE 中使用。發布重大安全性更新時,GKE 會盡快更新 Windows Server 節點映像檔。

控管 Windows Pod 和服務的通訊方式

您可以使用網路政策,控管 Windows Pod 和服務的通訊方式。

在 GKE 1.22.2 以上版本中,啟用網路政策的叢集可以有 Windows Server 容器。這項功能適用於使用 WINDOWS_LTSC 或 WINDOWS_LTSC_CONTAINERD 節點映像檔類型的叢集。

如果控制層或節點執行的是舊版,您可以將節點集區遷移至支援網路政策的版本,方法是將節點集區和控制層升級至 GKE 1.22.2 版以上。只有使用 --enable-dataplane-v2 旗標建立叢集時,才能使用這個選項。

啟用網路政策後,先前設定的所有政策 (包括啟用這項功能前無法在 Windows Server 容器上運作的政策) 都會生效。

在已啟用網路政策的叢集上,部分叢集無法與 Windows Server 容器搭配使用。詳情請參閱「限制」一節。

查看及查詢記錄

GKE 叢集會自動啟用記錄功能。您可以使用 Kubernetes Engine 監控功能,查看容器記錄和 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. 設定叢集中的 Windows Server 節點,自動加入 AD 網域。如需操作說明,請參閱「設定 Windows Server 節點,自動加入 Active Directory 網域」。

  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_NAME 是 webapp01,且網域是 example.com,則 DNS_HOST_NAME 為 webapp01.example.com。
  3. 按照「為 Windows Pod 和容器設定 GMSA」教學課程中的操作說明,設定 gMSA。

刪除 Windows Server 節點集區

使用 gcloud 或 Google Cloud 控制台刪除 Windows Server 節點集區。

gcloud

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

控制台

如要使用 Google Cloud 控制台刪除 Windows Server 節點集區,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下要編輯的叢集旁的「Actions」(動作),然後按一下「Edit」(編輯)。

  3. 選取「節點」分頁標籤。

  4. 在「Node Pools」(節點集區) 區段下方,按一下要刪除的節點集區旁邊的 「Delete」(刪除)。

  5. 系統提示您進行確認時,再按一下 [Delete] (刪除)。

限制

Windows Server 節點集區不支援下列功能:

如要瞭解其他 Google Cloud 產品與 GKE 叢集搭配使用時的具體限制,請參閱該產品的說明文件。

疑難排解

如需 Windows Server 節點集區的專屬疑難排解指南,請參閱「排解 Windows Server 節點集區問題」。

如需一般指引,請參閱 Kubernetes 說明文件,瞭解如何偵錯 Pod 和服務。

後續步驟