升级 OS 版本以满足 Azure Kubernetes 服务 (AKS) 上的 Windows 工作负荷
在 Azure Kubernetes 服务 (AKS) 上升级正在运行的 Windows 工作负载的 OS 版本时,需要部署新的节点池以确保每个节点池上的 Windows 版本匹配。 本文介绍在 AKS 上升级 Windows 工作负载 OS 版本的步骤。 此示例侧重展示从 Windows Server 2019 升级到 Windows Server 2022,但从任意 Windows Server 版本升级到另一个版本都可以遵守此过程。
Windows Server OS 版本支持
发布新版本的 Windows Server 操作系统时,AKS 需要支持新版本,并建议升级到最新版本,以落实修补程序、改进和新功能。 从 Windows Server 2022 开始,AKS 对每个 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 节点池添加到现有群集
更新 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 服务 (AKS) 群集上的 Windows Server 节点启用组托管服务帐户 (GMSA)。
访问其他 Azure 资源时,同一原则适用于任何其他 Pod 或节点池的托管标识。 需要更新托管标识提供的任何访问权限以反映新的节点池。 若要查看更新和登录活动,请参阅如何查看托管标识活动。
后续步骤
在本文中,你了解了如何升级 AKS 上的 Windows 工作负荷的 OS 版本。 若要了解有关 AKS 上的 Windows 工作负载的更多信息,请参阅在 Azure Kubernetes 服务 (AKS) 上部署 Windows 容器应用程序。