教程:将节点迁移到 Azure Linux

在本教程中,你将把现有节点迁移到 Azure Linux,这是 五部分中的第三部分。 可以使用以下方法之一将现有节点迁移到 Azure Linux:

  • 移除现有节点池并添加新的 Azure Linux 节点池。
  • 执行就地操作系统 (OS) SKU 迁移。

本教程中的命令使用 Tutorial 1 中设置的环境变量:使用适用于 AKS 的 Azure Linux 容器主机创建群集

如果没有任何现有节点要迁移到 Azure Linux,请跳到下一教程。 在后面的教程中,你将了解如何在群集中启用遥测和监视,以及如何升级 Azure Linux 节点。

先决条件

Note

添加新的 Azure Linux 节点池时,需要将其中至少一个添加为 --mode System。 否则,AKS 不允许删除现有节点池。

  • 需要最新版本的 Azure CLI。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

设置环境变量。

设置以下环境变量,为每个部署创建唯一的资源名称。 将占位符 <your-node-pool-name> 替换为所选的名称。 可以选择追加随机后缀以确保唯一性。 节点池的名称必须以小写字母开头,且只能包含字母数字字符。 对于 Linux 节点池,长度必须介于 1 到 12 个字符之间。

# Set random suffix for uniqueness
export RANDOM_SUFFIX=$(openssl rand -hex 3)

# Set node pool name
export NODE_POOL_NAME="<your-node-pool-name>$RANDOM_SUFFIX"

添加 Azure Linux 节点池并移除现有节点池

  1. 使用 az aks nodepool add 命令添加新的 Azure Linux 节点池。 此命令使用 --mode System 标志将新的节点池添加到群集,使其成为系统节点池。 Azure Linux 群集需要系统节点池。

    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"
    }
    
  2. 使用 az aks nodepool delete 命令移除现有节点。

就地 OS SKU 迁移

可以通过更改节点池的 OS SKU,将现有的 Ubuntu 节点池迁移到 Azure Linux;这会通过标准的节点映像升级流程对群集进行滚动更新。 此新功能不需要创建新的节点池。

原地操作系统 SKU 迁移限制

有几个设置会阻止 OS SKU 迁移请求。 若要确保迁移成功,请查看以下准则和限制:

  • OS SKU 迁移功能无法通过 PowerShell 或 Azure 门户使用。
  • OS SKU 迁移功能无法重命名现有节点池。
  • Ubuntu、Azure Linux 和具有 OS Guard 的 Azure Linux 是唯一受支持的 Linux OS SKU 迁移目标。
  • 默认情况下,使用 OS Guard 的 Azure Linux 需要受信任的启动。 需要启用受信任的启动才能使用 OS Guard 迁移到 Azure Linux。 由于无法在现有节点池上启用受信任的启动,因此需要创建启用了受信任启动的新节点池,并将工作负荷迁移到该节点池。
  • 使用仅支持第 1 代的虚拟机(VM)规格的客户无法迁移到启用了 OS Guard 的 Azure Linux,因为没有受支持的第 1 代映像。 在这种情况下,需要创建具有支持第 2 代 VM 大小的新节点池。
  • 启用了 UseGPUDedicatedVHD 的 Ubuntu OS SKU 无法执行 OS SKU 迁移。
  • 启用了 CVM 20.04 的 Ubuntu OS SKU 无法执行 OS SKU 迁移。
  • 启用了 Kata 的节点池无法执行 OS SKU 迁移。
  • 不支持 Windows OS SKU 迁移。

原地操作系统 SKU 迁移先决条件

  • 具有至少一个 Ubuntu 节点池的现有 AKS 群集。
  • 在尝试使用 OS SKU 迁移功能之前,我们建议你首先确保在 Azure Linux 容器主机上成功配置和运行你的工作负载,方法如下:在开发/生产环境中部署 Azure Linux 群集,并验证你的服务是否保持正常运行。
  • 在生产群集上使用迁移功能之前,请确保该过程可以针对测试/开发环境正常运行。
  • 确保你的 Pod 有足够的 Pod 中断预算 (PDB),以便 AKS 在升级期间在 VM 之间移动 Pod。
  • 需要 Azure CLI 版本 2.61.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI
  • 如果使用 Terraform,则必须具有 v3.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"
}

Note

如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU

验证 OS SKU 迁移

在测试群集上完成迁移后,应验证以下内容以确保迁移成功:

  • 如果迁移目标为 Azure Linux,请运行 kubectl get nodes -o wide 命令。 输出应当将 Azure Linux 3.0 显示为你的 OS 映像,并且在你的内核版本的末尾显示 .azl3
  • 运行 kubectl get pods -o wide -A 命令,验证是否所有 Pod 和守护程序集都在新节点池上运行。
  • 运行 kubectl get nodes --show-labels 命令,验证升级的节点池中的所有节点标签是否符合预期。

Tip

建议在迁移生产群集之前连续数周监视你的服务的运行状况。

在生产群集上运行 OS SKU 迁移

  1. 更新现有模板以设置 OSSKU=AzureLinux。 确保将 apiVersion 设置为 2023-07-01 或更高版本。

    • ARM 模板:在本"OSSKU": "AzureLinux"部分中使用agentPoolProfile
    • Bicep:在 osSku: "AzureLinux" 节中使用 agentPoolProfile
    • Terraform:在os_sku = "AzureLinux"部分中使用default_node_pool
  2. 为群集重新部署 ARM、Bicep 或 Terraform 模板以应用新的 OSSKU 设置。 在此部署期间,群集的行为就像正在升级节点映像一样。 你的群集激增容量,然后从新的 OS SKU 将现有节点逐个重启到最新的 AKS 映像中。

回滚到之前的操作系统 SKU 版本

如果在 OS SKU 迁移过程中遇到问题,可以回滚到以前的 OS SKU。 为此,你需要更改模板中的 OS SKU 字段并重新提交部署,这会触发另一个升级操作并将节点池还原到其以前的 OS SKU。

您可以使用 az aks nodepool update 命令回退到之前的 OS SKU。 此命令将节点池的 OS SKU 从 Azure Linux 回滚为 Ubuntu。

后续步骤

在本教程中,通过删除现有节点池并添加新Azure Linux 节点池或执行就地 OS SKU 迁移,将现有节点迁移到 Azure Linux。

在下一教程中,你将了解如何启用遥测来监视群集。