自动扩缩容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 -A NAMESPACE NAME CPU(cores) MEMORY(bytes) default busybox 0m 0Mi kube-system calico-kube-controllers-5dffd5886b-4blh6 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 svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hpa-nginx ClusterIP 10.98.236.13480/TCP 3m17s kubernetes 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 and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.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=10 horizontalpodautoscaler.autoscaling/hpa-nginx autoscaled
看一下hpa的规则情况:
[root@k8s-master01 ~]# kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-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 hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-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 hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-nginx Deployment/hpa-nginx 2%/10% 1 10 10 11m [root@k8s-master01 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE busybox 1/1 Running 26 (46m ago) 8d hpa-nginx-bd88bdd8f-h8vx7 1/1 Running 0 27m
这个功能虽然好用,但在实际生成中一定要结合实际的情况使用!!!
以上就是监控数据组件Pod自动化进行扩缩容-HPA的详细内容,更多关于Pod自动化扩缩容HPA的资料请关注脚本之家其它相关文章!