hpa注意事项及外部指标使用

一、算法细节

  1. 公式:desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue ]
    期望副本数 =[当前副本数 * (当前指标 /期望指标)]  #结果向上取整
  2. 举例说明:当前指标为200m,目标设定值为100m,那么由于200.0 / 100.0 == 2.0, 副本数量将会翻倍。 如果当前指标为50m,副本数量将会减半,因为50.0 / 100.0 == 0.5
  3. 也可以将期望指标值(desiredMetricValue)设置为指标的平均值类型,例如 targetAverageValue 或 targetAverageUtilization,此时当前指标值(currentMetricValue)的算法为所有 Pod 副本当前指标值的总和除以 Pod 副本数量得到的平均值
  4. 异常pod处理:
    1)Pod 正在被删除(设置了删除时间戳):将不会计入目标 Pod 副本数量
    2)Pod 的当前指标值无法获得:本次探测不会将这个 Pod 纳入目标 Pod 副本数量,后续的探测会被重新纳入计算范围
    3)如果指标类型是 CPU 使用率,则对于正在启动但是还未达到 Ready 状态的 Pod,也暂时不会纳入目标副本数量范围
    4)即:在进行计算期望副本数时不包括以上pod
  5. 任何 pod 的指标缺失,则会更保守地重新计算平均值, 在需要缩小时假设这些 pod 消耗了目标值的 100%, 在需要放大时假设这些 pod 消耗了0%目标值
  6. 任何尚未就绪的pod,在不考虑遗漏指标或尚未就绪的pods的情况下进行伸缩, 我们保守地假设尚未就绪的pods消耗了期望指标的0%
  7. 如果创建 HorizontalPodAutoscaler 时指定了多个指标, 那么会按照每个指标分别计算缩放副本数,取最大的进行缩放
  8. 如果任何一个指标无法顺利的计算出缩放副本数, 那么本次缩放会被跳过

注意:当结果计算与 1 非常接近时,可以设置一个容忍度让系统不做扩缩容操作,默认值为 0.1(即 10%),表示基于上述算法得到的结果在 [-10% + 10% ] 区间内,即 [ 0.9 - 1.1],控制器都不会进行扩缩容操作

二、相关细节设置

--horizontal-pod-autoscaler-sync-period    #指定周期(默认15秒)
--horizontal-pod-autoscaler-tolerance    #容忍值,默认0.1,如果缩放比例接近0.1将会放弃缩放
--horizontal-pod-autoscaler-initial-readiness-delay    #用于设置 pod 准备时间, 在此时间内的 pod 统统被认为未就绪(默认30s)
--horizontal-pod-autoscaler-cpu-initialization-period    #用于设置 pod 的初始化时间, 在此时间内的 pod,CPU 资源指标将不会被采纳(默认5分钟)
--horizontal-pod-autoscaler-downscale-stabilization    #设置收缩冷却/延迟时间(默认5分钟);时间设置过短容易引起抖动(频繁伸缩),过长会导致响应不及时

三、注意事项

  1. 在单次扩容操作中可增加的副本数受到限制:
    如果当前副本数大于2,Autoscale单次操作至多使副本数翻倍,如果副本数只有1或2,最多扩展到4个副本
  2. 两次扩容操作之间的时间间隔限制
    只有当3分钟内没有任何伸缩操作时,才会触发扩容;缩容的频率是5分钟(--horizontal-pod-autoscaler-downscale-stabilization)
  3. Horizontal Pod Autoscaler 设置副本数量时, deployment 会设置底层副本数
posted @ 2020-04-06 18:07  jayce9102  阅读(...)  评论(...编辑  收藏