AKS 中的 Windows Server 節點集區常見問題集

在 Azure Kubernetes Service (AKS) 中,您可以建立節點集區,而且節點上執行 Windows Server 當作客體 OS。 這些節點可以執行原生 Windows 容器應用程式 (例如以 .NET Framework 為基礎)。 Linux 和 Windows OS 以不同方式支援容器。 某些常見的 Linux Kubernetes 和 Pod 相關功能目前不適用於 Windows 節點集區。

關於 AKS 中的 Windows Server 節點,本文概述一些常見問題和 OS 概念。

Windows 支援何種磁碟?

Azure 資料箱磁碟和 Azure 檔案儲存體是支援的磁碟區類型,而且會以 Windows Server 容器中的 NTFS 磁碟區的形式存取。

Linux 和 Windows 是否支援第 2 代虛擬機器 (VM)?

只有適用於 WS2022 的 Linux 和 Windows 才支援第 2 代 VM。 如需詳細資訊,請參閱 Azure 上第二代 VM 的支援

如何修補我的 Windows 節點?

若要取得 Windows 節點的最新修補檔,您可以升級節點集區升級節點映像。 AKS 中的節點上不啟用 Windows Update。 有修補檔可用時,AKS 會立即發行新的節點集區映像,使用者須負責升級節點集區,隨時取得最新的修補檔和修正程式。 此修補程序對於使用中的 Kubernetes 版本也是如此。 AKS 版本資訊指出何時有新版本可用。 如需有關升級 Windows Server 節點集區的詳細資訊,請參閱在 AKS 中升級節點集區。 如果您只想更新節點映像,請參閱 AKS 節點映像升級

注意

只有在升級節點集區之前已執行叢集升級 (控制平面升級),才會使用更新的 Windows Server 映像。

是否支援保留用戶端來源 IP?

目前,Windows 節點不支援用戶端來源 IP 保留

是否可以變更每個節點的 Pod 數目上限?

是。 關於變更的連帶影響及可用的選項,請參閱 Pod 數目上限

Windows OS 中的預設 TCP 逾時是多長時間?

Windows OS 中的預設 TCP 逾時為 4 分鐘。 您無法設定此值。 當應用程式使用更大的逾時值時,相同節點中不同容器之間的 TCP 連線會在四分鐘後關閉。

嘗試建立新的 Windows 代理程式集區時為何出現錯誤?

如果您在 2020 年 2 月之前建立叢集,且從未執行任何叢集升級作業,叢集仍會使用舊的 Windows 映像。 您可能看到類似下列的錯誤:

「找不到從部署範本參考的下列映像清單:Publisher:MicrosoftWindowsServer,供應項目:WindowsServer,SKU:2019-datacenter-core-smalldisk-2004,版本:最新。 有關尋找可用映像的指示,請參閱透過 Azure PowerShell 尋找和使用 Azure Marketplace VM 映像。」

修正這個錯誤:

  1. 升級叢集控制平面以更新映像供應項目和發行者。
  2. 建立新的 Windows 代理程式集區。
  3. 將 Windows Pod 從現有的 Windows 代理程式集區移至新的 Windows 代理程式集區。
  4. 刪除舊 Windows 代理程式集區。

當我嘗試部署 Windows Pod 時,為什麼會看到錯誤?

如果您在 --max-pods 中指定的值小於您想要建立的 Pod 數目,您可能會看到 No available addresses 錯誤。

若要修正此錯誤,請在使用 az aks nodepool add 命令時配合足夠大的 --max-pods 值:

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 節點集區,並將您的 Pod 從較舊的集區遷移至新的集區。 將 Pod 遷移至新的集區之後,請刪除較舊的節點集區。

不要使用服務主體,請使用受控識別,這基本上是服務主體的包裝函式。 如需詳細資訊,請參閱在 Azure Kubernetes Service 中使用受控識別 \(部分機器翻譯\)。

如何對叢集上的 Windows Server 節點變更管理員密碼?

