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

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

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

缩放群集节点

注意

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

首先,使用 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",
    "storageProfile": "ManagedDisks",
    "vmSize": "Standard_DS2_v2"
  }
]

使用 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",
      "storageProfile": "ManagedDisks",
      "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 节点池自动缩放为 0 个节点。

后续步骤

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