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 -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.134           80/TCP    3m17s
kubernetes   ClusterIP   10.96.0.1               443/TCP   8d

访问测试一下:证明这个Pod可以用了

[root@k8s-master01 ~]# curl 10.98.236.134



Welcome 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的资料请关注脚本之家其它相关文章!

你可能感兴趣的:(k8s监控数据组件Pod自动化进行扩缩容HPA)