你当前正在访问 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 节点池并移除现有节点池

  1. 使用 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
    
  2. 使用 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 迁移功能无法通过 Terraform、PowerShell 或 Azure 门户使用。
  • OS SKU 迁移功能无法重命名现有节点池。
  • Ubuntu 和 Azure Linux 是唯一受支持的 Linux OS SKU 迁移目标。
  • 在迁移期间,AgentPool count 字段不得更改。
  • 启用了 UseGPUDedicatedVHD 的 Ubuntu OS SKU 无法执行 OS SKU 迁移。
  • 启用了 CVM 20.04 的 Ubuntu OS SKU 无法执行 OS SKU 迁移。
  • 启用了 Kata 的节点池无法执行 OS SKU 迁移。
  • 不支持 Windows OS SKU 迁移。

先决条件

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

安装 aks-preview 扩展

重要

AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

  1. 使用 az extension add 命令安装 aks-preview 扩展。

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令更新,确保拥有最新版本的扩展。

    az extension update --name aks-preview
    

注册 OSSKUMigrationPreview 功能标志

  1. 使用 az feature register 命令在订阅中注册 OSSKUMigrationPreview 功能标志。

    az feature register --namespace Microsoft.ContainerService --name OSSKUMigrationPreview
    
  2. 使用 az feature list 命令检查注册状态。

    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/OSSKUMigrationPreview')].{Name:name,State:properties.state}"
    

    输出应类似于以下示例输出:

    Name                                            State
    ----------------------------------------------  -------
    Microsoft.ContainerService/OSSKUMigrationPreview  Registered
    
  3. 使用 az provider register 命令刷新 OSSKUMigrationPreview 功能标志的注册。

    az provider register --namespace Microsoft.ContainerService
    

迁移 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 迁移

  1. 更新现有模板以设置 OSSKU=AzureLinux。 在 ARM 模板中,请在 agentPoolProfile 部分中使用 "OSSKU: "AzureLinux"。 在 Bicep 中,请在 agentPoolProfile 部分中使用 osSku: "AzureLinux"。 确保将 apiVersion 设置为 2023-07-01 或更高版本。
  2. 为群集重新部署 ARM 模板以应用新的 OSSKU 设置。 在此部署期间,群集的行为就像正在升级节点映像一样。 你的群集激增容量,然后从新的 OS SKU 将现有节点逐个重启到最新的 AKS 映像中。

回退

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

  • 使用 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 迁移(预览版)。

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