你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 OS Guard 将节点迁移到 Azure Linux(预览版)

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

  • 删除现有节点池,并使用 OS Guard 节点池添加新的 Azure Linux。
  • 就地 OS SKU 迁移。

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

注意事项和限制

在开始之前,请查看以下 Azure Linux 与 OS Guard 的注意事项和限制(预览版):

  • 使用 OS Guard 的 Azure Linux 需要 Kubernetes 版本 1.32.0 或更高版本。
  • 所有带操作系统防护的 Azure Linux 均已启用联邦信息处理标准 (FIPS)受信任启动
  • 在 AKS 上的 Azure Linux,只有 Azure CLI 和 ARM 模板这两种部署方法受支持,并且 OS Guard 目前处于预览状态。 不支持 PowerShell 和 Terraform。
  • 在预览版中,带操作系统防护的 Azure Linux 在 AKS 上不支持 Arm64 映像。
  • 对于 AKS 上带操作系统防护的 Azure Linux,唯一支持的 OS 升级通道NodeImageNone。 由于 /usr 目录不可变,UnmanagedSecurityPatch 与带操作系统防护的 Azure Linux 不兼容。
  • 不支持项目流式处理
  • 不支持 Pod Sandboxing
  • 不支持机密虚拟机(CVM)。
  • 不支持第 1 代虚拟机(VM)。

先决条件

安装 aks-preview Azure CLI 扩展

重要

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

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

    az extension add --name aks-preview
    
  • 使用 az extension update 命令更新到扩展的最新版本。

    az extension update --name aks-preview
    

注册 Azure Linux OS Guard 预览版功能标志

  1. 使用 AzureLinuxOSGuardPreview 命令注册 az feature register 功能标志。

    az feature register --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"
    

    几分钟后,状态将显示为“已注册”

  2. 使用 az feature show 命令验证注册状态。

    az feature show --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"
    
  3. 当状态显示“已注册”时,使用 az provider register 命令刷新 Microsoft.ContainerService 资源提供程序的注册。

    az provider register --namespace "Microsoft.ContainerService"
    

使用 OS Guard 节点池添加 Azure Linux 并删除现有节点池

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

    # Declare environment variables with a random suffix for uniqueness
    export RANDOM_SUFFIX=$(openssl rand -hex 3)
    export NODE_POOL_NAME="np$RANDOM_SUFFIX"
    az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --mode System --os-sku AzureLinuxOSGuard --node-osdisk-type Managed --enable-fips-image --enable-secure-boot --enable-vtpm
    

    示例输出:

    {
      "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/systempool",
      "name": "systempool",
      "provisioningState": "Succeeded"
    }
    
  2. 使用 az aks nodepool delete 命令移除现有节点。

    az aks nodepool delete --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME 
    

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

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

  • OS SKU 迁移功能无法通过 PowerShell 或 Azure 门户使用。 将 OS SKU 迁移功能与 Azure Linux 与 OS Guard 配合使用时(预览版)无法通过 Terraform、PowerShell 或 Azure 门户使用。
  • OS SKU 迁移功能不支持重命名现有节点池。
  • Ubuntu、Azure Linux 和具有 OS Guard 的 Azure Linux 是唯一受支持的 Linux OS SKU 迁移目标。
  • 默认情况下,使用 OS Guard 的 Azure Linux 需要受信任的启动。 需要启用受信任的启动才能使用 OS Guard 迁移到 Azure Linux。 这可能需要创建新的节点池。
  • 启用 Azure Linux 并使用 OS Guard 时,需要符合 FIPS 标准。 如果您当前未使用 FIPS 镜像,可以在节点池更新命令中包含 --enable-fips
  • 不支持第 1 代虚拟机(VM)。
  • 启用了 UseGPUDedicatedVHD 的 Ubuntu OS SKU 无法执行 OS SKU 迁移。
  • 不支持机密虚拟机(CVM)。
  • 不支持 Pod 沙盒化
  • 不支持 Windows OS SKU 迁移。
  • 支持将 OS SKU 从 Mariner 迁移到 Azure Linux,但不支持回滚到 Mariner。

就地 OS SKU 迁移的先决条件

  • 具有至少一个 Azure Linux 节点池的现有 AKS 群集。
  • 我们建议您确保在尝试使用 OS SKU 迁移功能之前,先在开发/生产环境中部署一个具有 OS Guard 的 Azure Linux 群集,并验证您的服务工作负载在 Azure Linux OS Guard 容器主机上配置和运行是否成功且保持健康。
  • 在生产群集上使用迁移功能之前,请确保该过程可以针对测试/开发环境正常运行。
  • 确保你的 Pod 有足够的 Pod 中断预算,以便 AKS 在升级期间在 VM 之间移动 Pod。
  • 需要 Azure CLI 版本 2.61.0 或更高版本。 使用az version命令查找版本。 若要升级到最新版本,请使用 az upgrade 命令。

执行就地 OS SKU 迁移

现在,你可以通过更改节点池的 OS SKU(这会通过标准节点映像升级过程来滚动群集)将现有 Ubuntu 或 Azure Linux 节点池迁移到带操作系统防护的 Azure Linux。 此新功能不需要创建新的节点池;相反,现有节点池会自动重新映像。

使用 OS Guard 将 Azure Linux 容器主机节点池的 OS SKU 迁移到 Azure Linux

  • 使用 az aks nodepool update 命令使用 OS Guard 将节点池的 OS SKU 迁移到 Azure Linux。 此命令触发节点池的重置映像,使用 OS Guard 将节点池的 OS SKU 从 Azure Linux 更新到 Azure Linux。 OS SKU 更改会触发即时升级操作,这需要几分钟才能完成。

    az aks nodepool update --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --os-sku AzureLinuxOSGuard --node-osdisk-type Managed --enable-fips-image --enable-secure-boot --enable-vtpm
    

    示例输出:

    {
      "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/nodepool1",
      "name": "nodepool1",
      "osSku": "AzureLinuxOSGuard",
      "provisioningState": "Succeeded"
    }
    

注释

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

验证 OS SKU 迁移

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

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

小窍门

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

回滚到之前的 OS SKU

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

注释

OS SKU 迁移不支持回滚到 OS SKU Mariner。

  • 使用 az aks nodepool update 命令回滚到以前的 OS SKU。 此命令使用 OS Guard 将节点池的 OS SKU 从 Azure Linux 更新回 Azure Linux。

后续步骤

本教程介绍如何使用 OS Guard 将现有节点迁移到 Azure Linux。 在下一教程中,你将了解如何启用遥测来监视群集。