群集可伸缩性概念

已完成

节点不足

在 Pod YAML 文件的 spec.containers.resources 键中,定义 Pod 所需的资源数。 在节点中创建新的 Pod 后,Kubernetes 会自动将指定数量的资源量分配给 Pod,这样它就可使用所需的能量。

单个节点是单个虚拟机 (VM),其可用于 Pod 的资源(例如 CPU 和 RAM)的量有限。 不能在节点中启动无限数量的 Pod。 当节点不满足对 Pod 资源的需求时,Pod 会与指定资源竞争该节点的资源,从而导致节点不足。 Pod 保持在挂起状态,在有足够的资源可用之前,该 Pod 不会计划到任何节点。

群集可伸缩性

为了避免节点不足,操作员需要横向扩展群集,并向节点池添加更多 VM。 可以使用 Azure CLI az aks scale 命令执行手动群集缩放。 还可以使用 Azure 门户手动缩放群集。 登录门户并选择你的 Azure Kubernetes 服务 (AKS) 群集。 在“设置”下选择“节点池”。 选择要缩放的节点池,然后选择“缩放节点池”。

手动缩放可能会让人不堪重负,尤其是对于需求不一致和波动的群集。 当 Pod 的数量持续波动时,需要持续监视它来查看计划外的 Pod,并实时进行任何必要的调整。

群集自动缩放程序

在 AKS 中,群集自动缩放程序工具可自动执行群集缩放流程。 在 AKS 群集中启用后,它会监视有资源限制的计划外 Pod,并自动增加节点数来满足需求。

显示群集自动缩放程序工作方式的示意图。

如果有群集容量在指定时间内未使用,群集自动缩放程序还可以增加群集中的节点数。 满足此条件时,自动缩放程序会封锁该节点(使该节点不可用于计划新的工作负荷),然后清空该节点(将现有的工作负荷移到其他节点)。 因此,在该节点中计划的所有 Pod 会安全地移到其他节点。 它还确保在此过程中没有计划其他 Pod。 然后从池中删除节点。

在某些情况下,群集自动缩放程序无法移除节点,因为无法从该节点中移出 Pod。 这些情况包括:

  • Pod 是使用 YAML 文件直接创建的,没有绑定到任何控制器(例如 Deployment 或 ReplicaSet)。
  • Pod 中断预算 (PDB) 限制过多,不允许 Pod 数低于特定阈值。
  • Pod 具有该特定节点的节点选择器,或者具有阻止它转到其他位置的节点相关性。

启用自动缩放后,会禁用手动群集缩放。

知识检查

1.

群集自动缩放程序与 HPA 有何区别?

2.

为什么需要在生产环境中使用群集自动缩放程序?

3.

在以下哪种情况下,群集无法删除节点?