k8s弹性伸缩
自动扩缩容HPA
要实现扩缩容得先安装Metrics Server服务,因为自动扩缩容是通过监控容器得cpu或者memory得上限来实现弹性伸缩的,在 Kubernetes 集群中,Metrics Server 是一个用于收集和聚合集群内部组件的性能指标数据的服务。它可以收集 CPU 使用率、内存使用率、网络 I/O 等指标,并将这些指标暴露给 Kubernetes API Server,以供其他组件使用,在弹性伸缩中,Metrics Server 可以帮助 Kubernetes 自动地监测集群中各个 Pod 的资源使用情况,并根据配置的规则进行自动扩展或缩减
提示:我们使用kubeeasy部署k8s,已经部署过Metrics Server服务了
1、部署nginx
[root@k8s-master-node1 ~]# vi deployment-nginx.yamlapiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx namespace: default spec: replicas:3selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx imagePullPolicy: Always ports: - containerPort:80resources: requests:#容器初始值大小memory: 50Mi cpu:0.5limits:#容器限制最大值memory: 100Mi cpu:1[root@k8s-master-node1 ~]# kubectl apply -f deployment-nginx.yaml2、配置service服务暴露端口
[root@k8s-master-node1 ~]# kubectl expose deployment nginx --port=8080 --target-port=80 --type=NodePort[root@k8s-master-node1 ~]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE kubernetes ClusterIP10.96.0.1<none>443/TCP 51d nginx NodePort10.96.31.108<none>8080:53756/TCP 32m[root@k8s-master-node1 ~]# kubectl get podsNAME READY STATUS RESTARTS AGE nginx-75b57cd77d-dbdzg1/1 Running023m nginx-75b57cd77d-dnrjk1/1 Running022m nginx-75b57cd77d-h7nlx1/1 Running032m3、配置hpa(重点)
[root@k8s-master-node1 ~]# kubectl autoscale deployment nginx --min=3 --max=10 --cpu-percent=50[root@k8s-master-node1 ~]# kubectl get hpaNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx Deployment/nginx0%/50%310334m- kubectl autoscale: Kubernetes 提供的“快速创建 HPA”的命令
- –min=3 :无论多空闲,都至少保留 3 个 Pod
- –max=10: 再忙也不会超过 10 个 Pod
- –cpu-percent=10: 目标 CPU 使用率 = 10%
HPA 的逻辑是:
- 如果当前 CPU高于 50%→ 扩容
- 如果当前 CPU低于 50%→ 缩容
4、使其扩缩容
扩容前:
以下任选其一就好,其共同目的都是提升cpu,使其扩容!!!!!
(1)用多几台主机使用以下命令访问暴露的端口
[root@k8s-master-node1 ~]# while true;do curl -s 192.168.100.10:53756 >> /dev/null;done[root@k8s-master-node1 ~]# kubectl get hpa -w[root@k8s-master-node1 ~]# kubectl get hpaNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx Deployment/nginx53%/50%310342m(2)进入nginx容器里面
[root@k8s-master-node1 ~]# kubectl exec -it nginx-75b57cd77d-dbdzg /bin/bashroot@nginx-75b57cd77d-dbdzg:/# while true; do:; done[root@k8s-master-node1 ~]# kubectl get hpaNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx Deployment/nginx52%/50%310342m现在我们可以看见pod由3个增加到5个
[root@k8s-master-node1 ~]# kubectl get podsNAME READY STATUS RESTARTS AGE nginx-75b57cd77d-22bbf1/1 Running083s nginx-75b57cd77d-dbdzg1/1 Running037m nginx-75b57cd77d-dnrjk1/1 Running046m nginx-75b57cd77d-h7nlx1/1 Running046m nginx-75b57cd77d-mkmbf1/1 Running083s当cpu降回10%后pod会减少到3个
[root@k8s-master-node1 ~]# kubectl get podsNAME READY STATUS RESTARTS AGE nginx-75b57cd77d-dbdzg1/1 Running043m nginx-75b57cd77d-dnrjk1/1 Running052m nginx-75b57cd77d-h7nlx1/1 Running052m扩容后: