Kubernetes autoscaling 自动扩缩容

很多时候需要对线上应用进行扩容和缩容,扩容以提高应用处理能力,缩容以节约成本;而以往的系统对在线扩缩容支持的并不是很好,或多或少都需要开发或运维人员介入;

Kubernetes提供的HPA - Horizontal Pod Autoscaler - Pod水平扩缩容,则解决了这个问题,只需要定义扩缩容的阈值,之后就交给Kubernetes处理即可。

基本概念

HPA默认 15s 执行一次 (当然也可以修改 --horizontal-pod-autoscaler-sync-period XXs),每次执行会查询资源的利用率(如果有多个pod则会计算平均值),之后与预先定义的指标/阈值进行比较,进而计算出目标 副本数量;

关于如何收集度量值,可通过一系列的聚合API进行,比如 metrics.k8s.iocustom.metrics.k8s.ioexternal.metrics.k8s.io

算法细节

期望的副本数量 = 当前副本数量 * (当前指标 / 期望指标)

举个例子,假设当前的 副本数量为1,当前指标比如CPU使用率是 80%,而期望的CPU使用率是 40%,那么 1 * (80/40) = 2,也就是说副本数量需要翻倍;而假设当前副本数量为2,当前指标比如CPU使用率是 20%,而期望的CPU使用率是 40%,那么2 * (20/40) = 1,则当前副本数量需要减半;

当然上面的当前指标值是个平均值(正在terminating或fail的pod都不会被统计);

同时,如果 当前指标/期望指标 的比例等于1,或者说在一个容忍范围内(--horizontal-pod-autoscaler-tolerance 默认0.1),则会放弃扩容活缩容;

配置HPA

kubectl 的 HPA 设置,kubectl autoscale rs rsname --min=2 --max=5 --cpu-percent=80,则会对名为rsname的replicationset (除此之外还可以设置deployment) 设置一个 hpa 对象,副本数量介于2-5之间,目标CPU使用率为80%;

Java client fabric8的 HPA 设置,这里贴的是老版本的fabric8

HorizontalPodAutoscaler horizontalPodAutoscaler = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值