全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:弹性伸缩概述

更新时间:Dec 25, 2024

如果您业务的资源需求不易预测或有周期性变化(例如Web应用、游戏服务、在线教育等),推荐您在集群中启用弹性伸缩。根据负载需求情况,工作负载伸缩支持自动调整应用Pod的副本数量或资源配置,计算资源伸缩支持自动调整节点资源,从而平稳应对流量峰值并降低成本。

使用前说明

  • 本文面向集群运维人员、开发人员等介绍ACK集群的弹性伸缩方案(工作负载伸缩节点伸缩)。建议您已了解社区工作负载伸缩方案(例如HPAVPA等)和节点伸缩方案(例如Cluster Autoscaling)的相关内容等。

  • 如果您的集群为大规模集群(通常为超过500个节点或者10,000个Pod的集群),请参见规划集群资源弹性速率了解相关使用建议,以确保集群和控制面的稳定性。

工作负载伸缩和计算资源伸缩

ACK的弹性伸缩提供以下两种维度的方案。

  • 工作负载伸缩:调度层弹性方案,作用于Pod,通过增减Pod副本数量或调整Pod资源配置来适应负载变化。例如,HPA支持根据工作负载流量自动调整工作负载Pod的副本数,调整的副本数会改变当前负载占用的调度容量,从而实现调度层的伸缩。

  • 计算资源伸缩:资源层弹性方案,包括节点伸缩方案和虚拟节点方案,支持根据Pod的调度情况和资源使用情况动态地添加或移除计算资源。

推荐您将两种方案搭配使用,既能通过调整工作负载Pod副本数来提高资源利用率,又能在集群维度通过调整计算资源容量来保证Pod总能获得足够的计算资源。

工作负载伸缩方案

image

Kubernetes支持使用kubectl scale命令手动调整工作负载Pod的数量,但需要运维人员自行判断,仅适用于临时性的副本数管理。您可以参见下表选择方案,享受ACK工作负载伸缩方案在成本控制、稳定性保障和资源容量灵活管理等维度提供的支持。

方案

介绍

扩缩依据的指标

使用场景

相关文档

HPA

在业务负载上升时快速扩容Pod副本来缓解压力,在业务负载变小时适当缩容以节省资源,是最常用的应用弹性方案。

服务波动较大、服务数量多且需要频繁扩缩容的在线业务场景,例如电商服务、在线教育、金融服务等。

使用容器水平伸缩(HPA)

CronHPA

类似Crontab的策略,定时对Pod进行扩缩容,可配置时区、执行的日期、跳过执行的日期(例如节假日),支持和HPA协同使用。

定时扩缩容

业务流量有明显高峰时段、应用程序需要在特定时间执行任务等场景。

VPA

监控Pod的资源消耗模式,灵活推荐CPU和内存资源分配的配置,并在适当的情况下自动进行调整,而不调整Pod的副本数量。

推荐并自动调整Pod中容器的CPU及内存的Request和Limit

需要稳定资源配置的有状态应用的扩容、大型单体应用等场景,通常是在Pod出现异常恢复时生效。

使用容器垂直伸缩(VPA)

KEDA

支持丰富的事件源,为工作负载提供事件驱动的自动伸缩能力。

事件数量,例如队列长度

需要即时弹性的场景,尤其是基于事件源的离线作业场景,例如音视频离线转码、事件驱动作业、流式数据处理等。

事件驱动弹性

AHPA

根据业务历史指标,自动、主动识别弹性周期并对容量进行预测,提前进行弹性规划,解决弹性滞后的问题。

  • 资源指标(CPU、内存、GPU使用率)

  • 流量指标(QPS、RT)

  • 其他自定义指标

业务流量有明显周期性的场景,例如直播、在线教育、游戏服务等。

AHPA概述

此外,您也可以使用UnitedDeployment来定义工作负载。UnitedDeployment通过弹性单元Subset来灵活、便捷地管理多个同质的工作负载,动态分配在各Subset上的工作负载副本数量。您可以将UnitedDeployment和上述工作负载伸缩方案搭配使用,实现工作负载的灵活扩缩容与调度,例如多种计算资源混合使用场景。更多信息,请参见基于UnitedDeployment实现工作负载的伸缩

计算资源伸缩方案

image

在业务量波动大、需要快速响应的场景下,集群需要一种能够根据工作负载变化情况自动调整计算资源的方案,以在提高系统弹性的同时降低运维成本。计算伸缩方案提供的组件会监听Pod是否处于调度失败的状态,以判断是否需要新增ECS节点或ECI Pod资源。

您可以参见节点伸缩概述了解节点伸缩的功能原理。

重要

下表提供的资源交付数据仅为理论值(参考值),实际数据以您的操作环境为准。

方案

介绍

使用场景

资源交付速度

相关文档

节点自动伸缩

当集群的容量规划无法满足应用Pod调度时,自动调整节点的数量。

全场景通用,面向在线业务、深度学习等场景,适用于扩容规模较小(例如开启弹性的节点池数量少于20,或对应节点池中的节点数量少于100),工作负载批次较为稳定,以单次伸缩为主等业务场景。

以100节点为一个交付批次为例:

启用节点自动伸缩

节点即时弹性

节点自动伸缩的基础上,节点即时弹性在伸缩速度和效率、资源交付确定性等方面更具优势,还支持根据ECS实例的库存查看健康度。

全场景通用, 集群规模较大(例如弹性节点池中节点数大于100,或弹性节点池数大于20)、对资源交付速度有更高要求、期望灵活实现多实例规格和跨可用区自动伸缩、对高级调度策略(例如TopologySpread Constraints)有需求。

以100节点为一个交付批次为例:

虚拟节点

无需节点运维和容量规划,支持单集群超大Pod容量(最多可支持50000个Pod),突发业务流量场景下能够扩容工作负载Pod,实现每分钟10000 Pod弹性能力。

全场景通用,尤其适用于任务和定时任务、数据计算、AI、突发业务等场景。

以1000个Pod作为一个交付批次为例:

通过虚拟节点将Pod调度到ECI上运行

计费说明

弹性伸缩功能本身不收费,但弹性伸缩组件会占用Pod资源(节点伸缩的情况下需要至少保留一个节点)。节点伸缩方案下,扩容节点资源产生的计费会正常收取。更多信息,请参见计费概述

常见问题

如您在使用弹性伸缩功能时遇到问题,可参见弹性伸缩FAQ进行排查。

相关文档