你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure Kubernetes 舰队管理器跨多个群集协调更新
管理具有大量群集的 Kubernetes 舰队的平台管理员通常无法以安全且可预测的方式在多个群集之间暂存更新。 为了解决此难题,Kubernetes 舰队管理器(舰队)允许使用更新运行、阶段、组和策略跨多个群集协调更新。
先决条件
请阅读有关此功能的概念性概述,其中提供了有关本文档中引用的更新策略、运行、阶段和组的说明。
必须具有包含一个或多个成员群集的舰队资源。 如果没有,请按照快速入门创建舰队资源,并将 Azure Kubernetes 服务 (AKS) 群集加入为成员。 本演练演示了一种舰队资源,其中以五个 AKS 成员群集作为示例。
设置以下环境变量:
export GROUP=<resource-group>
export FLEET=<fleet-name>
如果要按照本文中的 Azure CLI 说明操作,则需要安装 Azure CLI 版本 2.53.1 或更高版本。 若要安装或升级,请参阅安装 Azure CLI。
你还需要 Azure CLI 扩展 fleet
,可以通过运行以下命令来安装该扩展:
az extension add --name fleet
运行以下命令以更新到已发布的最新扩展版本:
az extension update --name fleet
逐个更新所有群集
在 Azure Kubernetes 舰队管理器资源页上,转到“多群集更新”菜单,然后选择“创建”。
可以选择“逐个”或“阶段”。
对于“升级范围”,可以选择同时更新 Kubernetes 版本和节点映像版本,也可以只更新节点映像版本。
对于节点映像,可以使用以下选项:
- 最新:将更新运行中的每个 AKS 群集更新为该群集在其区域内可用的最新映像。
- 一致:更新运行中的 AKS 群集有可能跨多个区域,而这些区域的最新可用节点映像可能不同(有关更多信息,请查看发布跟踪器)。 更新运行会在所有这些区域中选取最新的共同映像,以实现一致性。
运行以下命令来逐个更新舰队的所有群集的 Kubernetes 版本和节点映像版本:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-1 --upgrade-type Full --kubernetes-version 1.26.0
注意
标志 --upgrade-type
支持值 Full
或 NodeImageOnly
。 Full
更新节点映像和 Kubernetes 版本。
--node-image-selection
支持 Latest
和 Consistent
值。
- 最新:将更新运行中的每个 AKS 群集更新为该群集在其区域内可用的最新映像。
- 一致:更新运行中的 AKS 群集有可能跨多个区域,而这些区域的最新可用节点映像可能不同(有关更多信息,请查看发布跟踪器)。 更新运行会在所有这些区域中选取最新的共同映像,以实现一致性。
运行以下命令,以便仅逐个更新舰队的所有群集的节点映像版本:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-2 --upgrade-type NodeImageOnly
按特定顺序更新群集
更新组和阶段可以更好地控制在你更新群集时更新运行所遵循的顺序。 在更新阶段中,更新将并行应用于所有不同的更新组;在更新组中,成员群集按顺序更新。
将群集分配到更新组
可以通过以下两种方式之一将成员群集分配到特定的更新组。
在 Azure Kubernetes 舰队管理器资源的页面上,转到“成员群集”。
指定成员群集应所属的更新组。
az fleet member create --resource-group $GROUP --fleet-name $FLEET --name member1 --member-cluster-id $AKS_CLUSTER_ID --update-group group-1a
在 Azure Kubernetes 舰队管理器资源的页面上,导航到“成员群集”。 选择所需的成员群集,然后选择“分配更新组”。
指定组名称,然后选择“分配”。
az fleet member update --resource-group $GROUP --fleet-name $FLEET --name member1 --update-group group-1a
注意
任何舰队成员只能加入一个更新组,但一个更新组内可以有多个舰队成员。
更新组本身不是一种单独的资源类型。 更新组只是表示来自舰队成员的引用的字符串。 因此,如果删除了所有引用共同更新组的舰队成员,那么该特定更新组也将不复存在。
定义更新运行和阶段
可以使用更新阶段定义更新运行,以便按顺序将更新应用程序应用到不同的更新组。 例如,第一个更新阶段可能会更新测试环境成员群集,第二个更新阶段随后将更新生产环境成员群集。 还可以指定各个更新阶段之间的等待时间。
在 Azure Kubernetes 舰队管理器资源的页面上,导航到“多群集更新”,然后选择“创建”。
选择“阶段”,然后选择“节点映像(最新版本) + Kubernetes 版本”或“节点映像(最新版本)”,具体取决于所需的升级范围。
在“阶段”下,选择“创建阶段”。 现在可以指定阶段名称和每个阶段结束之后要等待的持续时间。
选择要在此阶段中包含的更新组。
定义全部阶段并使用“上移”和“下移”控件对其进行排序后,继续创建更新运行。
在“多群集更新”菜单中,选择更新运行,然后选择“启动”。
运行以下命令来创建更新运行:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-3 --upgrade-type Full --kubernetes-version 1.26.0 --stages example-stages.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 start --resource-group $GROUP --fleet-name $FLEET --name run-3
使用更新策略创建更新运行
在上一节中,创建更新运行需要每次指定阶段、组及其顺序。 更新策略通过允许存储更新运行模板来简化这一过程。
注意
可以通过同一更新策略创建多个更新运行,并使用唯一的名称。
创建更新运行时,可以选择同时创建更新策略,从而有效地将运行保存为模板,供后续更新运行使用。
在创建更新运行时保存更新策略:
稍后可以在创建新的后续更新运行时引用创建的更新策略:
运行以下命令创建新的更新策略:
az fleet updatestrategy create --resource-group $GROUP --fleet-name $FLEET --name strategy-1 --stages example-stages.json
运行以下命令创建引用此策略的更新运行:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-4 --update-strategy-name strategy-1 --upgrade-type NodeImageOnly --node-image-selection Consistent