在本教程中,你将把现有节点迁移到 ACL;这是 五部分中的第三部分。 可以使用以下方法之一迁移现有节点:
- 删除现有节点池并添加新的 ACL 节点池。
- 执行就地操作系统 (OS) SKU 迁移。
本教程中的命令使用教程 1 中设置的环境变量 :使用 AKS 的 ACL 创建群集。
如果没有要迁移的任何现有节点,请跳到 下一教程。 在后面的教程中,了解如何在群集中启用遥测和监视并升级 ACL 节点。
先决条件
- 在前面的教程中,你已创建并部署了 ACL 群集。 如果尚未完成这些步骤并想要继续执行,请参阅 教程 1:使用 AKS 的 ACL 创建群集。
- Azure容器 Linux 需要 Azure CLI 2.86.0 或更高版本。 使用
az version命令查找版本。 若要升级到最新版本,请使用az upgrade命令。
Azure容器 Linux (ACL) 注意事项和限制
在开始之前,请了解以下有关 ACL 的注意事项和限制:
- ACL 自 AKS v1.34 起正式发布。
- ACL 需要有安全启动和 vTPM 的受信任启动。 非受信任的启动变体不可用。
- Arm64 上的 ACL 要求使用基于 Cobalt 的 (v6) SKU,以支持受信任启动兼容性。
-
NodeImage并且None是唯一受支持的 操作系统(OS)升级通道。Unmanaged和SecurityPatch由于不可变的/usr目录而与 ACL 不兼容。 - 不支持工件流式传输。
- 不支持 Pod Sandboxing。
- 不支持机密虚拟机(CVM)。
- 不支持第 1 代 VM。
- 不支持启用 FIPS 的节点。
添加 ACL 节点池并删除现有节点池
使用
az aks nodepool add命令添加新的 ACL 节点池。 使用--mode System新池可以充当系统代理池,这样就可以在下一步中删除原始节点池。 以下示例创建名为 aclsystem 的节点池,该池将三个节点添加到群集:az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name aclsystem \ --mode System \ --os-sku AzureContainerLinux \ --node-count 3示例输出:
{ "id": "/subscriptions/xxxxx/resourceGroups/myACLResourceGroup/providers/Microsoft.ContainerService/managedClusters/myACLCluster/nodePools/aclsystem", "name": "aclsystem", "osSku": "AzureContainerLinux", "provisioningState": "Succeeded" }使用
az aks nodepool delete命令删除现有节点池。az aks nodepool delete \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name <existing-node-pool-name>
就地 OS SKU 迁移
操作系统 SKU 就地迁移的限制
有几个设置会阻止 OS SKU 迁移请求。 若要确保迁移成功,请查看以下准则和限制:
- OS SKU 迁移功能无法通过 PowerShell 或 Azure 门户使用。
- OS SKU 迁移功能不支持重命名现有节点池。
- Ubuntu、Azure Linux 和 AzureContainerLinux 是唯一受支持的 Linux OS SKU 迁移目标。
- ACL 需要可信启动。 如果您的节点池中尚未启用这些功能,则在迁移到
--enable-secure-bootOS SKU 时,必须包含--enable-vtpm和AzureContainerLinux。 你的节点池的虚拟机大小还必须支持可信启动。 如果当前 VM 大小不支持它,则需要在迁移之前调整大小或重新创建具有受支持 VM 大小的节点池。 - 不支持第 1 代 VM。
- 启用了
UseGPUDedicatedVHD的 Ubuntu OS SKU 无法执行 OS SKU 迁移。 - 不支持机密虚拟机(CVM)。
- 不支持 Pod Sandboxing。
- 不支持 Windows OS SKU 迁移。
就地 OS SKU 迁移的先决条件
- 具有至少一个 Linux 节点池的现有 AKS 群集。
- 建议在迁移生产群集之前,通过在开发或过渡环境中 部署 ACL 群集 ,验证工作负荷在 ACL 上运行是否成功。
- 在生产群集上使用迁移功能之前,请确保该过程可以针对测试/开发环境正常运行。
- 确保你的 Pod 有足够的 Pod 中断预算 (PDB),以便 AKS 在升级期间在 VM 之间移动 Pod。
- 需要 Azure CLI 版本 2.61.0 或更高版本。 使用
az version命令查找版本。 若要升级到最新版本,请使用az upgrade命令。
使用就地 OS SKU 迁移迁移到 ACL
您可以通过更改节点池的 OS SKU,将现有的 Ubuntu 或 Azure Linux 节点池迁移到 ACL,这会通过标准的节点映像升级流程对群集执行滚动升级。 此方法不需要创建新的节点池;而是自动重新映像现有节点池。
Important
ACL 需要可信启动。 迁移到 --enable-secure-boot OS SKU 时,必须包含 --enable-vtpm 和 AzureContainerLinux。 你的节点池的虚拟机大小还必须支持可信启动。
使用 az aks nodepool update 命令将节点池的 OS SKU 迁移到 ACL。 此命令会触发节点池的重置映像。 OS SKU 更改会触发即时升级操作,这需要几分钟才能完成。
az aks nodepool update \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name <existing-node-pool-name> \
--os-sku AzureContainerLinux \
--enable-secure-boot \
--enable-vtpm
示例输出:
{
"id": "/subscriptions/xxxxx/resourceGroups/myACLResourceGroup/providers/Microsoft.ContainerService/managedClusters/myACLCluster/nodePools/nodepool1",
"name": "nodepool1",
"osSku": "AzureContainerLinux",
"provisioningState": "Succeeded"
}
Note
如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU。
验证 OS SKU 迁移
在测试群集上完成迁移后,请验证以下内容以确保迁移成功:
使用以下命令确认新节点正在运行 ACL:
kubectl get nodes -o wide使用以下命令验证所有 Pod 和守护程序集是否在新节点池上运行:
kubectl get pods -o wide -A使用以下命令验证已升级节点池中的所有节点标签是否符合预期:
kubectl get nodes --show-labels使用
az aks nodepool list命令检查节点映像版本。az aks nodepool list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --query '[].{name: name, osSku: osSku, nodeImageVersion: nodeImageVersion}'示例输出:
[ { "name": "nodepool1", "nodeImageVersion": "AKSAzureContainerLinux-202606.01.0", "osSku": "AzureContainerLinux" } ]
Tip
建议在迁移生产群集之前监视服务的运行状况数周。
回滚到之前的操作系统 SKU 版本
如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU。 为此,请将 OS SKU 字段更改回以前的值并重新提交部署,这会触发另一个升级操作,并将节点池重新映像到其以前的 OS SKU。
使用 az aks nodepool update 命令回滚到以前的 OS SKU。 此示例从 ACL 回滚到 Azure Linux:
az aks nodepool update \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name <existing-node-pool-name> \
--os-sku AzureLinux
后续步骤
在本教程中,已将现有节点迁移到 ACL。 在下一教程中,了解如何为 ACL 群集启用遥测和监视。