通过蓝绿升级,可以在维护现有蓝色节点池的同时,创建具有新配置的并行绿色节点池,从而并行升级 AKS 节点池。 通过此策略,可以在切换流量之前测试和验证新配置,并能够在出现问题时快速回滚。
本文介绍何时使用蓝绿升级、过程工作原理、配置选项以及使用此升级策略的注意事项。
何时使用蓝绿升级
注释
请记住,蓝绿升级需要在升级过程中将节点容量提高一倍,这可能导致成本和资源需求增加。
在以下情况下,请考虑蓝绿升级:
- 需要逐批对工作负荷进行精细测试和验证。
- 在切换生产流量之前,需要验证新的节点配置。
- 您希望具备无需重新预配节点的即时回滚能力。
- 正在升级不能容忍中断的关键生产工作负载。
- 需要测试应用程序与新的 Kubernetes 版本的兼容性。
如果当前使用手动蓝绿部署过程进行节点池升级,并且想要自动执行此工作流,请考虑改用 AKS 蓝绿节点池升级。 有关手动蓝绿升级过程的详细信息,请参阅 手动蓝绿节点池升级。
何时使用标准滚动升级
在以下方案中,标准滚动升级可能更合适:
- 具有停机容错的开发或测试环境。
- 成本敏感的部署暂时增加一倍是不可接受的。
- 具有良好中断处理的简单无状态应用程序。
- 具有有限可用配额或容量的环境。
先决条件
- 用于将节点池容量翻倍的足够配额。
- Azure CLI版本 2.64.0 或更高版本。 使用
az --version命令查找版本。 如果需要安装或升级,请参阅 Install Azure CLI。 -
aks-previewAzure CLI 扩展已安装并更新到最新版本。 - API 版本
2025-08-02-preview或更高版本。 - 配置了群集自动缩放程序 (建议但不需要)。
安装 aks-preview Azure CLI 扩展
重要
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
使用aks-preview和az extension add命令安装或更新az extension update扩展。
# Install the aks-preview extension
az extension add --name aks-preview
# Update the aks-preview extension
az extension update --name aks-preview
支持蓝绿升级的功能
蓝绿升级目前支持以下功能:
- Kubernetes 版本升级
- 节点映像升级
- 系统和用户节点池
- 手动提交和回滚控件
- 群集自动缩放程序
- 可用性区域
- PodDisruptionBudgets
- 自动升级通道 和 计划内维护时段
- AKS 通信管理器
蓝绿升级限制和注意事项
蓝绿升级当前不支持以下功能:
- 自动回滚
- 虚拟机(VM)池
- 最大不可用 设置
- 无法透支的节点行为 和 maxBlockedNodes 设置
使用蓝绿升级时,请记住以下注意事项:
| 资源要求 | 复杂性注意事项 | 时间因素 |
|---|---|---|
| • 在升级过程中需要节点容量增加一倍,从而导致基础结构成本增加。 • Azure订阅中需要额外的计算配额,以适应节点的临时翻倍。 • 在高峰使用期间,可能会遇到区域容量限制。 |
• 需要仔细规划有状态工作负荷,以确保数据在迁移期间的一致性。 • 在过渡期间,需要对蓝节点池和绿色节点池进行额外的监视。 |
• 与就地升级相比,整体升级持续时间更长。 • 验证期间增加了时间,以便在最终切换之前进行准备。 |
蓝绿升级工作流
蓝绿升级过程为节点池版本之间的安全转换创建并行环境。 在 验证后,您可以升级并将其提交到新的 绿色 池,或者如果遇到问题,可以 升级并回滚到原来的 蓝色 池。
升级和提交场景
下图演示了升级和提交工作流:
升级和提交过程如下所示:
- 隔离 蓝色 节点:现有 蓝色 节点标记为不可调度。
- 创建 绿色 池:使用更新的配置预配新的 绿色 节点池。
- 并行作业:蓝色池和绿色池同时运行。
- 逐步迁移:工作负荷逐渐从 蓝色 节点中排空,并分批重新安排到 绿色 节点。
- 验证 绿色 池:在迁移期间监视和测试新池上的工作负荷。
- 完成转换:在最终验证期间后, 将删除蓝色 池, 绿色 变为主要池。
升级和回滚方案
下图演示了升级和回滚工作流:
升级和回滚过程如下所示:
- 隔离 蓝色 节点:现有 蓝色 节点标记为不可调度。
- 创建 绿色 池:使用更新的配置预配新的 绿色 节点池。
- 并行作业:蓝色池和绿色池同时运行。
- 检测问题:在 绿色 池的验证过程中识别问题。
- 执行回滚:解除隔离 蓝色 节点,排出 绿色 池,并将工作负荷迁移回 蓝色 节点。
- 还原状态: 删除绿色 池,系统将返回到原始配置。
选择升级策略
创建或升级 AKS 节点池时,可以指定要使用的升级策略(upgradeStrategy)。 可用的策略包括:
| 策略 | 说明 |
|---|---|
Rolling(默认值) |
标准滚动升级,节点依次更新。 |
BlueGreen |
使用新配置创建并行 绿色 池,同时维护现有的 蓝色 节点池。 |
自定义蓝绿升级属性
可以自定义以下蓝绿升级属性(NodePoolBlueGreenUpgradeSettings):
| 财产 | 说明 | 允许的值 | 默认值 |
|---|---|---|---|
drainBatchSize |
在升级过程中,每个批次中要清空的节点数量或百分比。 从升级开始时的蓝色节点总数计算百分比。 小数节点向上舍入。 | 整数(例如)5或百分比(例如)。 50%
必须是非零值。 |
10% |
drainTimeoutInMinutes |
在升级失败之前,等待 Pod 在每次节点上正常终止的最长时间(以分钟为单位)。 在此等待期间遵守 Pod 中断预算。 如果超出,升级将失败。 | 介于 1 和 1440 之间的整数(24 小时)。 |
30 分钟 |
batchSoakDurationInMinutes |
在排空节点批之间暂停时间(以分钟为单位),以便进行观察和验证。 | 介于 0 和 1440 之间的整数(24 小时)。 |
15 分钟 |
finalSoakDurationInMinutes |
删除旧节点前,等待所有节点都排空后的时间(以分钟为单位)。 在确认升级之前,提供最终验证阶段。 回滚操作仅在此最终的试用期内可用。 此期限到期后,蓝色池将被删除,无法再回滚。 | 介于 0 和 10080 之间的整数(最多七天)。 |
60 分钟 |
使用默认蓝绿升级设置创建节点池
使用命令
az aks nodepool add,并将--upgrade-strategy参数设置为bluegreen,以创建具有默认蓝绿升级策略和设置的节点池。 以下示例在资源组myNodePool中的 AKS 群集myAKSCluster中创建一myResourceGroup个名为的新节点池:az aks nodepool add \ --name myNodePool \ --cluster-name myAKSCluster \ --resource-group myResourceGroup \ --upgrade-strategy bluegreen
使用自定义蓝绿升级设置创建节点池
使用
az aks nodepool add命令,设置--upgrade-strategy参数为bluegreen,创建具有自定义蓝绿升级设置的节点池,并应用所需的任何自定义蓝绿升级设置。 以下示例使用自定义蓝绿升级设置在资源组myNodePool中的 AKS 群集myAKSCluster中创建名为myResourceGroup的新节点池:az aks nodepool add \ --name myNodePool \ --cluster-name myAKSCluster \ --resource-group myResourceGroup \ --upgrade-strategy bluegreen \ --drain-timeout-bg 5 \ --batch-soak-duration 5 \ --drain-batch-size 50% \ --final-soak-duration 180
为现有节点池启动蓝绿升级
重要
恢复暂停的升级时,可以更新蓝绿设置,但无法更改升级策略或 Kubernetes 版本。
启动为现有节点池的蓝绿升级,使用命令
az aks nodepool upgrade并将参数--kubernetes-version设置为所需版本。 对于已使用蓝绿策略的节点池或尚未配置蓝绿策略的节点池,可以启动蓝绿升级。 以下示例演示了这两种方案:# Start a blue-green upgrade for an existing node pool already using blue-green strategy az aks nodepool upgrade \ --name myNodePool \ --cluster-name myAKSCluster \ --resource-group myResourceGroup \ --kubernetes-version <kubernetes-version> # Start a blue-green upgrade for an existing node pool not yet using blue-green strategy az aks nodepool upgrade \ --name myNodePool \ --cluster-name myAKSCluster \ --resource-group myResourceGroup \ --kubernetes-version <kubernetes-version> \ --upgrade-strategy bluegreen
暂停或取消蓝绿升级
使用
az aks nodepool operation-abort命令暂停或取消正在进行的蓝绿升级。 以下示例展示如何暂停或取消资源组myNodePool中 AKS 群集myAKSCluster内命名为myResourceGroup的节点池的蓝绿升级:az aks nodepool operation-abort \ --name myNodePool \ --cluster-name myAKSCluster \ --resource-group myResourceGroup
回滚蓝绿升级
取消正在进行的蓝绿升级后,可以使用命令 az aks nodepool rollback 启动回滚。
回滚仅在最终浸泡期间可用,如 finalSoakDurationInMinutes 属性中所述。
以下示例对资源组myNodePool中 AKS 群集myAKSCluster中命名myResourceGroup的节点池执行蓝绿升级的回滚:
az aks nodepool rollback \
--name myNodePool \
--cluster-name myAKSCluster \
--resource-group myResourceGroup
常见问题 (FAQ)
蓝绿升级是否支持该 maxUnavailable 设置?
否,此设置 maxUnavailable 不适用于蓝绿升级。
绿色 池是通过复制整个 蓝色 池创建的,以确保所有节点在升级过程中保持可用。
哪些 Kubernetes 版本与蓝绿升级兼容?
蓝绿升级适用于所有 支持 AKS 的 Kubernetes 版本,包括社区支持的版本和 长期支持(LTS)版本,只要使用 API 版本 2025-08-02-preview 或更高版本。
是否可以将自动安全更新通道与蓝绿升级结合使用?
是的,只要节点池的升级策略配置为使用蓝绿。 配置后,安全修补程序遵循蓝绿升级过程,而不是默认滚动更新机制。
在蓝绿升级过程中,永久性卷会发生什么情况?
永久性卷仍可访问。 Pod 已正常清空并重新计划,并维护其卷附件。
是否可以同时跨多个节点池执行蓝绿升级?
是的,不同的节点池可以并行进行蓝绿升级,但每个池只能有一个活动升级。 目前您无法控制多个池中的升级顺序。
蓝绿升级如何处理特定于节点的配置,例如污点和标签?
所有节点配置(包括污点、标签和注释)都会自动复制到 绿色 池。
蓝绿升级的成本影响是什么?
在升级窗口期内,这两个节点池都会收费,因此请确保在过渡期间做好成本临时翻倍的计划。
容量故障期间会发生什么情况?
预配 绿色 池时发生容量故障时,升级失败, 蓝色 池不受影响。 在有足够的容量可用或选择回滚后,可以重试升级。
回滚期间会发生什么情况?
如果启动回退时绿色节点数小于或等于蓝色节点数,则会删除绿色节点,并且取消隔离蓝色节点,使其恢复正常运行。
相关内容
若要详细了解 AKS 中的节点池升级,请参阅以下文章:
- 在 Azure Kubernetes 服务 (AKS) 中回滚节点池版本
- 为Azure Kubernetes 服务 (AKS)节点池配置滚动升级
- Azure Kubernetes 服务 (AKS) 中的自动升级节点操作系统映像