在 Azure Kubernetes 服务 (AKS) 群集中手动缩放节点数

如果应用程序的资源需求发生变化,群集性能可能会因 CPU、内存、PID 空间或磁盘大小不足而受到影响。 若要解决这些变化,可以手动缩放 AKS 群集以运行不同数量的节点。 节点数减少时,节点会被仔细封锁和排除,尽量避免对正在运行的应用程序造成中断。 纵向扩展时,AKS 会一直等待,直到节点被 Kubernetes 群集标记为“就绪”,然后才在这些节点上计划 Pod。

本文介绍如何手动增加或减少 AKS 群集中的节点数。

开始之前

  • 查看 AKS 服务配额和限制,以验证群集是否可缩放到所需的节点数。

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

    • 对于 Linux 节点池,长度必须在 1-11 个字符之间。
    • 对于 Windows 节点池,长度必须在 1-6 个字符之间。

缩放群集节点

重要

不支持使用 kubectl 命令从节点池中删除节点。 这样做可能会导致 AKS 群集出现缩放问题。

  1. 使用 az aks show 命令获取节点池的名称。 以下示例获取 myResourceGroup 资源组中名为 myAKSCluster 的群集的节点池名称

    az aks show --resource-group myResourceGroup --name myAKSCluster --query agentPoolProfiles
    

    以下示例输出表明名称为 nodepool1

    [
      {
        "count": 1,
        "maxPods": 110,
        "name": "nodepool1",
        "osDiskSizeGb": 30,
        "osType": "Linux",
        "vmSize": "Standard_DS2_v2"
      }
    ]
    
  2. 使用 az aks scale 命令扩展群集节点。 以下示例将名为 myAKSCluster 的群集缩放为单个节点。 提供前一个命令中你自己的 --nodepool-name,如 nodepool1:

    az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 1 --nodepool-name <your node pool name>
    

    以下示例输出显示群集已成功缩放为一个节点,如 agentPoolProfiles 部分中所示

    {
      "aadProfile": null,
      "addonProfiles": null,
      "agentPoolProfiles": [
        {
          "count": 1,
          "maxPods": 110,
          "name": "nodepool1",
          "osDiskSizeGb": 30,
          "osType": "Linux",
          "vmSize": "Standard_DS2_v2",
          "vnetSubnetId": null
        }
      ],
      [...]
    }
    

User 节点池缩放为 0

与始终需要运行节点的 System 节点池不同,User 节点池允许缩放为 0。 若要详细了解系统节点池和用户节点池之间的差异,请参阅系统节点池和用户节点池

  • 若要将用户池缩放为 0,可以使用 az aks nodepool scale 来替代上面的 az aks scale 命令,并将 0 设置为节点计数。

    az aks nodepool scale --name <your node pool name> --cluster-name myAKSCluster --resource-group myResourceGroup  --node-count 0 
    
  • 还可以通过将群集自动缩放程序--min-count 参数设置为 0,将 User 节点池自动缩放为零个节点。

后续步骤

在本文中,你手动缩放了 AKS 群集以增加或减少节点数量。 还可以使用群集自动缩放程序自动缩放群集。