蓝绿升级使你能够升级 AKS 节点池,方法是使用更新的配置(Kubernetes 和节点映像版本)将新的 绿色 节点添加到现有节点池,而原始 蓝 节点将继续运行。 通过此策略,可以在投入使用新版本之前测试和验证新配置,并且在出现问题时能够快速回滚。
本文介绍何时使用蓝绿升级、过程工作原理、配置选项以及使用此升级策略的注意事项。
何时使用蓝绿升级
注释
请记住,蓝绿升级需要在升级过程中将节点容量提高一倍,这可能导致成本和资源需求增加。
在以下情况下,请考虑蓝绿升级:
- 需要逐批对工作负荷进行精细测试和验证。
- 在切换生产流量之前,需要验证新的节点配置。
- 您希望具备无需重新预配节点的即时回滚能力。
- 正在升级不能容忍中断的关键生产工作负载。
- 需要测试应用程序与新的 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 通信管理器
蓝绿升级限制和注意事项
蓝绿升级当前不支持以下功能:
- 自动回滚
- 对 Kubernetes 和节点映像版本之外的更新使用蓝色绿色策略(例如证书轮换、kubelet/os 配置更新等)
- 虚拟机(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 和节点映像版本以外的节点池更新?
否,蓝绿升级策略目前特定于 Kubernetes 和节点映像版本升级。 其他更改(如证书轮换或 kubelet 和 OS 配置更改)无法通过蓝绿升级策略执行。
哪些 Kubernetes 版本与蓝绿升级兼容?
蓝绿升级适用于所有 支持 AKS 的 Kubernetes 版本,包括社区支持的版本和 长期支持(LTS)版本,只要使用 API 版本 2025-08-02-preview 或更高版本。
是否可以将自动安全更新通道与蓝绿升级结合使用?
是的,只要节点池的升级策略配置为使用蓝绿。 配置后,安全修补程序遵循蓝绿升级过程,而不是默认滚动更新机制。
在蓝绿升级过程中,永久性卷会发生什么情况?
永久性卷仍可访问。 Pod 已正常清空并重新计划,并维护其卷附件。
是否可以同时跨多个节点池执行蓝绿升级?
是的,不同的节点池可以并行进行蓝绿升级,但每个池只能有一个活动升级。 目前您无法控制多个池中的升级顺序。
蓝绿升级如何处理特定于节点的配置,例如污点和标签?
所有节点配置(包括污点、标签和注释)都会自动复制到 绿色 池。
蓝绿升级的成本影响是什么?
升级时段内,会同时为原始 蓝色 节点和新 绿色 节点付费,因此请确保在过渡期间规划临时成本翻倍。
容量故障期间会发生什么情况?
添加 绿色 节点时发生容量故障时,升级失败, 蓝色 节点不受影响。 在有足够的容量可用或选择回滚后,可以重试升级。
回滚期间会发生什么情况?
如果启动回退时绿色节点数小于或等于蓝色节点数,则会删除绿色节点,并且取消隔离蓝色节点,使其恢复正常运行。
相关内容
若要详细了解 AKS 中的节点池升级,请参阅以下文章:
- 在 Azure Kubernetes 服务 (AKS) 中回滚节点池版本
- 为Azure Kubernetes 服务 (AKS)节点池配置滚动升级
- Azure Kubernetes 服务 (AKS) 中的自动升级节点操作系统映像