升級 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 的新版本,讓您升級至 。

注意

  • 在 Kubernetes 1.32 版終止生命週期 (EOL) 之後,Windows Server 2019 即將淘汰。 如需詳細資訊,請參閱 AKS 版本資訊
  • 在 Kubernetes 1.34 版達到生命周期結束 (EOL) 之後,Windows Server 2022 即將淘汰。 如需詳細資訊,請參閱 AKS 版本資訊

限制

Windows Server 2019 和 Windows Server 2022 不能並存於 AKS 上的相同節點集區。 您必須建立新的節點集區來裝載新的 OS 版本。 請務必讓先前節點集區的權限和存取權與新節點集區相符。

開始之前

  • 將 Dockerfile 上的 FROM 陳述式更新為新的 OS 版本。
  • 檢查您的應用程式,並確認容器應用程式可在新的 OS 版本上運作。
  • 將 AKS 上已驗證的容器應用程式部署到開發或測試環境。
  • 記下要在本文中使用的新映像名稱或標籤。

注意

了解如何建置適用於 Windows 工作負載的 Dockerfile,請參閱 Windows 上的 Dockerfile最佳化 Windows Dockerfile

新增 Windows Server 2022 節點集區至現有的叢集

更新 YAML 檔案

節點選取器是在 Windows 節點上放置 Windows Pod 最常見的建議選項。

  1. 藉由新增下列註釋,將節點選取器新增至 YAML 檔案:

          nodeSelector:
            "kubernetes.io/os": windows
    

    註釋會尋找任何可用的 Windows 節點,並將 Pod 放在該節點上 (遵循所有其他排程規則)。 從 Windows Server 2019 升級到 Windows Server 2022 時,您應強制放置在 Windows 節點,且是執行最新 OS 版本的節點上。 若要達成此目的,其中一個選項是使用不同的註釋:

          nodeSelector:
            "kubernetes.azure.com/os-sku": Windows2022
    
  2. 更新 YAML 檔案中的 nodeSelector 之後,您也需要更新要使用的容器映像。 您可以從上一個步驟取得此資訊,在上一個步驟中您已透過變更 Dockerfile 上的 FROM 陳述式,建立新版的容器化應用程式。

注意

您應該使用最初用於部署應用程式的相同 YAML 檔案。 這可確保除了 nodeSelector 和容器映像之外,沒有任何其他組態變更。

將更新後的 YAML 檔案套用至現有的工作負載

  1. 使用 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
    
  2. 使用 kubectl apply 命令將更新的 YAML 檔案套用至現有的工作負載,並指定 YAML 檔案名稱。

    kubectl apply -f <filename>
    

    下列範例輸出顯示了部署的狀態為 [已設定]:

    deployment.apps/sample configured
    service/sample unchanged
    

    此時,AKS 會啟動終止現有 Pod 並將新 Pod 部署到 Windows Server 2022 節點的程序。

  3. 使用 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 容器應用程式