為 Azure Kubernetes Service (AKS) 的 Windows 工作負載升級 OS 版本
若要為 Azure Kubernetes Service (AKS) 上執行中的 Windows 工作負載升級 OS 版本,您需要部署新的節點集區,以確保 Windows 版本符合每個節點集區。 本文說明在 AKS 上為 Windows 工作負載升級 OS 版本的步驟。 雖然此範例著重於從 Windows Server 2019 升級至 Windows Server 2022,但您可以遵循相同的流程,從任意 Windows Server 版本升級至另一個版本。
Windows Server OS 版本支援
發行新版本的 Windows Server 作業系統時,AKS 會致力於支援新版本,並建議您升級至最新版本,以利用修正、改進和新功能。 AKS 從 Windows Server 2022 開始,為每個 Windows Server 版本提供五年的支援生命週期。 在此期間,AKS 將發行新版本,以支援升級目標的較新版本 Windows Server OS。
注意
限制
Windows Server 2019 和 Windows Server 2022 不能並存於 AKS 上的相同節點集區。 您必須建立新的節點集區來裝載新的 OS 版本。 請務必讓先前節點集區的權限和存取權與新節點集區相符。
開始之前
- 將 Dockerfile 上的
FROM
陳述式更新為新的 OS 版本。 - 檢查您的應用程式,並確認容器應用程式可在新的 OS 版本上運作。
- 將 AKS 上已驗證的容器應用程式部署到開發或測試環境。
- 記下要在本文中使用的新映像名稱或標籤。
注意
了解如何建置適用於 Windows 工作負載的 Dockerfile,請參閱 Windows 上的 Dockerfile 和最佳化 Windows Dockerfile。
新增 Windows Server 2022 節點集區至現有的叢集
- 新增 Windows Server 2022 節點集區至現有的叢集。
更新 YAML 檔案
節點選取器是在 Windows 節點上放置 Windows Pod 最常見的建議選項。
藉由新增下列註釋,將節點選取器新增至 YAML 檔案:
nodeSelector: "kubernetes.io/os": windows
註釋會尋找任何可用的 Windows 節點,並將 Pod 放在該節點上 (遵循所有其他排程規則)。 從 Windows Server 2019 升級到 Windows Server 2022 時,您應強制放置在 Windows 節點,且是執行最新 OS 版本的節點上。 若要達成此目的,其中一個選項是使用不同的註釋:
nodeSelector: "kubernetes.azure.com/os-sku": Windows2022
更新 YAML 檔案中的
nodeSelector
之後,您也需要更新要使用的容器映像。 您可以從上一個步驟取得此資訊,在上一個步驟中您已透過變更 Dockerfile 上的FROM
陳述式,建立新版的容器化應用程式。
注意
您應該使用最初用於部署應用程式的相同 YAML 檔案。 這可確保除了 nodeSelector
和容器映像之外,沒有任何其他組態變更。
將更新後的 YAML 檔案套用至現有的工作負載
使用
kubectl get nodes
命令,檢視叢集中的節點。kubectl get nodes -o wide
下列範例輸出會顯示叢集上的所有節點,包括您建立的新節點集區和現有的節點集區:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME aks-agentpool-18877473-vmss000000 Ready agent 5h40m v1.23.8 10.240.0.4 <none> Ubuntu 18.04.6 LTS 5.4.0-1085-azure containerd://1.5.11+azure-2 akspoolws000000 Ready agent 3h15m v1.23.8 10.240.0.208 <none> Windows Server 2022 Datacenter 10.0.20348.825 containerd://1.6.6+azure akspoolws000001 Ready agent 3h17m v1.23.8 10.240.0.239 <none> Windows Server 2022 Datacenter 10.0.20348.825 containerd://1.6.6+azure akspoolws000002 Ready agent 3h17m v1.23.8 10.240.1.14 <none> Windows Server 2022 Datacenter 10.0.20348.825 containerd://1.6.6+azure akswspool000000 Ready agent 5h37m v1.23.8 10.240.0.115 <none> Windows Server 2019 Datacenter 10.0.17763.3165 containerd://1.6.6+azure akswspool000001 Ready agent 5h37m v1.23.8 10.240.0.146 <none> Windows Server 2019 Datacenter 10.0.17763.3165 containerd://1.6.6+azure akswspool000002 Ready agent 5h37m v1.23.8 10.240.0.177 <none> Windows Server 2019 Datacenter 10.0.17763.3165 containerd://1.6.6+azure
使用
kubectl apply
命令將更新的 YAML 檔案套用至現有的工作負載,並指定 YAML 檔案名稱。kubectl apply -f <filename>
下列範例輸出顯示了部署的狀態為 [已設定]:
deployment.apps/sample configured service/sample unchanged
此時,AKS 會啟動終止現有 Pod 並將新 Pod 部署到 Windows Server 2022 節點的程序。
使用
kubectl get pods
命令檢查部署的狀態。kubectl get pods -o wide
下列範例輸出顯示
default
命名空間中的 Pod:NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES sample-7794bfcc4c-k62cq 1/1 Running 0 2m49s 10.240.0.238 akspoolws000000 <none> <none> sample-7794bfcc4c-rswq9 1/1 Running 0 2m49s 10.240.1.10 akspoolws000001 <none> <none> sample-7794bfcc4c-sh78c 1/1 Running 0 2m49s 10.240.0.228 akspoolws000000 <none> <none>
安全性和驗證考量
如果使用群組受管理的服務帳戶 (GMSA),您必須為新節點集區更新受控識別設定。 gMSA 會使用秘密 (使用者帳戶和密碼),讓執行 Windows Pod 的節點可以針對 Microsoft Entra ID 驗證容器。 若要在 Azure Key Vault 上存取該秘密,節點會使用受控識別來允許節點存取資源。 由於受控識別是針對每個節點集區進行設定,而且 Pod 現在位於新的節點集區上,因此您必須更新該設定。 如需詳細資訊,請參閱為 Azure Kubernetes Service (AKS) 叢集上的 Windows 伺服器節點,啟用群組受管理的服務帳戶 (GMSA)。
相同原則適用於存取其他 Azure 資源時,用於任何其他 Pod 或節點集區的受控識別。 您必須更新受控識別提供的任何存取權,以反映新的節點集區。 若要檢視更新和登入活動,請參閱如何檢視受控識別活動。
下一步
在本文中,您已了解如何升級 AKS 上 Windows 工作負載的 OS 版本。 若要深入了解 AKS 上的 Windows 工作負載,請參閱在 Azure Kubernetes Service (AKS) 上部署 Windows 容器應用程式。