千家信息网

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

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要介绍"k8s监控数据组件Pod自动化进行扩缩容HPA怎么用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"k8s监控数据组件Pod自动化进行扩缩容H
千家信息网最后更新 2024年11月24日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.134           80/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怎么用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0