你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:将节点迁移到 Azure Linux
在本教程(五部分的第三部分)中,你将现有节点迁移到 Azure Linux。 可以使用以下方法之一将现有节点迁移到 Azure Linux:
- 移除现有节点池并添加新的 Azure Linux 节点池。
- 就地 OS SKU 迁移。
如果没有任何现有节点要迁移到 Azure Linux,请跳到下一教程。 在后面的教程中,你将了解如何在群集中启用遥测和监视,以及如何升级 Azure Linux 节点。
先决条件
在前面的教程中,你创建并部署了适用于 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 群集需要系统节点池。az aks nodepool add --resource-group <resource-group-name> --cluster-name <cluster-name> --name <node-pool-name> --mode System --os-sku AzureLinux
使用
az aks nodepool delete
命令移除现有节点。az aks nodepool delete --resource-group <resource-group-name> --cluster-name <cluster-name> --name <node-pool-name>
就地 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。
先决条件
- 具有至少一个 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-name> --cluster-name <cluster-name> --name <node-pool-name> --os-sku AzureLinux
注意
如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU。
验证 OS SKU 迁移
在测试群集上完成迁移后,应验证以下内容以确保迁移成功:
- 如果迁移目标为 Azure Linux,请运行
kubectl get nodes -o wide
命令。 输出应当将CBL-Mariner/Linux
显示为你的 OS 映像,并且在你的内核版本的末尾显示.cm2
。 - 运行
kubectl get pods -o wide -A
命令,验证是否所有 Pod 和守护程序集都在新节点池上运行。 - 运行
kubectl get nodes --show-labels
命令,验证升级的节点池中的所有节点标签是否符合预期。
提示
建议在迁移生产群集之前连续数周监视你的服务的运行状况。
在生产群集上运行 OS SKU 迁移
- 更新现有模板以设置
OSSKU=AzureLinux
。 在 ARM 模板中,请在agentPoolProfile
部分中使用"OSSKU: "AzureLinux"
。 在 Bicep 中,请在agentPoolProfile
部分中使用osSku: "AzureLinux"
。 最后,对于 Terraform,在default_node_pool
部分中使用"os_sku = "AzureLinux"
。 确保将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。az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --os-sku Ubuntu
后续步骤
在本教程中,你使用以下方法之一将现有节点迁移到了 Azure Linux:
- 移除现有节点池并添加新的 Azure Linux 节点池。
- 就地 OS SKU 迁移。
在下一教程中,你将了解如何启用遥测来监视群集。