Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
在 Azure Kubernetes 服务 (AKS) 中运行应用程序时,可以扩缩 Pod、Pod 资源、节点或事件驱动的工作负载,以适应需求变化。 AKS 支持手动缩放、水平 Pod 自动缩放器(HPA)、群集自动缩放器、Kubernetes 事件驱动自动缩放(KEDA)、节点自动预配,以及借助 Azure 容器实例(ACI)进行突发扩展。
选择正确的缩放方法
| 缩放方法 | 最适用于 | 关键指标 | 指南 |
|---|---|---|---|
| 水平 Pod 自动缩放器 (HPA) | 具有可变需求的无状态或可分区工作负荷 | CPU 使用率、RPS、队列深度 | 何时应使用 Kubernetes 中的 Pod 水平自动扩缩(HPA)? |
| 群集自动缩放程序 | Pod 处于 Pending 状态时的节点级容量 | 挂起的 Pod | 在 AKS 中使用群集自动缩放程序 |
| KEDA | 事件驱动的工作负荷;需要缩放到零 | 队列长度,事件积压 | KEDA 插件概述 |
| ACI 突发缩放 | 超出节点池容量时的突增流量处理 | 突发需求 | 使用Azure 容器实例创建虚拟节点 |
手动缩放 Pod 或节点
可以手动缩放 Pod 副本和节点,以测试应用程序如何响应可用资源更改或维护固定容量量。 若要手动缩放,请定义所需的副本或节点计数。 然后,Kubernetes 创建或删除 Pod,而 AKS 在适用的节点池中添加或删除节点。
纵向缩减节点时,AKS 会针对群集的计算类型调用相关的Azure计算 API。 对于基于虚拟机规模集构建的群集,虚拟机规模集 API 确定要删除的节点。 有关详细信息,请参阅虚拟机规模集常见问题解答。
若要开始,请参阅:
水平 Pod 自动扩展器
当工作负载可以运行多个相同的副本且需求波动时,请使用 HPA。 它可根据 CPU/内存、应用指标(每秒请求数、延迟)或外部队列和积压量指标进行扩缩容,并应结合集群自动扩缩器来管理节点容量。
了解详细信息: 何时应在 Kubernetes 中使用水平 Pod 自动缩放(HPA)?
群集自动缩放程序
群集自动缩放程序根据 Pod 计划要求调整节点池中的节点数。 当因节点容量不足导致无法计划 Pod 时,它会添加节点;当闲置节点的负载可在其他地方运行时,它会移除这些节点。
集群自动扩缩器通常与 HPA 配合使用。 HPA 根据工作负荷需求调整 Pod 副本数,而群集自动缩放程序调整节点容量以适应这些 Pod。
若要开始,请参阅 在 AKS 中使用群集自动缩放程序。
横向扩展事件
如果节点池没有足够的计算资源来运行某个 Pod,该 Pod 将保持 Pending 状态。 当集群自动扩缩器检测到由于节点池资源约束而无法调度的 Pod 时,它会增加节点池中的节点数。 Kubernetes 会在新节点完成预配并进入就绪状态后,调度处于 Pending 状态的 Pod。
预配基于 VM 的节点可能需要几分钟时间。 对于突发需求的工作负荷,请考虑使用虚拟节点和Azure 容器实例。
横向缩减事件
集群自动扩缩器会监控未充分利用的节点,并确定这些节点上的 Pod 是否可以在其他节点上运行。 不再需要节点时,Kubernetes 会重新计划其 Pod,AKS 将从节点池中删除节点。
随着 Pod 在节点之间移动时,扩展操作可能会中断工作负荷。 运行多个 Pod 副本并配置适当的可用性控制,以最大程度地减少中断。
Kubernetes 事件驱动的自动缩放
Kubernetes 事件驱动的自动缩放 (KEDA)是一个开源组件,可基于事件缩放工作负荷。 KEDA 通过自定义资源扩展 Kubernetes,其中包括 ScaledObject,这些资源描述了工作负载应如何响应事件源或指标。
KEDA 对于处理队列、流、消息或其他事件积压的工作负荷非常有用。 它可以在没有可用事件时将受支持的工作负载缩减到零,并随着积压增加而增加副本数。
若要开始使用,请参阅KEDA 插件概述。
节点自动预配
节点自动预配 (NAP) 使用开源 Karpenter 项目根据处于 Pending 状态的 Pod 的需求来预配并管理节点。 NAP 选择适当的虚拟机 SKU 和节点数量来满足实时工作负荷需求。
NAP 先从一组允许使用的 VM SKU 中进行选择,并为待处理的工作负载分配容量。 可以定义资源限制和计划首选项,以控制其预配节点和分发工作负荷的方式。
控制平面扩展与保护措施
Kubernetes 具有多维扩展范围,其中每种资源类型对控制平面提出的要求各不相同。 例如,对 Secret 等资源的监视可能会对 Kubernetes API 服务器发起 List 调用,并比未被监视的资源给控制平面带来更大的负载。
由于控制平面管理群集中的资源操作,因此在一个维度中大幅缩放可以减少其他维度中可用的容量。 例如,运行数十万个 Pod 可能会影响控制平面支持的 Pod 突变率。 有关建议,请参阅 适用于大规模 AKS 群集的 Kubernetes 客户端最佳做法。
AKS 根据信号(例如群集核心总数和控制平面组件上的 CPU 或内存压力)自动缩放控制平面组件。
若要检查控制平面是否已纵向扩展,请检查 large-cluster-control-plane-scaling-status ConfigMap:
kubectl describe configmap large-cluster-control-plane-scaling-status -n kube-system
控制平面防护
如果自动缩放 API 服务器仍无法使其在高负载下保持稳定,AKS 可以部署托管的 API 服务器保护机制。 这种最后保护措施会限制非系统客户端请求,以防止控制平面变得无响应。 来自 kubelet 等组件的系统关键 API 服务器调用仍可继续正常运行。
若要确定是否已应用托管 API 服务器保护机制,请检查是否存在 aks-managed-apiserver-guardFlowSchema 和 PriorityLevelConfiguration:
kubectl get flowschemas
kubectl get prioritylevelconfigurations
如果存在这些资源,请参阅 API 服务器和 etcd 故障排除指南 以获取缓解指南。
突发扩展到 Azure 容器实例 (ACI)
可以将 AKS 与Azure 容器实例集成,以处理需求快速增加。 Pod 自动缩放可以创建比现有节点池可以支持的副本多,而预配其他基于 VM 的节点可能需要几分钟时间。 ACI 提供计算容量,无需额外的 VM 节点。
AKS 虚拟节点 组件基于 虚拟 Kubelet ,并将 ACI 显示为虚拟 Kubernetes 节点。 Kubernetes 可以通过虚拟节点计划符合条件的 Pod,以作为 ACI 容器实例运行,而不是直接在 AKS VM 节点上运行。
虚拟节点使用与 AKS 群集相同的虚拟网络中的另一个子网。 此配置提供 AKS 和 ACI 之间的专用网络连接,同时允许 ACI 充当群集的逻辑扩展。
后续步骤
使用以下资源实现适合工作负荷的缩放方法:
- 手动缩放 Pod 或 节点
- 何时应使用 Kubernetes 中的 Pod 水平自动扩缩(HPA)?
- 在 AKS 中使用群集自动缩放程序
- 使用 KEDA 插件
- 使用节点自动预配
- 使用Azure 容器实例创建虚拟节点
有关核心 Kubernetes 和 AKS 概念的详细信息,请参阅: