教程:将节点迁移到 Azure 容器 Linux (ACL)

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

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

本教程中的命令使用教程 1 中设置的环境变量 :使用 AKS 的 ACL 创建群集

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

先决条件

Azure容器 Linux (ACL) 注意事项和限制

在开始之前,请了解以下有关 ACL 的注意事项和限制:

添加 ACL 节点池并删除现有节点池

  1. 使用 az aks nodepool add 命令添加新的 ACL 节点池。 使用 --mode System 新池可以充当系统代理池,这样就可以在下一步中删除原始节点池。 以下示例创建名为 aclsystem 的节点池,该池将三个节点添加到群集:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name aclsystem \
        --mode System \
        --os-sku AzureContainerLinux \
        --node-count 3
    

    示例输出:

    {
      "id": "/subscriptions/xxxxx/resourceGroups/myACLResourceGroup/providers/Microsoft.ContainerService/managedClusters/myACLCluster/nodePools/aclsystem",
      "name": "aclsystem",
      "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 迁移

操作系统 SKU 就地迁移的限制

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

  • OS SKU 迁移功能无法通过 PowerShell 或 Azure 门户使用。
  • OS SKU 迁移功能不支持重命名现有节点池。
  • Ubuntu、Azure Linux 和 AzureContainerLinux 是唯一受支持的 Linux OS SKU 迁移目标。
  • ACL 需要可信启动。 如果您的节点池中尚未启用这些功能,则在迁移到 --enable-secure-boot OS SKU 时,必须包含 --enable-vtpmAzureContainerLinux。 你的节点池的虚拟机大小还必须支持可信启动。 如果当前 VM 大小不支持它,则需要在迁移之前调整大小或重新创建具有受支持 VM 大小的节点池。
  • 不支持第 1 代 VM
  • 启用了 UseGPUDedicatedVHD 的 Ubuntu OS SKU 无法执行 OS SKU 迁移。
  • 不支持机密虚拟机(CVM)。
  • 不支持 Pod Sandboxing
  • 不支持 Windows OS SKU 迁移。

就地 OS SKU 迁移的先决条件

  • 具有至少一个 Linux 节点池的现有 AKS 群集。
  • 建议在迁移生产群集之前,通过在开发或过渡环境中 部署 ACL 群集 ,验证工作负荷在 ACL 上运行是否成功。
  • 在生产群集上使用迁移功能之前,请确保该过程可以针对测试/开发环境正常运行。
  • 确保你的 Pod 有足够的 Pod 中断预算 (PDB),以便 AKS 在升级期间在 VM 之间移动 Pod。
  • 需要 Azure CLI 版本 2.61.0 或更高版本。 使用az version命令查找版本。 若要升级到最新版本,请使用 az upgrade 命令。

使用就地 OS SKU 迁移迁移到 ACL

您可以通过更改节点池的 OS SKU,将现有的 Ubuntu 或 Azure Linux 节点池迁移到 ACL,这会通过标准的节点映像升级流程对群集执行滚动升级。 此方法不需要创建新的节点池;而是自动重新映像现有节点池。

Important

ACL 需要可信启动。 迁移到 --enable-secure-boot OS SKU 时,必须包含 --enable-vtpmAzureContainerLinux。 你的节点池的虚拟机大小还必须支持可信启动。

使用 az aks nodepool update 命令将节点池的 OS SKU 迁移到 ACL。 此命令会触发节点池的重置映像。 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/myACLResourceGroup/providers/Microsoft.ContainerService/managedClusters/myACLCluster/nodePools/nodepool1",
  "name": "nodepool1",
  "osSku": "AzureContainerLinux",
  "provisioningState": "Succeeded"
}

Note

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

验证 OS SKU 迁移

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

  1. 使用以下命令确认新节点正在运行 ACL:

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

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

    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": "nodepool1",
        "nodeImageVersion": "AKSAzureContainerLinux-202606.01.0",
        "osSku": "AzureContainerLinux"
      }
    ]
    

Tip

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

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

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

使用 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。 在下一教程中,了解如何为 ACL 群集启用遥测和监视。