k8s监控数据组件Pod自动化进行扩缩容HPA怎么用
这篇文章主要介绍"k8s监控数据组件Pod自动化进行扩缩容HPA怎么用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"k8s监控数据组件Pod自动化进行扩缩容HPA怎么用"文章能帮助大家解决问题。
自动扩缩容HPA:全称是Horizontal Pod Autoscaler
我们安装k8s集群的时候,安装过一个metrics-server
的组件,这是一个监控数据组件,提供HPA和基础资源监控的能力。就是这面这个Pod:
[root@k8s-master01 ~]# kubectl get pod -n kube-system metrics-server-6bf7dcd649-5fhrw 1/1 Running 2 (3d5h ago) 8d
通过这个组件可以看到节点或者Pod的内存和CPU的使用率:
[root@k8s-master01 ~]# kubectl top pod -ANAMESPACE NAME CPU(cores) MEMORY(bytes) default busybox 0m 0Mi kube-system calico-kube-controllers-5dffd5886b-4blh7 3m 18Mi kube-system calico-node-fvbdq 42m 135Mi kube-system calico-node-g8nqd 52m 73Mi
除了可以进行简单的监控功能,还可以利用这个监控的数据做一些其他的操作。
比如我们可以给Pod的资源设定某个值,当资源的使用超过这个值,那么系统就会认为这个Pod当前存在压力,从而就行扩容。
一般使用CPU和自定义指标进行扩容,内存相对较少。
HPA实践:
注意事项:要想实现HPA的自动扩容,需要满足以下几个条件
必须安装metrics-server组件或其他自定义版本的metrics-server
必须配置requests参数
不能扩容无法缩放的对象,如DaemonSet
首先创建一个nginx的yaml文件:
kubectl create deployment hpa-nginx --image=nginx --dry-run=client -o yaml > hpa-nginx.yaml
然后进入yaml文件中进行配置:在配置镜像那里进行配置,下列代码的后三行,如果也想对基于内存扩容的话也可以将内存写上。
resources:是资源的意思
requests:是请求的意思,这里应该是请求资源的意思
spec: containers: - image: nginx name: nginx resources: requests: cpu: 10m
执行yaml文件创建副本:
[root@k8s-master01 ~]# kubectl create -f hpa-nginx.yaml deployment.apps/hpa-nginx created
暴露出一个service端口:
[root@k8s-master01 ~]# kubectl expose deployment hpa-nginx --port=80[root@k8s-master01 ~]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhpa-nginx ClusterIP 10.98.236.13480/TCP 3m17skubernetes ClusterIP 10.96.0.1 443/TCP 8d
访问测试一下:证明这个Pod可以用了
[root@k8s-master01 ~]# curl 10.98.236.134Welcome to nginx! Welcome to nginx!
If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.
For online documentation and support please refer tonginx.org.
Commercial support is available atnginx.com.Thank you for using nginx.
配置Hpa自动扩缩容的规则:这条命令是说当hpa-nginx这个Pod的cpu值达到10的时候,将进行自动扩容,最小扩容1个,最大扩容10个。
[root@k8s-master01 ~]# kubectl autoscale deployment hpa-nginx --cpu-percent=10 --min=1 --max=10horizontalpodautoscaler.autoscaling/hpa-nginx autoscaled
看一下hpa的规则情况:
[root@k8s-master01 ~]# kubectl get hpaNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEhpa-nginx Deployment/hpa-nginx 0%/10% 1 10 1 2m38s
下面进行一个循环访问hpa-nginx:观察hpa的cpu值会不会上升
[root@k8s-master01 ~]# while true; do wget -q -O- http://10.98.236.134 >/dev/null; done
观察是否已经进行扩容:可以看到hpa-nginx的副本数已经进行了自动扩容
[root@k8s-master01 ~]# kubectl get hpaNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEhpa-nginx Deployment/hpa-nginx 640%/10% 1 10 1 7m14s[root@k8s-master01 ~]# kubectl top pod NAME CPU(cores) MEMORY(bytes) busybox 0m 0Mi hpa-nginx-bd88bdd8f-7gdwq 1m 3Mi hpa-nginx-bd88bdd8f-8c6j6 1m 3Mi hpa-nginx-bd88bdd8f-cfcjs 1m 7Mi hpa-nginx-bd88bdd8f-h8vx7 74m 7Mi hpa-nginx-bd88bdd8f-kpgl8 2m 3Mi hpa-nginx-bd88bdd8f-lpf45 1m 3Mi hpa-nginx-bd88bdd8f-lwc2h 1m 3Mi hpa-nginx-bd88bdd8f-qkgfd 1m 3Mi hpa-nginx-bd88bdd8f-t9fj9 1m 3Mi hpa-nginx-bd88bdd8f-tbrl4 1m 7Mi
那么,接下来将访问测试停下,看副本是否会自动缩容到最初;等待一会发现副本回到了最原始的一个。注意这个时间可能会有点慢,稍微等一会,不是报错了。
[root@k8s-master01 ~]# kubectl get hpaNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEhpa-nginx Deployment/hpa-nginx 2%/10% 1 10 10 11m[root@k8s-master01 ~]# kubectl get podNAME READY STATUS RESTARTS AGEbusybox 1/1 Running 26 (46m ago) 8dhpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 27m
关于"k8s监控数据组件Pod自动化进行扩缩容HPA怎么用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。