使用 Azure Kubernetes 舰队管理器跨多个群集协调更新
管理具有大量群集的 Kubernetes 舰队的平台管理员经常会在以安全且可预测的方式跨多个群集暂存更新时遇到问题。 为了解决此难题,Kubernetes 舰队管理器(舰队)允许使用更新运行、阶段、组和策略跨多个群集协调更新。
先决条件
请阅读有关此功能的概念性概述,其中提供了有关本文档中引用的更新策略、运行、阶段和组的说明。
需要具有一个或多个成员群集的舰队资源。 如果没有,请按照快速入门创建舰队资源,并以成员身份加入 Azure Kubernetes 服务 (AKS) 群集。
设置以下环境变量:
export GROUP=<resource-group>
export FLEET=<fleet-name>
如果使用的是 Azure CLI,则需要安装 Azure CLI 版本 2.53.1 或更高版本。 若要安装或升级,请参阅安装 Azure CLI。
需要 fleet
Azure CLI 扩展,可以使用命令 az extension add
安装该扩展。
az extension add --name fleet
运行 az extension update
命令,更新到最新发布的扩展版本:
az extension update --name fleet
创建更新运行
更新运行支持两种群集更新顺序选项:
- 逐个:如果你不想控制群集的更新顺序,
one-by-one
提供了一种简单的方法,你可借此方法按顺序逐一更新舰队的所有成员群集。
- 使用更新组和阶段控制群集顺序 - 如果要控制群集更新顺序,则可以在更新组和更新阶段中组织成员群集。 可以将此顺序以更新策略的形式存储为模板。 之后可以使用更新策略创建更新运行,而不必在每次需要创建更新运行时定义顺序。
逐个更新所有群集
在 Azure 门户中,导航到 Azure Kubernetes 舰队管理器资源。
从服务菜单的“设置”下,选择“多群集更新”>“创建运行”。
输入更新运行的名称,然后将更新类型选为“逐个”。
为“更新范围”选择以下选项之一:
- 控制平面和节点池的 Kubernetes 版本
- 仅群集控制平面的 Kubernetes 版本
- 仅节点映像版本
为“节点映像”选择以下选项之一:
- 最新映像:将更新运行中的每个 AKS 群集更新为该群集在其区域内可用的最新映像。
- 一致映像:更新运行中的 AKS 群集有可能跨多个区域,而这些区域的最新可用节点映像可能不同(有关更多信息,请查看发布跟踪器)。 更新运行会在所有这些区域中选取最新的共同映像,以实现一致性。
选择“创建”以创建更新运行。
使用 az fleet updaterun create
命令创建更新运行,并为 --upgrade-type
和 --node-image-selection
标记选择值。 以下命令会创建一个更新运行,该运行用于更新控制平面和节点池的 Kubernetes 版本,并使用其区域中每个群集可用的最新节点映像。
--upgrade-type
标志支持以下值:
Full
升级控制平面和节点池的 Kubernetes 版本以及节点映像。
ControlPlaneOnly
仅升级群集控制平面的 Kubernetes 版本。
NodeImageOnly
仅升级节点映像。
--node-image-selection
标志支持以下值:
Latest
:将更新运行中的每个 AKS 群集更新为该群集在其区域内可用的最新映像。
Consistent
:更新运行中的 AKS 群集有可能跨多个区域,而这些区域的最新可用节点映像可能不同(有关更多信息,请查看发布跟踪器)。 更新运行会在所有这些区域中选取最新的共同映像,以实现一致性。
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-1 --upgrade-type Full --kubernetes-version 1.26.0 --node-image-selection Latest
使用 az fleet updaterun start
命令启动更新运行。
az fleet updaterun start --resource-group $GROUP --fleet-name $FLEET --name run-1
分配群集以更新组和阶段
更新组和阶段可以更好地控制在你更新群集时更新运行所遵循的顺序。 在更新阶段中,更新将并行应用于所有不同的更新组。 在更新组中,成员群集按顺序更新。
可以通过以下两种方式之一将成员群集分配给特定的更新组:
在将成员群集添加到舰队时分配给组
在 Azure 门户中,导航到 Azure Kubernetes 舰队管理器资源。
从服务菜单的“设置”下,选择“成员群集”>“添加”。
选择要添加的群集,然后选择“下一步:查看 + 添加”。
输入要将群集分配到的更新组的名称,然后选择“添加”。
使用 az fleet member create
命令将成员群集添加到舰队时,将成员群集分配给更新组,并将 --update-group
标志设置为更新组的名称。
az fleet member create --resource-group $GROUP --fleet-name $FLEET --name member1 --member-cluster-id $AKS_CLUSTER_ID --update-group group-1a
将现有舰队成员分配给更新组
在 Azure 门户中,导航到 Azure Kubernetes 舰队管理器资源。
从服务菜单的“设置”下,选择“成员群集”。
选择要分配给更新组的群集,然后选择“分配更新组”
输入要将群集分配到的更新组的名称,然后选择“分配”。
注意
一个舰队成员只能加入一个更新组,但一个更新组内可以有多个舰队成员。
更新组本身不是一种单独的资源类型。 更新组只是表示来自舰队成员的引用的字符串。 因此,如果删除了所有引用共同更新组的舰队成员,那么该特定更新组也将不复存在。
定义更新运行和阶段
可以使用更新阶段定义更新运行,以按顺序将更新应用到不同的更新组。 例如,第一个更新阶段可能会更新测试环境成员群集,第二个更新阶段稍后将更新生产环境成员群集。 还可以指定各个更新阶段之间的等待时间。
在 Azure 门户中,导航到 Azure Kubernetes 舰队管理器资源。
从服务菜单的“设置”下,选择“多群集更新”>“创建运行”。
输入更新运行的名称,然后选择“阶段”作为更新顺序类型。
选择“创建阶段”,然后输入阶段名称和阶段之间的等待时间。
选择要在此阶段中加入的更新组。 如果要按特定顺序更新更新组,还可以指定更新组的顺序。 完成操作后,选择“创建”。
为“更新范围”选择以下选项之一:
- 控制平面和节点池的 Kubernetes 版本
- 仅群集控制平面的 Kubernetes 版本
- 仅节点映像版本
为“节点映像”选择以下选项之一:
- 最新映像:将更新运行中的每个 AKS 群集更新为该群集在其区域内可用的最新映像。
- 一致映像:更新运行中的 AKS 群集有可能跨多个区域,而这些区域的最新可用节点映像可能不同(有关更多信息,请查看发布跟踪器)。 更新运行会在所有这些区域中选取最新的共同映像,以实现一致性。
选择“创建”以创建更新运行。
每次创建更新运行时都指定阶段及其顺序可能会变得重复且繁琐。 更新策略可通过允许存储更新运行模板来简化这一过程。 有关详细信息,请参阅更新策略的创建和使用。
在“多群集更新”菜单中,选择更新运行,然后选择“启动”。
创建 JSON 文件以定义更新运行的阶段和组。 下面是来自阶段文件 (example-stages.json) 的输入示例:
{
"stages": [
{
"name": "stage1",
"groups": [
{
"name": "group-1a"
},
{
"name": "group-1b"
},
{
"name": "group-1c"
}
],
"afterStageWaitInSeconds": 3600
},
{
"name": "stage2",
"groups": [
{
"name": "group-2a"
},
{
"name": "group-2b"
},
{
"name": "group-2c"
}
]
}
]
}
使用 az fleet updaterun create
命令创建更新运行,其中 --stages
标志设置为 JSON 文件的名称,--upgrade-type
和 --node-image-selection
标志设置为所选值。 以下命令会创建一个更新运行,该运行用于更新控制平面和节点池的 Kubernetes 版本,并使用其区域中每个群集可用的最新节点映像。
--upgrade-type
标志支持以下值:
Full
升级控制平面和节点池的 Kubernetes 版本以及节点映像。
ControlPlaneOnly
仅升级群集控制平面的 Kubernetes 版本。
NodeImageOnly
仅升级节点映像。
--node-image-selection
标志支持以下值:
Latest
:将更新运行中的每个 AKS 群集更新为该群集在其区域内可用的最新映像。
Consistent
:更新运行中的 AKS 群集有可能跨多个区域,而这些区域的最新可用节点映像可能不同(有关更多信息,请查看发布跟踪器)。 更新运行会在所有这些区域中选取最新的共同映像,以实现一致性。
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-1 --upgrade-type Full --kubernetes-version 1.26.0 --node-image-selection Latest --stages example-stages.json
使用 az fleet updaterun start
命令启动更新运行。
az fleet updaterun start --resource-group $GROUP --fleet-name $FLEET --name run-1
使用更新策略创建更新运行
创建更新运行要求你每次指定阶段、组、顺序。 更新策略可通过允许存储更新运行模板来简化这一过程。
注意
可以通过同一更新策略创建多个更新运行,并使用唯一的名称。
可以使用以下方法之一创建更新策略:
在创建更新运行时保存更新策略
新建更新策略,然后在创建更新运行时引用
导航到“多群集更新”页面,然后选择“策略”>“创建策略”:
配置更新策略详细信息,然后选择“创建”。
创建新的后续更新运行时引用更新策略:
使用 az fleet updatestrategy create
命令新建更新策略,并将 --stages
标志设置为 JSON 文件的名称。
az fleet updatestrategy create --resource-group $GROUP --fleet-name $FLEET --name strategy-1 --stages example-stages.json
使用 az fleet updaterun create
命令创建更新运行,并将 --update-strategy-name
标志设置为更新策略的名称。
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-5 --update-strategy-name strategy-1 --upgrade-type NodeImageOnly --node-image-selection Consistent
管理更新运行
以下部分介绍如何使用 Azure 门户和 Azure CLI 管理更新运行。
在舰队资源的“多群集更新”页上,可以启动处于“未启动”或“失败”状态的更新运行:
在舰队资源的“多群集更新”选项卡下,可以停止当前正在运行的更新运行:
在处于“未启动”、“失败”或“正在运行”状态的任何更新中,可以选择任何阶段并跳过更新:
同样,也可以在更新组或成员群集级别跳过升级。
可以使用 az fleet updaterun start
命令启动处于“未启动”或“失败”状态的更新运行:
az fleet updaterun start --resource-group $GROUP --fleet-name $FLEET --name <run-name>
可以使用 az fleet updaterun stop
命令停止当前正在运行的更新运行:
az fleet updaterun stop --resource-group $GROUP --fleet-name $FLEET --name <run-name>
可以使用 az fleet updaterun skip
命令在 --targets
标志中指定更新阶段或组来跳过更新阶段或组:
az fleet updaterun skip --resource-group $GROUP --fleet-name $FLEET --name <run-name> --targets Group:my-group-name Stage:my-stage-name
有关详细信息,请参阅有关更新运行状态和运行/阶段/组的跳过行为的概念性概述。
后续步骤
详细了解 Azure Kubernetes 舰队管理器。