将现有节点迁移到用于Azure Kubernetes 服务 (AKS)的 Azure 容器 Linux(ACL)

本文介绍如何将现有 AKS 节点池迁移到 AKS 的 Azure 容器 Linux(ACL)。 可以使用以下方法之一迁移现有节点:

  • 原地 OS SKU 迁移:将现有节点池的 OS SKU 更改为 ACL,系统会自动对节点重新制作镜像。
  • 删除现有节点池并添加新的 ACL 节点池:创建新的 ACL 节点池、移动工作负载和删除旧节点池。

Important

如果在 AKS 上使用 Azure 容器 Linux (ACL),请确保查看以下注意事项和限制:

原地操作系统 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 节点池并删除现有节点池

  1. 使用 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"
    }
    
  2. 使用 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-vtpmAzureContainerLinux。 节点池所用的虚拟机(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

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

在测试群集上完成迁移后,建议在迁移生产群集之前监视群集和工作负载数周,以确认所有内容都按预期运行。 使用以下命令验证迁移并监视群集:

  1. 使用 kubectl get nodes -o wide 命令确认新节点正在运行 ACL。 输出应显示 ACL OS 映像。

    kubectl get nodes -o wide
    
  2. 使用 kubectl get pods -o wide -A 命令验证所有 Pod 和守护程序集是否在新节点池上运行。

    kubectl get pods -o wide -A
    
  3. 使用 kubectl get nodes --show-labels 命令验证已升级节点池中的所有节点标签是否符合你的预期。

    kubectl get nodes --show-labels
    
  4. 使用 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)?