You need to enable JavaScript to run this app.
导航

工作负载伸缩原理

最近更新时间2023.07.31 17:57:19

首次发布时间2022.03.04 23:10:38

工作负载伸缩主要是指通过增加应用负载副本的方式,修改负载的调度容量。本文为您介绍常见的工作负载伸缩的工作原理。

指标伸缩

HPA(Horizontal Pod Autoscaler,水平 Pod 弹性伸缩)在 Kubernetes 集群中用于 Pod 水平自动伸缩,它基于 CPU 和内存利用率、GPU/GPU 显存使用率、网络吞吐率等,对 Deployment 和 Replicaset 控制器中的 Pod 数量进行自动扩缩容。

HPA 由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为,控制器会周期性的获取 CPU 和内存利用率、GPU/GPU 显存使用率、网络吞吐率等,并与目标值相比较后,用来调整 Replication Controller 或 Deployment 中的副本数量。
alt

HPA 由一个控制循环实现,循环周期由 Controller Manager 中的--horizontal-pod-autoscaler-sync-period标志指定。

在每个周期内的流程如下:

  • Controller Manager 会查询 HPA 中用户定义的资源 期望指标
  • 同时,Controller Manager 会基于 Resource Metric API( Metrics Server 实现),获取每个 Pod 的资源 当前指标
  • HPA 根据 当前指标期望指标 来计算扩缩比例。

    说明

    计算公式为:期望副本数 = ceil [ 当前副本数 × ( 当前指标 / 期望指标 ) ]。其中,ceil 表示向上取整。

    例如:
    • 如果 CPU 当前指标为200毫核,期望指标为100毫核,那么由于200.0/100.0 = 2.0, 副本数量将会翻倍。
    • 如果 CPU 当前指标为50毫核,期望指标为100毫核,那么由于50.0/100.0 = 0.5。副本数量将会减半。
    • 如果计算出的扩缩比例接近 1.0 ,根据 Kubernetes HPA 计算方法:|扩缩比例 - 1.0| <= 容忍值,将会放弃本次扩缩容。社区版本中默认的容忍值为 0.1(即--horizontal-pod-autoscaler-tolerance参数全局配置的容忍值)。

HPA 可以配置单个或多个期望指标,配置单个期望指标时,只需要对 Pod 当前指标求和,除以期望目标值,然后向上取整,就能得到期望的副本数。例如有一个 Deployment 控制有 3 个 Pod,每个 Pod 的 CPU 使用率是 70%、50%、90%,而 HPA 中配置的 CPU 期望使用率为 50%,计算期望副本数=(70 + 50 + 90)/50 = 4.2,向上取整得到 5,即期望副本数就是 5。

如果是配置多个期望指标,则会分别计算单个期望指标的期望副本数量,然后取其中最大值,就是最终的期望副本数量。

说明

HPA 不适用于无法缩放的对象,比如 DaemonSets。

定时伸缩

定时弹性伸缩是一种预设任务,可以在指定时间执行指定伸缩规则,实现自动扩容或者缩容计算资源,满足业务需求的同时又能控制成本。

定时弹性伸缩比较适合业务和时间有明确相关性的场景。例如,互联网电商的秒杀大促场景。由于互联网电商的秒杀大促的时间开始时间较为固定。此时,就可以使用定时弹性伸缩功能,在指定的时间段内对工作负载进行自动扩容,保证整个系统的工作正常。