Kubernetes-HPA
HPA
Horizontal Pod Autoscaler:Pod的水平自动伸缩器。
观察Pod的CPU、内存使用率自动扩展或缩容Pod的数量。
不适用于无法缩放的对象,如DaemonSet必须定义Requests字段,必须安装metrics-server。
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 100Mi
$ kubectl autoscale deploy nginx --cpu-percent=20 --min=2 --max=5
horizontalpodautoscaler.autoscaling/nginx autoscaled
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
nginx-64c5bdd48d-49r5f 30m 3Mi
nginx-64c5bdd48d-v7nfl 22m 3Mi
当cpu已经超过了20%就进行扩容
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 26%/20% 2 5 3 16h
由两个pod扩容到了三个pod
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64c5bdd48d-49r5f 1/1 Running 0 16h
nginx-64c5bdd48d-jmbzx 1/1 Running 0 28s
nginx-64c5bdd48d-v7nfl 1/1 Running 0 16h
三个pod都能接收到请求
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
nginx-64c5bdd48d-49r5f 9m 3Mi
nginx-64c5bdd48d-jmbzx 10m 3Mi
nginx-64c5bdd48d-v7nfl 14m 3Mi
待压力下去后pod又缩回最小的数量
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
nginx-64c5bdd48d-49r5f 0m 3Mi
nginx-64c5bdd48d-v7nfl 0m 3Mi
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64c5bdd48d-49r5f 1/1 Running 0 16h
nginx-64c5bdd48d-v7nfl 1/1 Running 0 16h