默认扩容缩容行为
要使用自定义扩缩,不必指定所有字段。 只有需要自定义的字段才需要指定。 这些自定义值与默认值合并。 默认值与 HPA 算法中的现有行为匹配。
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 100
periodSeconds: 15
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max
稳定窗口
默认下稳定窗口分为缩容稳定窗口和扩容稳定窗口。一般考虑可以快速的扩容,缩容量时候要稳定缩,防止由于指标下降过快减少实例。
缩容稳定窗口
当用于扩缩的指标持续抖动时,使用稳定窗口来限制副本数上下振动。 自动扩缩算法使用稳定窗口来考虑过去计算的期望状态,以防止扩缩。默认配置如下:
scaleDown:
stabilizationWindowSeconds: 300
当指标显示目标应该缩容时,自动扩缩算法查看之前计算的期望状态,并使用指定时间间隔内的最大值。 在上面的例子中,过去 5 分钟的所有期望状态都会被考虑。
扩容稳定窗口
扩容时候考虑指标上涨,可以快速增加实例,防止实例使用率过高崩溃,另外原因启动实例到实例通过健康检查得到流量还需要一段时间。默认值如下:
scaleUp:
stabilizationWindowSeconds: 0
默认缩容量策略
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 100
periodSeconds: 15
selectPolicy: Max
用于缩小稳定窗口的时间为 300 秒, 使用这300指标量最大值考虑缩容需要。只有一种缩容的策略,每15秒刷新缩容指标,允许 100% 删除当前运行的副本,这意味着扩缩目标可以缩小到允许的最小副本数。
注意: selectPolicy 如果在没有配置情况下,默认策略Max, 选择实数和百分比中大的一方
默认扩容策略
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max
对于扩容,没有稳定窗口。当指标显示目标应该扩容时,目标会立即扩容。 这里有两种策略,每 15 秒添加 4 个 Pod 或 100% 当前运行的副本数,直到 HPA 达到稳定状态。
调优扩容缩容策略
缩容策略
控制缩容速度
behavior:
scaleDown:
policies:
- type: Percent
value: 10
periodSeconds: 60
- type: Pods
value: 5
periodSeconds: 60
selectPolicy: Min
50 以下按照10%比例进行缩容,50个以上可以最多5个每分钟缩容。例如使用CPU使用率为50%为缩容策略。需要持续5分钟CPU使用率都低于50%才进行缩容,缩容时候如果实例在10个以内,每分钟一个进行缩容,直到指标稳定。
注意 如果在10个以内POD, 一次缩容最多为10%POD, 只有0~ 0.9值,会不影响缩容。答案否定。k8s向上取整到1.
缩容容忍度
例如配置CPU利用率50进行扩缩容,如果CPU使用率45 ~ 49 来回波动,会不导致实例来回增加减少呢。根据k8s--horizontal-pod-autoscaler-tolerance
参数全局配置的容忍值,默认为 0.1。代表10%, 增加了实例以后如果CPU在45 ~ 49来回波动,导致不断来回增加和减少实例。
扩容策略
k8s默认扩容策略还是比较完善,暂时不进行修改
滚动更新
创建deployment对应HPA以后,以后更新deployment,例如如下操作
$ kubectl apply -f deployment.yaml
需求确保deployment.yaml里面把spec.replicas
字段删除,否则就好覆盖当前replicas数目,例如spec.replicas=1,导致当前有多个实例减少一个这个严重事故。