Kubernetes 系列 Horizontal Pod Autoscaler

一.介绍 

  前面讲通过Deployment等资源对象,通过手工执行kubectl scale命令,我们可以实现pod扩容或缩容,但不够自动化、智能化。 分布式系统要能够根据当前负载的变化情况自动触发水平扩展或缩容的行为,因为这一过程可能是频繁发生的,不可预料的,所以手动控制的方式是不现实的。

  Horizontal Pod Autoscaler为pod的横向自动扩展,简称HPA。在k8s  v1.6开始,对根据应用自定义指标进行自动扩容和缩容的功能进行增强,API版本为autoscaling/v2alpha1, 仍在不断演进过程中。

  HPA与 RC、Deployment一样,也属于一种k8s资源对象。通过追踪分析rc控制的所有目标pod的负载变化情况,来确定是否需要针对性地调整目标pod的副本数,这是hpa的实现原理。当前hpa可以有以下两种方式作为pod负载的度量指标:

  1.cpuUtilizationPercentage

  2应用程序自定义的度量指标,比如服务在每秒内的相应的请求数(TPS或QPS)

    QPS:Queries Per Second意思是“每秒查询率
    TPS:是TransactionsPerSecond的缩写,也就是事务数/秒

二. cpuUtilizationPercentage 

   cpuUtilizationPercentage是一种算术平均值,即目标pod所有副本自身的cpu利用率的平均值。比如我们定义一个pod的pod request为0.4,而当前pod的cpu使用量为0.2,则它的cpu使用率为50%, 如果某一时刻cpuUtilizationPercentage的值超过80%,则意味着当前的pod副本数很可能不足以支撑接下来更多的请求,需要进行动态扩容,而当请求高峰时段过去后,pod的cpu利用率又会降下来,此时对应的pod副本数应该自动减少到一个合理的水平。

   使用cpuUtilizationPercentage计算过程中,使用到的pod的cpu使用量通常是1min(分钟)内的平均值,目前通过查询Heapster扩展组件来得到这个值,所以需要安装部署Heapster

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 90

  上面定义,知道这个HPA控制的目标对象为一个名叫php-apache的deploymnet里的pod副本,当这些pod副本的cpuUtilizationPercentage值超过90%时,会触发自动动态扩容行为,扩容或缩容时必须满足的一个约束条件是pod的副本数要介于1与10之间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值