Kubernetes之HPA动态伸缩

一直以来,系统的自动弹性扩展是一个重点话题,希望系统可根据应用负载的变化而自动增加或者减少计算资源。
自动弹性扩展一般包括两种方式:
 水平扩展:针对实例数目的增减;
 垂直扩展:对单个实例可用资源的增减;

我们知道,通过Replication Controller可以非常方便地实现Pod的弹性伸缩,如果在此基础上,获取并分析Kubernetes平台所监控的Pod各项资源监控指标,就可以实现自动伸缩的功能,即基于Pod的资源使用情况,根据配置的策略自动调整Pod的副本数。

Horizontal Pod Autoscaler(HPA)属于水平扩展。在Kubernetes中通过Horizontal Pod Autoscaler来实现Pod的自动伸缩。

Horizontal Pod Autoscaler的操作对象是Replication Controller、Deployment/Replica Set对应的Pod,根据监测到各关联Pod的CPU实际平均使用率与用户的期望值进行比对,从而做出是否需要增减Pod实例数量的决策,并通过Replication Controller来调整Pod的副本数,实现自动伸缩。目前使用heapSter来检测Pod的CPU使用量,检测周期默认是30s。

举例说明通过创建Horizontal Pod Autoscaler来实现Nginx Pod的自动弹性伸缩,HorizontalPod Autoscaler定义文件deployment.yaml如下:

apiVersion: apps/v1   
kind: HorizontalPodAutoscaler
metadata:
  name: mydeployment
  namespace: default
spec:
	scaleRef: 
	kind: ReplicationController
	name: mydeployment
	subresource: scale	
minReplicas: 1
maxReplicas:        
cpuUtilization:
  targetPercentage: 60
    

在此Horizontal Pod Autoscaler中通过.spec.scaleRef指定对应的Replication Controller,.spec.minReplicas和.spec.maxReplicas分别设定Pod可伸缩的最小和最大副本数。另外,其设置了自动伸缩策略:当所有关联Pod的CPU平均使用率超过60%的时候进行扩容,而少于60%的时候进行缩容。

在Horizontal Pod Autoscaler Controller检测到CPU的实际使用量之后,会求出当前的CPU使用率(实际使用量与Pod请求量的比率)。然后,Horizontal Pod Autoscaler Controller会通过调整副本数量使得CPU使用率尽量向期望值靠近。

另外,由于自动扩展的决策一般需要一段时间后才会显现,而且在短期内还会引入一些新的CPU负荷(如创建或者删除Pod等)。比如,当Pod所需要的CPU负荷过大,经过分析判断需要运行一个新的Pod进行分流,在新建Pod的过程中系统的CPU使用量可能会有一个攀升的过程。因此,在每次决策后的一段时间内将不再进行扩展决策。对于水平扩容(ScaleUp)而言,这个时间段为3分钟;对于水平收缩(ScaleDown)而言,这个时间段为5分钟。再者,Horizontal Pod Autoscaler Controller允许一定范围内的CPU使用量的不稳定,也就是说,出于维护系统稳定性的考虑,只有当CurrentPodConsumption/Target的比值低于0.9或者高于1.1时才进行实例调整。

参考书籍:《基于Kubernetes的容器云平台实战》

个人github账号:https://github.com/SpecialAll

你可能感兴趣的:(容器虚拟化,kubernetes,HPA)