升级 Azure Kubernetes 服务(AKS)Windows 工作负载的操作系统(OS)版本

在 Azure Kubernetes 服务 (AKS) 上升级正在运行的 Windows 工作负载的 OS 版本时,需要部署新的节点池以确保每个节点池上的 Windows 版本匹配。 本文介绍在 AKS 上升级 Windows 工作负载 OS 版本的步骤。

Windows Server OS 版本支持

发布新的 Windows Server OS 版本后,AKS 将致力于支持它。 建议升级到最新版本,以利用修补程序、改进和新功能。 从 Windows Server 2022 开始,AKS 对每个 Windows Server 版本提供五年的支持。 在此期间,AKS 会发布一个新版本,该版本支持较新版本的 Windows Server OS 供你升级到。 五年生命周期结束后,必须将工作负载迁移到较新的支持版本,以确保 AKS 的兼容性、安全更新并继续支持。

注意

  • 在 Kubernetes 版本 1.34 终止支持后,Windows Server 2022 停用,Kubernetes 版本 1.35 及更高版本不支持。
  • 在 Kubernetes 版本 1.32 终止支持后,Windows Server 2019 停用,Kubernetes 版本 1.33 及更高版本不支持。

有关详细信息,请参阅 AKS 发行说明。 若要了解最新的 Windows Server 操作系统版本,并了解有关 AKS 上计划支持的路线图的详细信息,请参阅我们的 AKS 公共路线图

限制

  • 不支持从一个 Windows Server 版本迁移到另一个版本的节点池更新。
  • 不同的 Windows Server 版本不能共存于 AKS 上的同一节点池。 需要创建一个新的节点池来托管新的 OS 版本。 请务必将上一个节点池的权限和访问权限与新节点池相匹配。
  • 从 Kubernetes 版本 1.32 开始,支持 Windows Server 2025(预览版)。

开始之前

  • 将 Dockerfile 中的 FROM 语句更新为新的 OS 版本。
  • 检查应用程序并验证容器应用是否可以在新 OS 版本上运行。
  • 将 AKS 上的已验证容器应用部署到开发或测试环境。
  • 记下本文中使用的新映像名称或标签。

注意

若要了解如何为 Windows 工作负荷生成 Dockerfile,请参阅 Windows 上的 Dockerfile优化 Windows Dockerfile

安装 aks-preview 扩展

  1. 使用 aks-preview 命令安装 az extension add Azure CLI 扩展。

    重要

    AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令更新到扩展的最新版本。 Windows Server 2025 至少需要 18.0.0b5

    az extension update --name aks-preview
    

注册 AksWindows2025Preview 功能标志

  1. 使用 [AksWindows2025Preview][az-feature-register] 命令注册 az feature register 功能标志。

    az feature register --namespace "Microsoft.ContainerService" --name "AksWindows2025Preview"
    
  2. 使用 [az feature show][az-feature-show] 命令验证注册状态。 几分钟后,状态将显示为“已注册”

    az feature show --namespace Microsoft.ContainerService --name AksWindows2025Preview
    
  3. 当状态反映为“已注册”时,请使用 [][az-provider-register] 命令刷新 Microsoft.ContainerService 资源提供程序的注册az provider register

    az provider register --namespace Microsoft.ContainerService
    

将新节点池添加到现有群集

将具有所需 OS 版本的节点池添加到现有群集:

更新 YAML 文件

节点选择器是在 Windows 节点上放置 Windows Pod 的最常见和推荐的选项。

  1. 通过添加以下注释将节点选择器添加到 YAML 文件:

          nodeSelector:
            "kubernetes.io/os": windows
    

    该注释会查找任何可用的 Windows 节点并将 pod 放置在该节点上(遵循所有其他调度规则)。 升级操作系统版本时,需要确保放置在 Windows 节点和运行最新操作系统版本的节点上。 为此,一个选项是使用不同的批注。 更新 <OSSKU> 以匹配您所需的 Windows 操作系统版本,例如 Windows2025

          nodeSelector:
            "kubernetes.azure.com/os-sku": <OSSKU>
    
  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 部署到节点 nodeSelector

  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 服务 (AKS) 群集上的 Windows Server 节点启用组托管服务帐户 (GMSA)

访问其他 Azure 资源时,同一原则适用于任何其他 Pod 或节点池的托管标识。 需要更新托管标识提供的任何访问权限以反映新的节点池。 若要查看更新和登录活动,请参阅如何查看托管标识活动

后续步骤

在本文中,你了解了如何升级 AKS 上的 Windows 工作负荷的 OS 版本。 若要了解有关 AKS 上的 Windows 工作负载的更多信息,请参阅在 Azure Kubernetes 服务 (AKS) 上部署 Windows 容器应用程序