弹性伸缩概述

弹性伸缩是根据业务需求和策略,经济地自动调整弹性计算资源的管理服务。本文介绍弹性伸缩的背景信息和弹性伸缩涉及的组件。

背景介绍

弹性伸缩是ACK被广泛采用的功能,典型的场景包含在线业务弹性、大规模计算训练、深度学习GPU或共享GPU的训练与推理、定时周期性负载变化等。弹性伸缩分为两个维度:

  • 工作负载伸缩(调度层弹性):主要负责修改工作负载的调度容量变化。例如,HPA是典型的调度层弹性组件,可以调整应用的副本数,调整的副本数会改变当前负载占用的调度容量,从而实现调度层的伸缩。

  • 节点伸缩(资源层弹性):在集群的容量规划不能满足集群调度容量时,会扩容节点资源,进行调度容量的补充。

两层的弹性组件与能力可以分开使用,也可以结合在一起使用,并且两者之间是通过调度层面的容量状态进行解耦。

ACK弹性伸缩组件介绍

弹性伸缩工作负载伸缩弹性组件

组件名称

组件介绍

适用场景

使用限制

参考文档

HPA

Kubernetes内置组件,主要面向在线业务。

在线业务

适用于Deployment、StatefulSet等实现scale接口的对象。

使用容器水平伸缩(HPA)

VPA(alpha)

开源社区组件,主要面向大型单体应用。

大型单体应用

适用于无法水平扩展的应用,通常是在Pod出现异常恢复时生效。

使用容器垂直伸缩(VPA)

CronHPA

ACK开源的组件,主要面向应用资源使用率存在周期性变化的场景。

周期性负载业务

适用于Deployment、StatefulSet等,实现了scale接口的对象。此外CronHPA提供了HPA对象的兼容能力,您可以同时使用CronHPA与HPA。

使用容器定时水平伸缩(CronHPA)

UnitedDeployment

ACK组件,主要面向精细化角度场景,例如希望在不同的可用区进行负载分布。

精细调度场景

适用于在线业务精细化控制的场景。例如,一个Deployment的部分应用运行在ECS上,而超出的部分运行在ECI上。

在ACK上使用UnitedDeployment

节点伸缩弹性组件

组件名称

组件介绍

适用场景

资源交付速度

参考文档

cluster-autoscaler组件

Kubernetes社区开源组件,节点水平伸缩组件,阿里云提供了调度、弹性优化、成本优化的功能。

全场景支持,适合在线业务、深度学习、大规模成本算力交付等。

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

  • 标准模式:120s

  • 极速模式:60s

  • 标准模式-Qboot镜像:90s

  • 极速模式-Qboot镜像:45s

    关于Qboot镜像的更多信息,请参见什么是Alibaba Cloud Linux

启用节点自动伸缩

虚拟节点组件

ACK开源组件,提供无服务器运行时环境。开发者无需关心节点资源,只需针对Pod按量付费即可。

部分场景支持,主要包括在线突增流量、CI/CD、大数据作业。

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

  • 未开启镜像缓存:30s

  • 已开启镜像缓存:15s

即时弹性(GOATScaler)

即时弹性是一个基于事件驱动的节点伸缩控制器,兼容现有的开启集群自动弹性伸缩的节点池语义与行为。

支持所有类型的应用对其无感开启及使用。

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

  • ContainerOS:45s

  • 标准模式:103s

  • 极速模式:暂未开启

启用节点即时弹性

弹性伸缩日志

关于如何配置收集弹性伸缩的日志,请参见收集系统插件日志