k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)
HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。当pod负载达到一定的阈值后,会根据扩缩容的策略生成更多新的pod来分担压力,当pod的使用比较空闲时,在稳定空闲一段时间后,还会自动减少pod的副本数量。
文章目录
一、HPA简介及工作原理
官方:https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
1.简介
HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。
当pod负载达到一定的阈值后,会根据扩缩容的策略生成更多新的pod来分担压力,当pod的使用比较空闲时,在稳定空闲一段时间后,还会自动减少pod的副本数量。
2.HPA 的工作原理
- k8s中的某个Metrics Server(Heapster或自定义Metrics Server)持续采集所有Pod副本的指标数据。
- HPA控制器通过Metrics Server的API(Heapster的API或聚合API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标Pod副本数量。
- 当目标Pod副本数量与当前副本数量不同时,HPA控制器就访问Pod的副本控制器(Deployment 、RC或者ReplicaSet)发起scale操作,调整Pod的副本数量,完成扩缩容操作。
二、单一量度指标
1.上传镜像
2.部署
[root@k8s2 ~]# mkdir hpa
[root@k8s2 ~]# cd hpa
[root@k8s2 hpa]# vim hpa.yaml
apiVersion: apps/v1
kind: Deployment
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
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m ##200m的50%是100m,也就是超过100m进行动态拉伸
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
[root@k8s2 hpa]# kubectl apply -f hpa.yaml
hpa控制器:
[root@k8s2 hpa]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
[root@k8s2 hpa]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 10 1 73s
3.压测:增加负载
增加CPU负载,压svc
[root@k8s2 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”
注:http://php-apache访问到svc,也可以改为地址http://10.110.200.191
4.pod负载上升
[root@k8s2 ~]# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
load-generator 24m 3Mi
php-apache-6496844877-d7gfz 409m 14Mi
5.触发hpa扩容pod
结束压测后,默认等待5分钟冷却时间,pod会被自动回收
三、多项量度指标
1.生成文件并修改
[root@k8s2 hpa]# kubectl get hpa php-apache -o yaml > hpa-v2.yaml
修改hpa-v2.yaml文件,增加内存指标
- resource:
name: memory
target:
averageValue: 50Mi
type: AverageValue
type: Resource
2.测试
[root@k8s2 hpa]# kubectl apply -f hpa-v2.yaml
[root@k8s2 hpa]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 15835136/50Mi, 0%/50% 1 10 1 20m
更多推荐
所有评论(0)