你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本教程(五部分的第三部分)中,你将现有节点迁移到 Azure Linux。 可以使用以下方法之一将现有节点迁移到 Azure Linux:
- 移除现有节点池并添加新的 Azure Linux 节点池。
- 就地 OS SKU 迁移。
如果没有任何现有节点要迁移到 Azure Linux,请跳到下一教程。 在后面的教程中,你将了解如何在群集中启用遥测和监视,以及如何升级 Azure Linux 节点。
重要
从 2025 年 11 月 30 日开始,AKS 将不再支持或提供 Azure Linux 2.0 安全更新。 从 2026 年 3 月 31 日起,将删除节点映像,并且无法缩放节点池。 通过将 节点池 升级到受支持的 Kubernetes 版本或迁移到 osSku AzureLinux3,以迁移到受支持的 Azure Linux 版本。 有关更多信息,请参阅[停用] AKS 上的 Azure Linux 2.0 节点池。
Prerequisites
- 在前面的教程中,你创建并部署了适用于 AKS 的 Azure Linux 容器主机群集。 若要完成本教程,需要将 Azure Linux 节点池添加到现有群集。 如果尚未完成此步骤并想要继续操作,请从教程 2:将 Azure Linux 节点池添加到现有 AKS 群集开始。 - 注意 - 添加新的 Azure Linux 节点池时,需要将其中至少一个添加为 - --mode System。 否则,AKS 不允许删除现有节点池。
- 需要最新版本的 Azure CLI。 运行 - az --version即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。
添加 Azure Linux 节点池并移除现有节点池
- 使用 az aks nodepool add命令添加新的 Azure Linux 节点池。 此命令使用--mode System标志将新的节点池添加到群集,使其成为系统节点池。 Azure Linux 群集需要系统节点池。
# Declare environment variables with a random suffix for uniqueness
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export NODE_POOL_NAME="np$RANDOM_SUFFIX"
az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --mode System --os-sku AzureLinux
结果:
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/systempool",
  "name": "systempool",
  "provisioningState": "Succeeded"
}
- 使用 az aks nodepool delete命令移除现有节点。
就地 OS SKU 迁移
现在,你可以通过更改节点池的 OS SKU(这会通过标准节点映像升级过程来滚动群集)将现有 Ubuntu 节点池迁移到 Azure Linux。 此新功能不需要创建新的节点池。
限制
有几个设置会阻止 OS SKU 迁移请求。 若要确保迁移成功,请查看以下准则和限制:
- OS SKU 迁移功能无法通过 PowerShell 或 Azure 门户使用。
- OS SKU 迁移功能无法重命名现有节点池。
- Ubuntu 和 Azure Linux 是唯一受支持的 Linux OS SKU 迁移目标。
- 启用了 UseGPUDedicatedVHD的 Ubuntu OS SKU 无法执行 OS SKU 迁移。
- 启用了 CVM 20.04 的 Ubuntu OS SKU 无法执行 OS SKU 迁移。
- 启用了 Kata 的节点池无法执行 OS SKU 迁移。
- 不支持 Windows OS SKU 迁移。
- 支持将 OS SKU 从 Mariner 迁移到 Azure Linux,但不支持回滚到 Mariner。
Prerequisites
- 具有至少一个 Ubuntu 节点池的现有 AKS 群集。
- 在尝试使用 OS SKU 迁移功能之前,我们建议你首先确保在 Azure Linux 容器主机上成功配置和运行你的工作负载,方法如下:在开发/生产环境中部署 Azure Linux 群集,并验证你的服务是否保持正常运行。
- 在生产群集上使用迁移功能之前,请确保该过程可以针对测试/开发环境正常运行。
- 确保你的 Pod 有足够的 Pod 中断预算,以便 AKS 在升级期间在 VM 之间移动 Pod。
- 需要 Azure CLI 版本 2.61.0 或更高版本。 运行 az --version即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。
- 如果你使用 Terraform,则必须拥有 3.111.0 版或更高版本的 AzureRM Terraform 模块。
迁移 Ubuntu 节点池的 OS SKU
- 使用 az aks nodepool update命令将节点池的 OS SKU 迁移到 Azure Linux。 此命令将节点池的 OS SKU 从 Ubuntu 更新为 Azure Linux。 OS SKU 更改会触发即时升级操作,这需要几分钟才能完成。
az aks nodepool update --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --os-sku AzureLinux
结果:
{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/nodepool1",
  "name": "nodepool1",
  "osSku": "AzureLinux",
  "provisioningState": "Succeeded"
}
注意
如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU。
验证 OS SKU 迁移
在测试群集上完成迁移后,应验证以下内容以确保迁移成功:
- 如果迁移目标为 Azure Linux,请运行 kubectl get nodes -o wide命令。 输出应当将Microsoft Azure Linux 3.0显示为你的 OS 映像,并且在你的内核版本的末尾显示.azl3。
- 运行 kubectl get pods -o wide -A命令,验证是否所有 Pod 和守护程序集都在新节点池上运行。
- 运行 kubectl get nodes --show-labels命令,验证升级的节点池中的所有节点标签是否符合预期。
提示
建议在迁移生产群集之前连续数周监视你的服务的运行状况。
在生产群集上运行 OS SKU 迁移
- 更新现有模板以设置 OSSKU=AzureLinux。 在 ARM 模板中,请在"OSSKU": "AzureLinux"部分中使用agentPoolProfile。 在 Bicep 中,请在osSku: "AzureLinux"部分中使用agentPoolProfile。 最后,对于 Terraform,在os_sku = "AzureLinux"部分中使用default_node_pool。 确保将apiVersion设置为2023-07-01或更高版本。
- 为群集重新部署 ARM、Bicep 或 Terraform 模板以应用新的 OSSKU设置。 在此部署期间,群集的行为就像正在升级节点映像一样。 你的群集激增容量,然后从新的 OS SKU 将现有节点逐个重启到最新的 AKS 映像中。
回退
如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU。 为此,你需要更改模板中的 OS SKU 字段并重新提交部署,这会触发另一个升级操作并将节点池还原到其以前的 OS SKU。
注意
OS SKU 迁移不支持回滚到 OS SKU Mariner。
- 使用 az aks nodepool update命令回滚到以前的 OS SKU。 此命令将节点池的 OS SKU 从 Azure Linux 回滚为 Ubuntu。
后续步骤
在本教程中,你使用以下方法之一将现有节点迁移到了 Azure Linux:
- 移除现有节点池并添加新的 Azure Linux 节点池。
- 就地 OS SKU 迁移。
在下一教程中,你将了解如何启用遥测来监视群集。