Azure Kubernetes Service (AKS) 中的蓝绿节点池升级(预览版)

通过蓝绿升级,可以在维护现有蓝色节点池的同时,创建具有新配置的并行绿色节点池,从而并行升级 AKS 节点池。 通过此策略,可以在切换流量之前测试和验证新配置,并能够在出现问题时快速回滚。

本文介绍何时使用蓝绿升级、过程工作原理、配置选项以及使用此升级策略的注意事项。

何时使用蓝绿升级

注释

请记住,蓝绿升级需要在升级过程中将节点容量提高一倍,这可能导致成本和资源需求增加。

在以下情况下,请考虑蓝绿升级:

  • 需要逐批对工作负荷进行精细测试和验证。
  • 在切换生产流量之前,需要验证新的节点配置。
  • 您希望具备无需重新预配节点的即时回滚能力。
  • 正在升级不能容忍中断的关键生产工作负载。
  • 需要测试应用程序与新的 Kubernetes 版本的兼容性。

如果当前使用手动蓝绿部署过程进行节点池升级,并且想要自动执行此工作流,请考虑改用 AKS 蓝绿节点池升级。 有关手动蓝绿升级过程的详细信息,请参阅 手动蓝绿节点池升级

何时使用标准滚动升级

在以下方案中,标准滚动升级可能更合适:

  • 具有停机容错的开发或测试环境。
  • 成本敏感的部署暂时增加一倍是不可接受的。
  • 具有良好中断处理的简单无状态应用程序。
  • 具有有限可用配额或容量的环境。

先决条件

安装 aks-preview Azure CLI 扩展

重要

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

使用aks-previewaz 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

支持蓝绿升级的功能

蓝绿升级目前支持以下功能:

蓝绿升级限制和注意事项

蓝绿升级当前不支持以下功能:

使用蓝绿升级时,请记住以下注意事项:

资源要求 复杂性注意事项 时间因素
* 在升级过程中需要节点容量增加一倍,从而导致基础结构成本增加。
* Azure订阅中需要额外的计算配额,以适应节点的临时翻倍。
* 在高峰使用期间,可能会遇到区域容量限制。
* 需要仔细规划有状态工作负载,以确保数据在迁移期间保持一致性。
* 在过渡期间,需要对蓝节点池和绿色节点池进行额外的监视。
* 与就地升级相比,整体升级持续时间更长。
* 验证期会在最终切换之前增加时间。

蓝绿升级工作流

蓝绿升级过程为节点池版本之间的安全转换创建并行环境。 在 验证后,您可以升级并将其提交到新的 绿色,或者如果遇到问题,可以 升级并回滚到原来的 蓝色

升级和提交场景

下图演示了升级和提交工作流:

显示升级和提交情景工作流的图示。

升级和提交过程如下所示:

  1. 隔离 蓝色 节点:现有 蓝色 节点标记为不可调度。
  2. 创建 绿色:使用更新的配置预配新的 绿色 节点池。
  3. 并行作业蓝色池绿色池同时运行。
  4. 逐步迁移:工作负荷逐渐从 蓝色 节点中排空,并分批重新安排到 绿色 节点。
  5. 验证 绿色:在迁移期间监视和测试新池上的工作负荷。
  6. 完成转换:在最终验证期间后, 将删除蓝色 池, 绿色 变为主要池。

升级和回滚方案

下图演示了升级和回滚工作流:

显示升级和回滚方案工作流的关系图。

升级和回滚过程如下所示:

  1. 隔离 蓝色 节点:现有 蓝色 节点标记为不可调度。
  2. 创建 绿色:使用更新的配置预配新的 绿色 节点池。
  3. 并行作业蓝色池绿色池同时运行。
  4. 检测问题:在 绿色 池的验证过程中识别问题。
  5. 执行回滚:解除隔离 蓝色 节点,排出 绿色 池,并将工作负荷迁移回 蓝色 节点。
  6. 还原状态删除绿色 池,系统将返回到原始配置。

选择升级策略

创建或升级 AKS 节点池时,可以指定要使用的升级策略(upgradeStrategy)。 可用的策略包括:

策略 说明
Rolling(默认值) 标准滚动升级,节点依次更新。
BlueGreen 使用新配置创建并行 绿色 池,同时维护现有的 蓝色 节点池。

自定义蓝绿升级属性

可以自定义以下蓝绿升级属性(NodePoolBlueGreenUpgradeSettings):

财产 说明 允许的值 默认值
drainBatchSize 在升级过程中,每个批次中要清空的节点数量或百分比。 从升级开始时的蓝色节点总数计算百分比。 小数节点向上舍入。 整数(例如)5或百分比(例如)。 50% 必须是非零值 10%
drainTimeoutInMinutes 在升级失败之前,等待 Pod 在每次节点上正常终止的最长时间(以分钟为单位)。 在此等待期间遵守 Pod 中断预算。 如果超出,升级将失败。 介于 11440 之间的整数(24 小时)。 30 分钟
batchSoakDurationInMinutes 在排空节点批之间暂停时间(以分钟为单位),以便进行观察和验证。 介于 01440 之间的整数(24 小时)。 15 分钟
finalSoakDurationInMinutes 删除旧节点前,等待所有节点都排空后的时间(以分钟为单位)。 在确认升级之前,提供最终验证阶段。 回滚操作仅在此最终的试用期内可用。 此期限到期后,蓝色池将被删除,无法再回滚。 介于 010080 之间的整数(最多七天)。 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 中的节点池升级,请参阅以下文章: