Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现POD水平自动伸缩的功能。自动扩展主要分为两种:php
HPA属于前者。它能够根据CPU使用率或应用自定义metrics自动扩展Pod数量(支持 replication controller、deployment 和 replica set)node
节点扩缩容层面,k8s集群的Cluster Autoscaler持续监控Pods,一旦发现Pods没法被schedule,则基于PodConditoin进行扩展,即node节点的自动扩缩容,具体内容在后续文章中介绍。git
1.部署和运行php-apache并将其暴露成为服务github
2.建立HPAapache
若是为1.8及如下的k8s集群,指标正常,若是为1.11集群,须要执行以下操做。api
4.向php-apache服务增长负载,验证自动扩缩容服务器
启动一个容器,并经过一个循环向php-apache服务器发送无限的查询请求(请在另外一个终端中运行如下命令)spa
5.观察HPA是否生效3d
用yaml建立HPA的方式为:code
HPA由一个控制循环实现,循环周期由--horizontal-pod-autoscaler-sync-period 标志指定,默认是30秒,每一个周期内,controller-manager会查询HPA中定义的metric的资源利用率。
如上例子,pod的request定义为200M,而HPA定义的target为50%,即HPA将经过增长或者减小Pod副本的数量(经过Deployment)以保持全部Pod的平均CPU利用率在50%之内(即200*0.5=100M之内),循环周期到达时,获取pod的1分钟内的平均cpu利用率(从heaspter),发现超过了100M,为332M,因而经过下面的公式,决定最终的pod数量
TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)
即 332/50 =6.xxx ceil为向上取整,获得7。若是获得的结果大于10,则为10
由于每次HPA生效都会建立或者删除pod,而这些操做其实会影响到metric监控值,如建立pod会暂时性的升高cpu,所以每次扩容都要间隔3分钟,缩容须要间隔5分钟。且须要知足:avg(CurrentPodsConsumption)/ Target降低9%,进行缩容,增长至10%才进行扩容
这样作好处是:
一、判断的精度高,不会频繁的扩缩pod,形成集群压力大。
二、避免频繁的扩缩pod,防止应用访问不稳定
实现hpa的条件:
一、hpa不能autoscale daemonset类型control
二、要实现autoscale,pod必须设置request
参考:https://github.com/kubernetes...
本文为容器监控实践系列文章,完整内容见:container-monitor-book