k8s监控数据组件Pod自动化进行扩缩容HPA

自动扩缩容HPA:全称是Horizontal Pod Autoscaler
我们安装k8s集群的时候,安装过一个metrics-server的组件,这是一个监控数据组件,提供HPA和基础资源监控的能力。就是这面这个Pod:

[root@k8s-master01 ~]# kubectl get pod -n kube-system metrics-server-6bf7dcd649-5fhrw1/1Running2 (3d5h ago)8d

通过这个组件可以看到节点或者Pod的内存和CPU的使用率:
[root@k8s-master01 ~]# kubectl top pod -ANAMESPACENAMECPU(cores)MEMORY(bytes)defaultbusybox0m0Mikube-systemcalico-kube-controllers-5dffd5886b-4blh63m18Mikube-systemcalico-node-fvbdq42m135Mikube-systemcalico-node-g8nqd52m73Mi

除了可以进行简单的监控功能,还可以利用这个监控的数据做一些其他的操作。
比如我们可以给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: nginxname: nginxresources: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 svcNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEhpa-nginxClusterIP10.98.236.13480/TCP3m17skubernetesClusterIP10.96.0.1443/TCP8d

访问测试一下:证明这个Pod可以用了
[root@k8s-master01 ~]# curl 10.98.236.134Welcome to nginx! - 锐客网html { color-scheme: light dark; }body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; }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 hpaNAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGEhpa-nginxDeployment/hpa-nginx0%/10%11012m38s

下面进行一个循环访问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 hpaNAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGEhpa-nginxDeployment/hpa-nginx640%/10%11017m14s[root@k8s-master01 ~]# kubectl top pod NAMECPU(cores)MEMORY(bytes)busybox0m0Mihpa-nginx-bd88bdd8f-7gdwq1m3Mihpa-nginx-bd88bdd8f-8c6j61m3Mihpa-nginx-bd88bdd8f-cfcjs1m7Mihpa-nginx-bd88bdd8f-h8vx774m7Mihpa-nginx-bd88bdd8f-kpgl82m3Mihpa-nginx-bd88bdd8f-lpf451m3Mihpa-nginx-bd88bdd8f-lwc2h1m3Mihpa-nginx-bd88bdd8f-qkgfd1m3Mihpa-nginx-bd88bdd8f-t9fj91m3Mihpa-nginx-bd88bdd8f-tbrl41m7Mi

那么,接下来将访问测试停下,看副本是否会自动缩容到最初;等待一会发现副本回到了最原始的一个。注意这个时间可能会有点慢,稍微等一会,不是报错了。
[root@k8s-master01 ~]# kubectl get hpaNAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGEhpa-nginxDeployment/hpa-nginx2%/10%1101011m[root@k8s-master01 ~]# kubectl get podNAMEREADYSTATUSRESTARTSAGEbusybox1/1Running26 (46m ago)8dhpa-nginx-bd88bdd8f-h8vx71/1Running027m

这个功能虽然好用,但在实际生成中一定要结合实际的情况使用!!!
【k8s监控数据组件Pod自动化进行扩缩容HPA】以上就是监控数据组件Pod自动化进行扩缩容-HPA的详细内容,更多关于Pod自动化扩缩容HPA的资料请关注脚本之家其它相关文章!

    推荐阅读