三、指标类型
Master的kube-controller-manager服务持续监测目标Pod的某种性能指标,以计算是否需要调整副本数量,目前kubernetes监测的性能指标
- Pod资源使用率:Pod级别的性能指标,通常一个比率值,例如CPU使用率
- Pod自定义指标:Pod级别的性能指标,通常是一个数值,例如接收请求数量
- Object自定义指标或外部自定义指标:通常是一个数值,需要容器以某种方式提供,例如通过HTTP URL“/metrics”提供,或者使用外部服务提供性能指标采集URL
四、扩缩容算法
1. 设置期望值
Autoscaler控制器从聚合API获取到Pod性能指标数据后,基本下面的算法计算出目标Pod副本数量,与当前运行Pod副本数量进行比对,决定是否需要进行扩缩容 *** 作。
desiredReplicas = ceil[currentReplicas * (currentMetricValue/desiredMetricValue)] # 期望Pod副本数 = 当前Pod副本数 X ( 当前指标值 / 期望指标值 ),将结果向上取整 #例如(CPU请求数量为例),如果用户设置的期望指标值为100m,当前实际使用指标值为200m,计算得到期望的Pod副本数量应该为两个(200/100 = 2)。如果当前实际使用为50m,计算结果为0.5,向上取值为1,得到 #目标Pod副本数量应该为 1
当计算结果与1非常接近时,可以设置一个容忍度让系统不做扩容 *** 作。容忍度通过kube-controller-manager服务启动参数,--horizontal-pod-autoscaler-tolerance进行设置,默认值为0.1(10%),表示基于上述算法得到的结果在[-10%, +10%]区间内,即[0.9, 1.1]区间,控制器不会进行扩缩容 *** 作。
2. 设置期望值指标为平均值
可以将期望指标值设置为指标的平均值类型,例如targetAveragevalue或targetAverageUtilization,此时当前指标值(currentMetricsValue)的算法为所有Pod副本当前指标值的总和除以Pod副本数量得到的平均值。
- Pod正在被删除(设置了删除时间戳):将不计入目标Pod副本数量
- Pod的当前指标值无法获取:本次探测不会讲这个Pod纳入目标Pod副本数量,后续探测会重新纳入计算范围
- 如果指标类型是CPU使用率,则对于正在启动但还没有达到Ready状态的Pod,也暂时不会纳入目标副本Pod数量范围
使用HPA特性时,可能因为指标的动态变化造成Pod副本数量频繁变动,这也被称为“抖动”。抖动会影响业务稳定性,在Kubernetes 1.12版本增加了参数来解决这个问题,HPA扩缩容冷却时间,即从上次扩缩容执行结束之后,需要经过最少多长时间进行扩缩容 *** 作,从而消除短时间内指标值快速波动产生的影响。对该参数调整需要根据当前生产环境的时间调整。时间过短还是会存在都用,时间过长,导致HPA失效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)