在Azure Kubernetes 服务 (AKS)上升级正在运行的Windows工作负荷的 OS 版本时,请使用以下迁移方法之一:
- 就地迁移:更新现有节点池上的 OS SKU,以便从 Windows Server 2022 迁移到 Windows Server 2025。
- 手动迁移:使用所需的Windows Server OS 版本创建新的节点池,将工作负载移动到新节点池,并删除旧节点池。
发布新的 Windows Server OS 版本后,AKS 将致力于支持它。 建议升级到最新版本,以利用修补程序、改进和新功能。 从 Windows Server 2022 开始,AKS 对每个 Windows Server 版本提供五年的支持。 在此期间,AKS 会发布一个新版本,该版本支持较新版本的 Windows Server OS 供你升级到。 五年生命周期结束后,必须将工作负载迁移到较新的支持版本,以确保 AKS 的兼容性、安全更新并继续支持。
重要
从 2028 年 6 月 30 日开始,Azure Kubernetes 服务 (AKS)不再支持Windows Server 2022节点池。 Kubernetes 版本 1.37 及更高版本中不支持Windows Server 2022。 从 2029 年 6 月 30 日开始,AKS 将删除Windows Server 2022的所有现有节点映像,这意味着缩放操作将失败。 有关此停用的详细信息,请参阅 停用 GitHub 问题和Azure 更新停用公告。 若要随时了解公告和更新,请按照 AKS 发行说明进行操作。
以下限制适用于Windows Server OS 版本迁移:
- 仅支持使用
aks-previewAzure CLI 扩展 22.0.0b6 或更高版本,将节点池从 Windows Server 2022 更新迁移到 Windows Server 2025。 对于所有其他Windows Server OS 版本迁移,请创建新的节点池。 - 不同的 Windows Server 版本不能共存于 AKS 上的同一节点池。 如果创建新的节点池来托管新的 OS 版本,请确保将上一个节点池的权限和访问权限与新节点池匹配。
- 从 Kubernetes 版本 1.32.0 开始,支持 Windows Server 2025。
Prerequisites
- 将 Dockerfile 中的
FROM语句更新为新的 OS 版本。 - 检查应用程序并验证容器应用是否可以在新 OS 版本上运行。
- 将 AKS 上的已验证容器应用部署到开发或测试环境。
- 记下本文中使用的新映像名称或标签。
- 对于从 Windows Server 2022 到 Windows Server 2025 的就地迁移,请安装或更新
aks-previewAzure CLI 扩展到版本 22.0.0b6 或更高版本。
注意
若要了解如何为 Windows 工作负荷生成 Dockerfile,请参阅 Windows 上的 Dockerfile 和优化 Windows Dockerfile。
重要
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
安装 aks-preview Azure CLI 扩展
- 若要安装 aks-preview 扩展,请运行以下命令:
从 Windows Server 2022 就地迁移到 Windows Server 2025
可以通过使用 az aks nodepool update 命令更新现有节点池上的 OS SKU,将现有的 Windows Server 2022 节点池原地迁移到 Windows Server 2025。 此迁移路径使用 aks-preview Azure CLI 扩展版本 22.0.0b6 或更高版本。 群集必须运行 Kubernetes 版本 1.32 到 1.36,其中两个操作系统版本都受支持。
就地迁移注意事项
在将Windows Server 2022节点池迁移到 Windows Server 2025 之前,请考虑以下详细信息:
- 默认情况下,Windows Server 2025 使用已启用 FIPS 的映像。 如果Windows Server 2022节点池尚未使用已启用 FIPS 的映像,请在运行更新命令时包括
--enable-fips-image。 - 更新命令会触发现有节点池的自动重置映像。
- Windows Server 2025 默认使用第 2 代 VM。 您无需拥有现有的第 2 代 Windows Server 2022 节点池即可执行就地迁移。 支持标准Windows Server 2022
containerd节点池。 - 如果现有 VM 大小支持第 2 代,AKS 可以在迁移过程中选择Windows Server 2025 第 2 代映像。 此默认映像选择可能会影响某些配置的映像兼容性。
下表介绍了哪些源配置支持使用 update 命令进行就地迁移。 对于不支持的配置,请改用 手动迁移 。
| 现有配置 | Support | Result |
|---|---|---|
Standard Windows Server 2022 containerd 第 1 代映像,搭配仅支持第 1 代的 VM 大小 |
是的 | 迁移到 2025 第 1 代Windows Server。 |
标准 Windows Server 2022 containerd 第 1 代映像,支持第 2 代的 VM 大小 |
是的 | 迁移到 2025 第 2 代Windows Server。 |
适用于支持第 2 代的 VM 大小的标准 Windows Server 2022 containerd 第 2 代映像 |
是的 | 迁移到 2025 第 2 代Windows Server。 |
将现有Windows Server 2022节点池更新为 2025 Windows Server
使用
Windows2025命令将节点池 OS SKU 更新为az aks nodepool update。az aks nodepool update \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --os-sku Windows2025 \ --enable-fips-image使用
kubectl describe node命令验证更新节点池中的节点是否使用Windows2025OS SKU 和 Windows Server 2025 映像。kubectl describe node <node-name>以下精简示例输出显示了
Windows2025OS SKU 标签和 Windows Server 2025 OS 映像:Labels: kubernetes.azure.com/os-sku=Windows2025 kubernetes.io/os=windows ... System Info: OS Image: Windows Server 2025 Datacenter Container Runtime Version: containerd://2.0.4+azure
手动迁移到新节点池
手动迁移使用新的节点池,而不是更新现有节点池。 对于不支持就地迁移的 Windows Server 操作系统版本迁移,或者当源配置不支持就地迁移时,请使用手动迁移。 若要手动迁移,请使用所需的Windows Server OS 版本创建新的节点池,并将工作负荷移动到新的节点池。
将新节点池添加到现有群集
将具有所需 OS 版本的节点池添加到现有群集:
- 使用 CLI 将 Windows 节点池添加到 现有群集。
- 使用门户将 Windows 节点池添加到 现有群集。
- 使用 PowerShell 将 Windows 节点池添加到 现有群集。
- 使用 Terraform 将 Windows 节点池添加到 现有群集。
Windows Server 2025 节点池需要已启用 FIPS 的映像。 添加 Windows Server 2025 节点池时,请包括--enable-fips-image(Azure CLI)或-EnableFIPS(Azure PowerShell)。
更新 YAML 文件
节点选择器是在 Windows 节点上放置 Windows Pod 的最常见和推荐的选项。
通过添加以下注释将节点选择器添加到 YAML 文件:
nodeSelector: "kubernetes.io/os": windows该注释会查找任何可用的 Windows 节点并将 pod 放置在该节点上(遵循所有其他调度规则)。 升级操作系统版本时,需要确保放置在 Windows 节点和运行最新操作系统版本的节点上。 为此,一个选项是使用不同的批注。 更新
<OSSKU>以匹配您所需的 Windows 操作系统版本,例如Windows2025。nodeSelector: "kubernetes.azure.com/os-sku": <OSSKU>更新 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.33.12 10.240.0.4 <none> Ubuntu 22.04.5 LTS 5.15.0-1116-azure containerd://1.7.33-1 akspoolws000000 Ready agent 3h15m v1.33.12 10.240.0.208 <none> Windows Server 2022 Datacenter 10.0.20348.825 containerd://1.6.6+azure akspoolws000001 Ready agent 3h17m v1.33.12 10.240.0.239 <none> Windows Server 2022 Datacenter 10.0.20348.825 containerd://1.6.6+azure akspoolws000002 Ready agent 3h17m v1.33.12 10.240.1.14 <none> Windows Server 2022 Datacenter 10.0.20348.825 containerd://1.6.6+azure akswspool000000 Ready agent 5h37m v1.33.12 10.240.0.115 <none> Windows Server 2025 Datacenter 10.0.26100.32995 containerd://2.0.4+azure akswspool000001 Ready agent 5h37m v1.33.12 10.240.0.146 <none> Windows Server 2025 Datacenter 10.0.26100.32995 containerd://2.0.4+azure akswspool000002 Ready agent 5h37m v1.33.12 10.240.0.177 <none> Windows Server 2025 Datacenter 10.0.26100.32995 containerd://2.0.4+azure使用
kubectl apply命令将更新后的 YAML 文件应用到现有工作负载,并指定 YAML 文件的名称。kubectl apply -f <filename>以下示例输出显示部署的“已配置”状态:
deployment.apps/sample configured service/sample unchanged此时,AKS 会启动终止现有 Pod 的过程,并使用批注将新 Pod 部署到节点
nodeSelector。使用
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 密钥保管库 上访问该机密,节点使用允许节点访问资源的托管标识。 由于托管标识按节点池配置,并且 Pod 现在驻留在新节点池中,因此需要更新该配置。 有关详细信息,请参阅为 Azure Kubernetes 服务 (AKS) 群集上的 Windows Server 节点启用组托管服务帐户 (GMSA)。
访问其他 Azure 资源时,同一原则适用于任何其他 Pod 或节点池的托管标识。 需要更新托管标识提供的任何访问权限以反映新的节点池。 若要查看更新和登录活动,请参阅如何查看托管标识活动。
后续步骤
在本文中,你了解了如何升级 AKS 上的 Windows 工作负荷的 OS 版本。 若要了解有关 AKS 上的 Windows 工作负载的更多信息,请参阅在 Azure Kubernetes 服务 (AKS) 上部署 Windows 容器应用程序。