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

在 Azure Kubernetes 服务 (AKS) 中创建群集的节点池

本文介绍了如何在 AKS 群集中创建一个或多个节点池。

注意

此功能可以更好地控制创建和管理多个节点池,并且需要单独的命令进行创建/更新/删除 (CRUD) 操作。 以前,通过az aks createaz aks update执行的群集操作使用 managedCluster API,并且只能通过这些操作更改控制平面和单个节点池。 此功能通过 agentPool API 为代理池公开单独的操作集,并要求使用az aks nodepool命令集对单个节点池执行操作。

重要说明

2025 年 11 月 30 日开始,AKS 将不再支持或提供 Azure Linux 2.0 安全更新。 从 2026 年 3 月 31 日起,将删除节点映像,并且无法缩放节点池。 通过将 节点池 升级到受支持的 Kubernetes 版本或迁移到 osSku AzureLinux3,以迁移到受支持的 Azure Linux 版本。 有关详细信息,请参阅 停用:AKS 上的 Azure Linux 2.0 节点池

先决条件

  • 需要安装并配置 Azure CLI 2.2.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI
  • 要部署 ARM 模板,需要将要部署和访问的资源的访问权限写入到 Microsoft.Resources/deployments 资源类型的所有操作。 例如,若要部署虚拟机(VM),需要 Microsoft.Compute/virtualMachines/writeMicrosoft.Resources/deployments/* 权限。 有关角色和权限的列表,请参阅 Azure 内置角色

  • 查看每个参数的以下要求:

    • osTYPE:操作系统类型。 默认值为 Linux。
    • osSKU:指定代理池使用的 OS SKU。
    • count:用于托管 docker 容器的代理数(VM)。 对于用户池,允许的值必须在 0 到 1000(含)范围内;对于系统池,允许值必须在 1 到 1000(含)范围内。 默认值为 1。
  • 使用 ARM 模板部署群集后,可以使用 Azure CLI 或 Azure PowerShell 连接到群集并部署示例应用程序。

限制

创建支持多个节点池的 AKS 群集时存在以下限制:

  • 如果你在 AKS 群集中有另一个可取代它的系统节点池,则可以删除系统节点池。 否则,无法删除系统节点池。

  • 系统池必须至少包含一个节点。 用户节点池可以包含零个或多个节点。

  • 如果使用单个节点池创建群集,则 OS 类型必须为 Linux。 OS SKU 可以是任何 Linux 变体,例如 UbuntuAzureLinux。 不能使用单个 Windows 节点池创建群集。 如果要运行 Windows 容器,必须在使用 Linux 系统节点池创建 Windows 节点池后,将 Windows 节点池添加到 群集。

  • AKS 群集必须通过标准 SKU 负载均衡器使用多个节点池。 基本 SKU 负载均衡器不支持此功能。

  • AKS 群集必须对节点使用虚拟机规模集。

  • 节点池的名称只能包含小写字母数字字符,且必须以小写字母开头。

    • 对于 Linux 节点池,长度必须在 1-12 个字符之间。
    • 对于 Windows 节点池,长度必须在 1-6 个字符之间。
  • 所有节点池都必须位于同一虚拟网络中。

  • 在创建群集的过程中创建多个节点池时,节点池的 Kubernetes 版本都必须与已为控制平面设置的版本相匹配。

设置环境变量。

  • 在 shell 中设置以下环境变量以简化本文中的命令。 可以将值更改为首选名称。

    export RESOURCE_GROUP_NAME="my-aks-rg"
    export LOCATION="eastus"
    export CLUSTER_NAME="my-aks-cluster"
    export NODE_POOL_NAME="mynodepool"
    

创建资源组

  • 使用 az group create 命令创建 Azure 资源组。

    az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
    

使用 Azure CLI 创建具有单节点池的 AKS 群集

如果希望 AKS 群集中只有一个节点池,则可以在系统节点池上安排应用程序 pod。 如果在生产环境中为 AKS 群集运行单个系统节点池,则建议至少将三个节点用作节点池。 如果一个节点出现故障,冗余会受到影响。 可以通过增加系统节点池节点来缓解此风险。

  1. 使用命令创建具有单个 Ubuntu 节点池的 az aks create 群集。 此步骤指定单个节点池中的两个节点。

    az aks create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $CLUSTER_NAME \
        --vm-set-type VirtualMachineScaleSets \
        --node-count 2 \
        --os-sku Ubuntu \
        --location $LOCATION \
        --load-balancer-sku standard \
        --generate-ssh-keys
    

    创建群集需要几分钟时间。

  2. 创建好群集后,使用 az aks get-credentials 命令获取群集凭据。

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    

使用 Azure CLI 添加第二个节点池

上一部分中 创建的集群具有单个节点池。 在本部分中,我们将第二个节点池添加到群集。 第二个节点池可以具有 OS 类型为 Linux 且 OS SKU 为 UbuntuAzureLinux,或者具有 OS 类型为 Windows

注意

如果要将使用临时 OS 磁盘的节点池添加到 AKS 群集,可以在运行az aks nodepool add命令时将--node-osdisk-type标志设置为Ephemeral

如果使用临时 OS,可以部署不超过 VM 缓存大小的 VM 和实例映像。 在 AKS 中默认节点 OS 磁盘配置使用 128 GB,这意味着所需 VM 大小的缓存大于 128 GB。 默认值 Standard_DS2_v2 的缓存大小为 86 GB,不够大。 Standard_DS3_v2 VM SKU 的缓存大小为 172 GB,足够大。 还可以使用--node-osdisk-size减少 OS 磁盘的默认大小,但请记住,AKS 映像的最小大小为 30 GB。

如果要创建具有网络连接 OS 磁盘的节点池,可以在运行az aks nodepool add命令时将--node-osdisk-type标志设置为Managed

添加 Linux 节点池

  • 使用 az aks nodepool add 命令新建一个节点池。 以下示例创建一个具有Ubuntu OS SKU的Linux节点池,该节点池运行三个节点。 如果未指定 OS SKU,则 AKS 默认为 Ubuntu

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-vm-size Standard_DS2_v2 \
        --os-type Linux \
        --os-sku Ubuntu \
        --node-count 3
    

    创建节点池需要几分钟时间。

添加 Windows Server 节点池

  • 使用 az aks nodepool add 命令新建一个节点池。 以下示例使用运行三个节点的 Windows2022 OS SKU 创建 Windows 节点池

    有关 Windows OS 的详细信息,请参阅 Windows 最佳做法

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP_NAME \
        --cluster-name $CLUSTER_NAME \
        --name $NODE_POOL_NAME \
        --node-vm-size Standard_DS2_v2 \
        --os-type Windows \
        --os-sku Windows2022 \
        --node-count 3
    

检查节点池的状态

  • 使用 az aks nodepool list 命令查看节点池的状态,并指定资源组和群集名称。

    az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
    

删除节点池

不再需要某个节点池时,可以将其删除并删除底层 VM 节点。

警告

删除节点池时,AKS 不会执行隔离和排出,如果删除节点池时发生数据丢失,则没有任何选项可以恢复数据。 如果无法在其他节点池中计划 pod,则这些应用程序会变得不可用。 当使用中的应用程序没有数据备份或者无法在群集中的其他节点池上运行时,请务必不要删除节点池。 要最大程度地减少对重新计划 Pod(当前正在要删除的节点池上运行)的中断,请在删除之前对节点池中的所有节点执行隔离和排出。

  • 使用 az aks nodepool delete 命令删除节点池并指定节点池名称。

    az aks nodepool delete --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME --name $NODE_POOL_NAME --no-wait
    

    删除节点和节点池需要花费几分钟时间。

使用 ARM 模板创建具有单个节点池的 AKS 群集

如果希望 AKS 群集中只有一个节点池,则可以在系统节点池上安排应用程序 pod。 如果在生产环境中为 AKS 群集运行单个系统节点池,则建议至少将三个节点用作节点池。 如果一个节点出现故障,冗余会受到影响。 可以通过增加系统节点池节点来缓解此风险。

创建 Microsoft.ContainerService/managedClusters 资源

  • 通过将此 JSON添加到模板中来创建Microsoft.ContainerService/managedClusters资源。
  • 通过对 ARM 模板进行以下修改,在 AKS 群集中创建单个 Ubuntu 节点池:

      "properties": {
        "agentPoolProfiles": [
        {
            "count": "1",
            "osSKU": "ubuntu",
            "osType": "linux"
         } 
         ],
    }
    

使用 ARM 模板添加第二个节点池

上一部分中 创建的群集具有单个节点池。 在本部分中,我们将第二个节点池添加到群集。 第二个节点池可以具有 OS 类型 Linux 和 OS SKU UbuntuAzureLinux,或者 OS 类型 Windows

添加 Linux 节点池

  • 通过对 ARM 模板进行以下修改,在 AKS 群集中创建多个 Ubuntu 节点池:

      "properties": {
        "agentPoolProfiles": [
        {
            "count": "3",
            "osSKU": "ubuntu",
            "osType": "linux"
         } 
         ],
    }
    

添加 Windows Server 节点池

  • 通过对 ARM 模板进行以下修改,在 AKS 群集中创建多个 Windows 节点池:

      "properties": {
        "agentPoolProfiles": [
        {
            "count": "3",
            "osSKU": "windows2022",
            "osType": "windows"
         } 
         ],
    }
    

部署 ARM 模板

后续步骤

本文介绍了如何使用 Azure CLI 在 AKS 群集中创建节点池。