如果您业务的资源需求不易预测或有周期性变化(例如Web应用、游戏服务、在线教育等),推荐您在集群中启用弹性伸缩。根据负载需求情况,工作负载伸缩支持自动调整应用Pod的副本数量或资源配置,计算资源伸缩支持自动调整节点资源,从而平稳应对流量峰值并降低成本。
使用前说明
本文面向集群运维人员、开发人员等介绍ACK集群的弹性伸缩方案(工作负载伸缩和节点伸缩)。建议您已了解社区工作负载伸缩方案(例如HPA、VPA等)和节点伸缩方案(例如Cluster Autoscaling)的相关内容等。
如果您的集群为大规模集群(通常为超过500个节点或者10,000个Pod的集群),请参见规划集群资源弹性速率了解相关使用建议,以确保集群和控制面的稳定性。
工作负载伸缩和计算资源伸缩
ACK的弹性伸缩提供以下两种维度的方案。
工作负载伸缩:调度层弹性方案,作用于Pod,通过增减Pod副本数量或调整Pod资源配置来适应负载变化。例如,HPA支持根据工作负载流量自动调整工作负载Pod的副本数,调整的副本数会改变当前负载占用的调度容量,从而实现调度层的伸缩。
计算资源伸缩:资源层弹性方案,包括节点伸缩方案和虚拟节点方案,支持根据Pod的调度情况和资源使用情况动态地添加或移除计算资源。
推荐您将两种方案搭配使用,既能通过调整工作负载Pod副本数来提高资源利用率,又能在集群维度通过调整计算资源容量来保证Pod总能获得足够的计算资源。
工作负载伸缩方案
Kubernetes支持使用kubectl scale
命令手动调整工作负载Pod的数量,但需要运维人员自行判断,仅适用于临时性的副本数管理。您可以参见下表选择方案,享受ACK工作负载伸缩方案在成本控制、稳定性保障和资源容量灵活管理等维度提供的支持。
方案 | 介绍 | 扩缩依据的指标 | 使用场景 | 相关文档 |
HPA | 在业务负载上升时快速扩容Pod副本来缓解压力,在业务负载变小时适当缩容以节省资源,是最常用的应用弹性方案。 |
| 服务波动较大、服务数量多且需要频繁扩缩容的在线业务场景,例如电商服务、在线教育、金融服务等。 | |
CronHPA | 类似Crontab的策略,定时对Pod进行扩缩容,可配置时区、执行的日期、跳过执行的日期(例如节假日),支持和HPA协同使用。 | 定时扩缩容 | 业务流量有明显高峰时段、应用程序需要在特定时间执行任务等场景。 | |
VPA | 监控Pod的资源消耗模式,灵活推荐CPU和内存资源分配的配置,并在适当的情况下自动进行调整,而不调整Pod的副本数量。 | 推荐并自动调整Pod中容器的CPU及内存的Request和Limit | 需要稳定资源配置的有状态应用的扩容、大型单体应用等场景,通常是在Pod出现异常恢复时生效。 | |
KEDA | 支持丰富的事件源,为工作负载提供事件驱动的自动伸缩能力。 | 事件数量,例如队列长度 | 需要即时弹性的场景,尤其是基于事件源的离线作业场景,例如音视频离线转码、事件驱动作业、流式数据处理等。 | |
AHPA | 根据业务历史指标,自动、主动识别弹性周期并对容量进行预测,提前进行弹性规划,解决弹性滞后的问题。 |
| 业务流量有明显周期性的场景,例如直播、在线教育、游戏服务等。 |
此外,您也可以使用UnitedDeployment来定义工作负载。UnitedDeployment通过弹性单元Subset来灵活、便捷地管理多个同质的工作负载,动态分配在各Subset上的工作负载副本数量。您可以将UnitedDeployment和上述工作负载伸缩方案搭配使用,实现工作负载的灵活扩缩容与调度,例如多种计算资源混合使用场景。更多信息,请参见基于UnitedDeployment实现工作负载的伸缩。
计算资源伸缩方案
在业务量波动大、需要快速响应的场景下,集群需要一种能够根据工作负载变化情况自动调整计算资源的方案,以在提高系统弹性的同时降低运维成本。计算伸缩方案提供的组件会监听Pod是否处于调度失败的状态,以判断是否需要新增ECS节点或ECI Pod资源。
您可以参见节点伸缩概述了解节点伸缩的功能原理。
下表提供的资源交付数据仅为理论值(参考值),实际数据以您的操作环境为准。
方案 | 介绍 | 使用场景 | 资源交付速度 | 相关文档 |
节点自动伸缩 | 当集群的容量规划无法满足应用Pod调度时,自动调整节点的数量。 | 全场景通用,面向在线业务、深度学习等场景,适用于扩容规模较小(例如开启弹性的节点池数量少于20,或对应节点池中的节点数量少于100),工作负载批次较为稳定,以单次伸缩为主等业务场景。 | 以100节点为一个交付批次为例: | |
节点即时弹性 | 在节点自动伸缩的基础上,节点即时弹性在伸缩速度和效率、资源交付确定性等方面更具优势,还支持根据ECS实例的库存查看健康度。 | 全场景通用, 集群规模较大(例如弹性节点池中节点数大于100,或弹性节点池数大于20)、对资源交付速度有更高要求、期望灵活实现多实例规格和跨可用区自动伸缩、对高级调度策略(例如TopologySpread Constraints)有需求。 | 以100节点为一个交付批次为例:
| |
虚拟节点 | 无需节点运维和容量规划,支持单集群超大Pod容量(最多可支持50000个Pod),突发业务流量场景下能够扩容工作负载Pod,实现每分钟10000 Pod弹性能力。 | 全场景通用,尤其适用于任务和定时任务、数据计算、AI、突发业务等场景。 | 以1000个Pod作为一个交付批次为例:
|
计费说明
弹性伸缩功能本身不收费,但弹性伸缩组件会占用Pod资源(节点伸缩的情况下需要至少保留一个节点)。节点伸缩方案下,扩容节点资源产生的计费会正常收取。更多信息,请参见计费概述。
常见问题
如您在使用弹性伸缩功能时遇到问题,可参见弹性伸缩FAQ进行排查。
相关文档
在一些预安装或者高性能场景下,您可能期望使用弹性性能优化的操作系统镜像,提高复杂场景下弹性伸缩的便捷性,请参见弹性优化之自定义镜像。
如需收集弹性伸缩的日志,请参见收集系统插件日志。
推荐您在配置工作负载时结合工作负载推荐配置中的使用建议。
在Serverless容器场景下,Knative支持基于请求数或并发数扩缩容,当请求为零时可将Pod副本数量自动缩容至零,更多信息,请参见Knative概述、基于流量请求数实现服务自动扩缩容。