本頁面說明如何建立 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 容器的叢集。
如要建立這個叢集,您必須完成下列工作:
設定 GKE 的 IAM 服務帳戶
GKE 會使用附加至節點的 IAM 服務帳戶,執行記錄和監控等系統工作。這些節點服務帳戶至少須具備專案的 Kubernetes Engine 預設節點服務帳戶 (roles/container.defaultNodeServiceAccount) 角色。根據預設,GKE 會使用 Compute Engine 預設服務帳戶做為節點服務帳戶,該帳戶會在專案中自動建立。
如要將 roles/container.defaultNodeServiceAccount 角色授予 Compute Engine 預設服務帳戶,請完成下列步驟:
控制台
- 前往「Welcome」(歡迎) 頁面:
- 在「Project number」(專案編號) 欄位中,按一下 「Copy to clipboard」(複製到剪貼簿)。
- 前往「IAM」頁面:
- 按一下「Grant access」(授予存取權)。
- 在「New principals」(新增主體) 欄位中,指定下列值:
將PROJECT_NUMBER-compute@developer.gserviceaccount.comPROJECT_NUMBER替換為您複製的專案編號。 - 在「Select a role」(選取角色) 選單中,選取「Kubernetes Engine Default Node Service Account」(Kubernetes Engine 預設節點服務帳戶) 角色。
- 按一下 [儲存]。
gcloud
- 找出 Google Cloud 專案編號:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
將
PROJECT_ID替換為專案 ID。輸出結果會與下列內容相似:
12345678901
- 將
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,因為 LTSC2019 已由 GKE 淘汰。請注意下列 LTSC2019 相關事項:
- 不更新節點映像檔:Microsoft 已終止對 LTSC2019 映像檔的主要支援,因此 GKE 不會提供 LTSC2019 的節點映像檔更新,以免基礎映像檔更新造成穩定性問題。GKE 節點映像檔會固定在 2025 年 12 月版的基礎映像檔。詳情請參閱「Windows Server 2019」。
- 與 1.37 的相容性:GKE 1.37 以上版本無法使用 LTSC2019。您無法使用 LTSC2019 和 1.37 建立新的節點集區,也無法將現有的 LTSC2019 節點集區升級至 1.37。
- 支援時間:
- Windows Server 節點映像檔的支援時間,取決於 Microsoft 提供的支援時間,詳情請參閱「OS 映像檔支援政策」。如要查看 GKE Windows 節點映像檔的支援終止日期,請按照「對應 GKE 和 Windows 版本」一節所述,使用
gcloud container get-server-config指令。
- Windows Server 節點映像檔的支援時間,取決於 Microsoft 提供的支援時間,詳情請參閱「OS 映像檔支援政策」。如要查看 GKE Windows 節點映像檔的支援終止日期,請按照「對應 GKE 和 Windows 版本」一節所述,使用
- 版本相容性和複雜度:
- Windows Server Core 和 Nano Server 都可以做為容器的基本映像檔。
- 將 Windows Server 容器映像檔建構為多架構映像檔,可指定多個 Windows Server 版本,協助您管理這種複雜的版本管理作業。
更新及設定 gcloud
開始之前,請確認您已執行下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。
- 請確認您具備建立叢集的適當權限。您至少應具備 Kubernetes Engine 叢集管理員權限。
建立叢集和節點集區
如要執行 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
控制台
- 前往 Google Cloud 控制台的「Create a Kubernetes cluster」(建立 Kubernetes 叢集) 頁面。
- 在「Cluster basics」(叢集基本資訊) 部分,完成下列操作:
- 輸入叢集的名稱。
- 在「Location type」(位置類型) 部分,為叢集選取區域或可用區。
- 在「Release channels」(發布管道) 下方,選取「Release channel」(發布管道),並視需要選取「Target version」(目標版本)。
- 在導覽窗格的「Node Pools」(節點集區) 下方,按一下「default-pool」,建立 Linux 節點集區。設定這個節點集區時,請提供足夠的運算資源,以便執行叢集外掛程式。此外,您必須具備節點及其資源 (例如防火牆路由) 的可用資源配額。
- 按一下頁面頂端的 add_box「Add Node Pool」(新增節點集區),建立 Windows Server 節點集區。
- 在「Node pool details」(節點集區詳細資料) 部分,完成下列操作:
- 輸入節點集區的名稱。
- 輸入要在節點集區中建立的節點數量。
在導覽窗格的「Node Pools」(節點集區) 下方,按一下「Nodes」(節點)。
從「Image type」(映像檔類型) 下拉式選單中,選取下列節點映像檔:
- 採用 containerd 的 Windows 長期維護通道
詳情請參閱「選擇 Windows 節點映像檔」一節。
選擇要用於執行個體的預設機器設定。
n1-standard-2是建議的最小大小,因為 Windows Server 節點需要額外資源。不支援f1-micro和g1-small機型。每種機器類型的計費方式不同。詳情請參閱機型價目表。
在導覽窗格的「叢集」底下,選取「網路」。
- 在「進階網路選項」底下,確認已選取「啟用虛擬私有雲原生流量轉送功能 (使用別名 IP)」。Windows Server 節點必須使用別名 IP。如要進一步瞭解其優點,請參閱「瞭解使用別名 IP 的原生容器轉送」。
點選「建立」。
Terraform
如要使用 Terraform 建立 GKE Standard 叢集和 Windows Server 節點集區,請參考下列範例:
這個範例使用 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 會將排程容許條件新增至使用 kubernetes.io/os: windows 節點選取器建立的 Pod,確保這些 Pod 可以在 Windows Server 節點上執行。此外,這個外掛程式也會驗證 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 殼層或 Cloud Shell 中執行下列步驟。
設定下列變數:
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 位置。提供區域叢集的區域,或可用區叢集的可用區。
取得節點集區版本,並儲存在
NODE_POOL_VERSION變數中:NODE_POOL_VERSION=`gcloud container node-pools describe $NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --location=$CONTROL_PLANE_LOCATION \ --format="value(version)"`取得
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取得
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 Update。自動更新可能會導致節點在無法預測的時間重新啟動,而且在節點啟動後安裝的任何 Windows Update,都會在 GKE 重新建立節點時遺失。GKE 會定期更新新版 GKE 使用的 Windows Server 節點映像檔,提供 Windows 更新。Microsoft 發布 Windows 更新後,可能需要一段時間才會在 GKE 中提供。重大安全性更新發布時,GKE 會盡快更新 Windows Server 節點映像檔。
控管 Windows Pod 和 Service 的通訊方式
您可以使用網路政策,控管 Windows Pod 和 Service 的通訊方式。
在 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)。
設定叢集中的 Windows Server 節點,自動加入 AD 網域。如需操作說明,請參閱「設定 Windows Server 節點,自動加入 Active Directory 網域」。
建立 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。
按照「為 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 節點集區,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下要編輯的叢集旁的more_vert「Actions」(動作),然後按一下edit「Edit」(編輯)。
選取「Nodes」(節點) 分頁標籤。
在「Node Pools」(節點集區) 區段下方,按一下要刪除的節點集區旁邊的 delete「Delete」(刪除)。
系統提示您進行確認時,再按一下 [Delete] (刪除)。
限制
Windows Server 節點集區不支援下列功能:
運算和節點功能:
- Autopilot 模式
- 自動佈建節點
- 第三代以上的機器系列
- Z3 機器系列
- Z4D 機器系列
- Z4M 機器系列
- 映像檔串流
- Alpha 版叢集
- 加速器,包括 GPU 和 TPU
網路功能:
- 設定個別節點的 Pod 數量上限,超過預設上限 110
- 掌握節點內流量
- 節點本機 DNS 快取
- 網路政策記錄
- IP 偽裝代理程式。Windows 節點會對外部目的地執行 IP 偽裝,但不支援代理程式。
- IPv4/IPv6 雙重堆疊網路。Windows 節點不支援 IPv6 網路。
- 私人使用 E 類 IP 位址
- 私人使用的公開 IP 位址
- 完整支援 GKE Dataplane V2。除了參考文件中所述的限制外,採用 GKE Dataplane V2 的 Windows 節點僅限於網路政策強制執行。
安全防護功能:
- 機密 GKE 節點
- Linux 專屬安全防護功能 (例如 Seccomp、Apparmor 和 SELinux)
Kubernetes 功能與特色
- 主機命名空間 (例如 hostNetwork、hostPID 和 hostIPC)。Windows 作業系統不支援這些功能。
- Kubernetes
service.spec.sessionAffinity - 「Kubernetes 中的 Windows 容器」文件的「相容性和限制」一節中列出的功能
儲存空間功能:
- 預設 fstype (ext4),與平衡型永久磁碟類型搭配使用。詳情請參閱「StorageClasses」。
- Filestore CSI 驅動程式
- 採用 NVMe 介面的本機 SSD,用於臨時儲存空間
觀測功能:
- 如果停用 kubelet 唯讀通訊埠,Windows 節點的工作負載記錄檔就會缺少 Kubernetes Pod 標籤,因為 Logging 代理程式無法擷取 Pod 標籤。
Microsoft 功能:
其他:
- Docker 型 Cloud SQL 驗證 Proxy
- 您無法建立只有 Windows Server 節點集區的叢集,至少須有一個 Linux 節點集區。
如要瞭解可能與 GKE 叢集搭配使用的其他 Google Cloud 產品有哪些特定限制,請參閱該產品的說明文件。
疑難排解
如需 Windows Server 節點集區專屬的疑難排解指南,請參閱「排解 Windows Server 節點集區問題」。
如需一般指南,請參閱 Kubernetes 說明文件,瞭解如何偵錯 Pod 和服務。
後續步驟
- 瞭解如何部署 Windows 應用程式。
- 閱讀 Microsoft 的 Windows 容器簡介。
- 請參閱 Microsoft 的指南,瞭解如何選擇容器基本映像檔。
- 請參閱 Microsoft 關於 Windows 容器版本相容性的說明。