kubernetes水平自动伸缩算法

1、Pod 水平自动伸缩的实现是一个控制循环,由 controller manager 的 --horizontal-pod-autoscaler-sync-period 参数 指定周期(默认值为15秒)。每个周期内,controller manager 根据每个 HorizontalPodAutoscaler 定义中指定的指标查询资源利用率,指标数据通常由 metrics-server(需要额外启动)提供。

2、POD的CPU使用率=POD实际使用的CPU/POD请求的CPU,其中POD请求的CPU是指deployment yaml中的containers.resources.requests.cpu,如果deployment yaml中没有设置containers.resources.requests.cpu,则不会自动伸缩,CPU使用率跟containers.resources.limits.cpu无关。

3、期望副本数 = ceil[当前副本数 * ( 当前指标 / 期望指标 )],如果计算出的缩放比例(当前指标 / 期望指标)接近1.0(跟据--horizontal-pod-autoscaler-tolerance 参数全局配置的容忍值,默认为0.1),则放弃本次缩放,即缩放比例必须<0.9才会向下缩容,缩放比例必须>1.1才会向上伸容,其中当前指标是指所有POD的平均CPU使用率,期望指标是指HPA设置的CPU使用率阈值。

4、当使用 Horizontal Pod Autoscaler 管理一组副本缩放时, 有可能因为指标动态的变化造成副本数量频繁的变化,这被称为 抖动。从 v1.12 开始,使用kube-controller-manager 的参数:--horizontal-pod-autoscaler-downscale-stabilization,表示缩容冷却时间,即自从上次伸缩执行结束后,多久可以执行缩容,默认时间是5分钟。

5、pod 水平缩放控制器无法准确的知道 pod 什么时候就绪, 也就无法决定是否暂时搁置该 pod。 --horizontal-pod-autoscaler-initial-readiness-delay 参数(默认为30s),用于设置 pod 准备时间, 在此时间内的 pod 统统被认为未就绪。 --horizontal-pod-autoscaler-cpu-initialization-period参数(默认为5分钟),用于设置 pod 的初始化时间, 在此时间内的 pod,CPU 资源指标将不会被采纳。计算缩放比例时,会排除掉被搁置的 pod。

标签: kubernetes水平自动伸缩算法

添加新评论