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

Note

带有 OS Guard(预览版)的 Azure Linux 正被 Azure Container Linux(ACL)取代。

Azure容器 Linux 是用于Azure Kubernetes 服务 (AKS)的长期、不可变、容器优化的 Linux 操作系统(OS)。 它提供了一个安全、最少且可操作一致的主机 OS,旨在大规模运行容器化工作负荷。

有关详细信息,请参阅 Azure 容器 Linux (ACL) 概述

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

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

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

Azure Linux 使用 OS Guard 时的注意事项和限制

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

先决条件

安装 aks-preview Azure CLI 扩展

Important

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

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

az extension add --name aks-preview

使用 az extension update 命令更新到扩展的最新版本。

az extension update --name aks-preview

注册 AzureLinuxOSGuardPreview 功能标志

  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. 当状态显示已注册时,请使用Microsoft.ContainerService命令刷新资源提供程序的az provider register注册。

    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"
    
    # Add a new Azure Linux with OS Guard node pool
    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 
    

就地 OS SKU 迁移

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

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

  • OS SKU 迁移功能无法通过 PowerShell 或 Azure 门户使用。 将 OS SKU 迁移功能与 Azure Linux 与 OS Guard pPreview 配合使用时,无法通过 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 Sandboxing
  • 不支持 Windows OS SKU 迁移。

就地 OS SKU 迁移的先决条件

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

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

通过更改节点池的 OS SKU 将现有的 Ubuntu 或 Azure Linux 节点池迁移到 Azure Linux,并使用 OS Guard,通过标准节点映像升级过程来滚动群集。 此新功能不需要创建新的节点池;相反,现有节点池会自动重新映像。

使用 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"
}

Note

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