文章目录
一、背景
弹性伸缩是根据用户的业务需求和策略,自动“调整”其“弹性资源”的管理服务。通过弹性伸缩功能,用户可设置定时、周期或监控策略,恰到好处地增加或减少“弹性资源”,并完成实例配置,保证业务平稳健康运行。
二、K8S中自动伸缩的方案
在Kubernetes的生态中,在多个维度、多个层次提供了不同的组件来满足不同的伸缩场景。
1、CA(Cluster Autoscaler):Node级别自动扩/缩容cluster-autoscaler组件
2、HPA(Horizontal Pod Autoscaler):Pod个数自动扩/缩容
3、VPA(Vertical Pod Autoscaler):Pod配置自动扩/缩容,主要是CPU、内存,addon-resizer组件
2.1、CA
2.2、HPA
2.2.1、简介
kubectl scale命令可以来实现Pod的扩缩容功能,但是需要手动操作,面对线上环境的各种复杂情况,我们需要能够做到自动化的去感知业务,来自动进行扩缩容。为此,kubernetes提供了这样的一个资源对象: Horizontal Pod Autoscaling(Pod水平自动伸缩),简称HPA,HPA通过监控分析一些控制器控制的所有Pod的负载变化情况来确定是否需要调整Pod的副本数量。

1、Pod水平自动扩缩(Horizontal Pod Autoscaler) 可以基于CPU利用率自动扩缩ReplicationController、Deployment、ReplicaSet 和StatefulSet中的Pod数量。 除了CPU利用率,也可以基于其他应程序提供的自定义度量指标来执行自动扩缩。 Pod自动扩缩不适用于无法扩缩的对象,比如DaemonSet。
2、Pod水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源决定了控制器的行为。 控制器会周期性地调整副本控制器或Deployment中的副本数量,以使得类似Pod 平均CPU利用率、平均内存利用率这类观测到的度量值与用户所设定的目标值匹配。
3、Pod水平自动扩缩器的实现是一个控制回路,由kube-controller-manager控制器管理器的 --horizontal-pod-autoscaler-sync-period 参数指定周期(默认值为 15 秒)。
2.2.2、API版本
HPA的API有三个版本,通过kubectl api-versions | grep autoscal可看到,如下图所示:

补充说明:
1、autoscaling/v1只支持基于CPU指标的缩放
2、autoscaling/v2beta1支持内存和自定义指标的缩放
3、autoscaling/v2beta2支持内存、自定义指标和、ExternalMetrics(额外指标)的缩放,但是目前也仅仅是处于beta阶段
2.3、VPA
2.3.1、简介
Vertical Pod Autoscaler(VPA):垂直Pod自动扩缩容,用户无需为其pod中的容器设置最新的资源request。配置后,它将根据使用情况自动设置request,从而允许在节点上进行适当的调度,以便为每个pod提供适当的资源量。
2.3.2、工作原理
VPA会自动计算这些Pod中容器的流程以及当前的CPU和内存使用情况,并使用这些数据来决定优化的资源限制和请求,以确保这些Pod始终处于较高的资源利用率的状态。例如你有一个Pod使用了CPU的50%,但只请求10%。VPA会认定该Pod消耗的CPU多于请求的CPU,那么它会使工作负载例如Deployment会重启Pod来生效新的推荐值,从而实现垂直的资源扩缩容。
这里有几个点需要注意:
1、VPA目前还处于测试阶段,并未大规模生产使用
2、VPA 在伸缩的过程中是通过重启 Pod 来生效调整 Request 和 Limit 的值的,那么很多业务能否支持优雅的重启需要根据实际的情况来判断是否可以接受

本文详述了Kubernetes中的自动伸缩机制,包括CA、HPA、VPA和KPA。HPA基于CPU和内存指标实现Pod水平自动扩缩容,VPA则负责垂直方向的自动调整,而KPA是Knative的扩缩容方案。文章通过实例演示了如何配置和使用这些工具,展示了如何在不同场景下实现Pod的弹性管理。
最低0.47元/天 解锁文章
403

被折叠的 条评论
为什么被折叠?