建立 AKS 叢集時,您會指定 --windows-admin-password--windows-admin-username 參數,以針對叢集上的任何 Windows Server 節點設定管理員認證。 當您使用 Azure 入口網站建立叢集時,或使用 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 節點集區可以有六個字元的名稱。

Windows 節點是否支援所有功能?

Windows 節點目前不支援 Kubenet。

是否可以在 Windows 節點上執行輸入控制器?

是,在 AKS 中的 Windows 節點上,可以執行支援 Windows Server 容器的輸入控制器。

我的 Windows Server 容器是否可以使用 gMSA?

群組受控的服務帳戶 (gMSA) 支援正式適用於 AKS 上的 Windows。 請參閱為 Azure Kubernetes Service (AKS) 叢集上的 Windows 伺服器節點,啟用群組受控的服務帳戶 (GMSA)

是否可以對 Windows 節點和容器使用適用於容器的 Azure 監視器?

是的,可以。 不過,Azure 監視器為公開預覽版,可從 Windows 容器收集記錄 (stdout、stderr) 和計量。 您也可以從 Windows 容器連結至 stdout 記錄的即時串流。

Windows 節點所在叢集上的服務數目有無任何限制?

Windows 節點所在的叢集在連接埠耗盡之前,可以提供約 500 個服務 (有時更少)。 此限制適用於將外部流量原則設定為「叢集」的 Kubernetes Service。

當 Kubernetes Service 的外部流量原則設定為「叢集」時,流量會在節點上經歷額外的來源 NAT,這也會導致從 TCPIP 動態連接埠集區保留連接埠。 此連接埠集區是有限的資源 (預設約 16,000 個連接埠),並且隨著與 Kubernetes Service 的作用中連線增多,可能會使動態連接埠集區耗盡,導致連線中斷。

若在設定 Kubernetes Service 時將「外部流量原則」設定為「本機」,則 500 個服務的數量不太可能發生連接埠耗盡的問題。

是否可以對 Windows 節點使用 Azure Hybrid Benefit?

是。 適用於 Windows Server 的 Azure Hybrid Benefit 可讓您將內部部署 Windows Server 授權帶到 AKS Windows 節點,以降低營運成本。

整個 AKS 叢集或個別節點上都可以使用 Azure Hybrid Benefit。 針對個別節點,您必須瀏覽至節點資源群組,然後將Azure Hybrid Benefit 直接套用至節點。 如需將 Azure Hybrid Benefit 套用至個別節點的詳細資訊,請參閱適用於 Windows Server 的 Azure Hybrid Benefit

若要在新的 AKS 叢集上使用 Azure Hybrid Benefit,請執行 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 Hybrid Benefit,請執行 az aks update 命令及使用 --enable-ahub 引數來更新叢集。

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

若要檢查是否已在叢集中的 Windows 節點上設定 Azure Hybrid Benefit,請搭配 --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 Hybrid Benefit,則 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 容器來維護從用戶端到 Pod 的工作階段親和性?

雖然 Windows Server 2022 OS 版本支援使用 Windows 容器來維護從用戶端到 Pod 的工作階段親和性,但目前需要將您要的 Pod 限制為每個節點執行單一執行個體,並將 Kubernetes 服務設定為將流量導向本機節點上的 Pod,才能依用戶端 IP 達到工作階段親和性。

請使用下列組態︰

  1. 使用至少執行 1.20 版的 AKS 叢集。
  2. 限制 Pod 只允許每個 Windows 節點一個執行個體。 您可以在部署組態中使用反親和性來達成此目的。
  3. 在 Kubernetes 服務組態中,設定 externalTrafficPolicy=Local。 這可確保 Kubernetes 服務將流量只導向本機節點內的 Pod。
  4. 在 Kubernetes 服務組態中,設定 sessionAffinity: ClientIP。 這可確保 Azure Load Balancer 設定工作階段親和性。

下一步

若要在 AKS 中開始使用 Windows Server 容器,請參閱在 AKS 中建立執行 Windows Server 的節點集區