1 HPA的作用
应用的资源使用率通常都有高峰和低谷的时候,如何提高集群的整体资源利用率,让service中的Pod个数根据利用情况自动调整呢?
这就有赖于HPA(Horizontal Pod Autoscaling),即Pod水平自动缩放。
HPA伸缩过程:
收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization)
对比在扩容条件里记录的cpu限额(CPUUtilization)
调整实例数(必须要满足不超过最大/最小实例数)
每隔30s做一次自动扩容的判断
CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过metrics可以直接获取到)除以cpu request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod CPU核心的使用占比。
HPA进行伸缩算法:
计算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)
ceil()表示取大于或等于某数的最近一个整数
每次扩容后冷却3分钟才能再次进行扩容,而缩容则要等5分钟后。
当前Pod Cpu使用率与目标使用率接近时,不会触发扩容或缩容:
触发条件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9
部署HPA-cpu
上传镜像到私有仓库
创建目录,编辑文件
[root@server2 ~]# mkdir hap
[root@server2 ~]# cd hap/
[root@server2 hap]# vim deploy.yaml
[root@server2 hap]# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment Deloymnet控制器
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: hpa-example 使用镜像hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m cpu上限0.5
requests: cpu下限0.2
cpu: 200m
---
apiVersion: v1
kind: Service svc
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
创建pod,svc
设定HPA控制器,名字叫php-apache,cpu目标使用率是百分之五十,副本最小个数为1,最大个数为10
[root@server2 hap]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled
查看pod的cpu和内存使用情况
进行压力测试,测试hpa是否生效,HPA 将增加或者减少 Pod 副本的数量来保持所有 Pod 的平均 CPU 利用率在 50% 左右。
[root@server2 hpa]# kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
每0.01秒访问一次php-apache服务,模拟增加php-apache服务的负荷
在开启一个server2查看,发现cpu的利用率被稳定在50%左右,而pod的数量也提升为7个
取消压力测试,过几分钟之后,副本数量调整为1,hpa的机制是扩容很迅速,缩容很慢,这是因为如果压力上来了,需要马上进行扩容,才能应对压力,等压力小了,不能马上缩容,防止压力再次上升,不能及时应对。
3 HPA部署-cpu+mem
想要同时监测cpu和mem,v1版本的hpa不能满足,需要使用v2版本,需要使用yaml文件的格式生成hpa。
编辑文件
[root@server2 hap]# cat hpa-v2.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler HPA类型
metadata:
name: php-apache
spec:
maxReplicas: 10 最大副本数为10
minReplicas: 1 最小副本数为1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 60 cpu目标使用率60%
type: Utilization
- type: Resource
resource:
name: memory
target:
averageValue: 50Mi 内存目标使用率50M
type: AverageValue
删除之前的v1版本,应用hpa-v2文件创建新的v2版本的hpa,查看
扩容缩容方法与上面类似