本文介绍如何将现有 AKS 节点池迁移到 AKS 的 Azure 容器 Linux(ACL)。 可以使用以下方法之一迁移现有节点:
- 原地 OS SKU 迁移:将现有节点池的 OS SKU 更改为 ACL,系统会自动对节点重新制作镜像。
- 删除现有节点池并添加新的 ACL 节点池:创建新的 ACL 节点池、移动工作负载和删除旧节点池。
Important
如果在 AKS 上使用 Azure 容器 Linux (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 的节点。
原地操作系统 SKU 迁移限制
除了常规 ACL 限制之外,以下内容还特别适用于就地 OS SKU 迁移:
- OS SKU 迁移功能无法通过 PowerShell 或 Azure 门户使用。
- OS SKU 迁移功能不支持重命名现有节点池。
- 已启用的
UseGPUDedicatedVHD节点池无法执行 OS SKU 迁移。 - 不支持 Windows OS SKU 迁移。
先决条件
- 具有至少一个 Linux 节点池的现有 AKS 群集。
- Azure CLI 2.86.0 或更高版本。 运行
az --version即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 - 建议在迁移生产群集之前,通过在开发或过渡环境中 部署 ACL 群集 ,验证工作负荷在 ACL 上运行是否成功。
- 在生产群集上使用迁移功能之前,请确保该过程可以针对测试/开发环境正常运行。
- 确保 Pod 有足够的 Pod 中断预算 (PDB),以便 AKS 能够在迁移期间在 VM 之间移动 Pod。
添加 ACL 节点池并删除现有节点池
使用
az aks nodepool add命令添加新的 ACL 节点池。 使用--mode System新池可以充当系统代理池,这样就可以在下一步中删除原始节点池。az aks nodepool add \ --resource-group <resource-group> \ --cluster-name <cluster-name> \ --name <new-node-pool-name> \ --os-sku AzureContainerLinux \ --mode System \ --node-count 3示例输出:
{ "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/myNewNodePool", "name": "myNewNodePool", "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 迁移
可以通过更改节点池的 OS SKU,将现有的 Linux 节点池迁移到 ACL;此操作会触发群集按标准节点映像升级流程进行滚动更新。 此方法不需要创建新的节点池;而是自动重新映像现有节点池。
执行就地 OS SKU 迁移
Important
ACL 需要可信启动。 迁移到 --enable-secure-boot OS SKU 时,必须包含 --enable-vtpm 和 AzureContainerLinux。 节点池所用的虚拟机(VM)规格还必须支持可信启动。 如果当前 VM 大小不支持它,则需要在迁移之前调整大小或重新创建具有受支持 VM 大小的节点池。
使用 az aks nodepool update 命令将节点池的 OS SKU 迁移到 ACL。 此命令将触发节点池的重置映像,并将 OS SKU 更新为 AzureContainerLinux。 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/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/nodepool1",
"name": "nodepool1",
"osSku": "AzureContainerLinux",
"provisioningState": "Succeeded"
}
注释
如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU。
验证 OS SKU 迁移
Tip
建议在迁移生产群集之前监视服务的运行状况数周。
在测试群集上完成迁移后,建议在迁移生产群集之前监视群集和工作负载数周,以确认所有内容都按预期运行。 使用以下命令验证迁移并监视群集:
使用
kubectl get nodes -o wide命令确认新节点正在运行 ACL。 输出应显示 ACL OS 映像。kubectl get nodes -o wide使用
kubectl get pods -o wide -A命令验证所有 Pod 和守护程序集是否在新节点池上运行。kubectl get pods -o wide -A使用
kubectl get nodes --show-labels命令验证已升级节点池中的所有节点标签是否符合你的预期。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": "myNodePool", "nodeImageVersion": "AKSAzureContainerLinux-202606.01.0", "osSku": "AzureContainerLinux" } ]
回滚到之前的操作系统 SKU 版本
如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU。 为此,请将 OS SKU 字段更改回以前的值并重新提交部署,这会触发另一个升级操作,并将节点池重新映像到其以前的 OS SKU。 如果从 ACL 回滚到先前的 OS SKU,则节点池默认使用可信启动(Gen2)映像版本,除非已明确禁用可信启动。
使用 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 的详细信息,请参阅 什么是用于 Azure Kubernetes 服务 (AKS) 的 Azure 容器 Linux (ACL)?