K8s-----HPA自动伸缩
K8s-----HPA自动伸缩1 HPA伸缩过程2 HPA进行伸缩算法2.1 cpu限制2.2 cpu和内存限制1 HPA伸缩过程收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization),对比在扩容条件里记录的cpu限额(CPUUtilization)调整实例数(必须要满足不超过最大/最小实例数)每隔30s做一次自动扩容的判断CPU utilization的计算方法是用cp
K8s-----HPA自动伸缩
1 HPA伸缩过程
收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization),对比在扩容条件里记录的cpu限额(CPUUtilization)调整实例数(必须要满足不超过最大/最小实例数)
每隔30s做一次自动扩容的判断CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过metrics可以直接获取到)除以cpu request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod CPU核心的使用占比。
2 HPA进行伸缩算法
计算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)
- ceil()表示取大于或等于某数的最近一个整数
每次扩容后冷却3分钟才能再次进行扩容,而缩容则要等5分钟后。
当前Pod Cpu使用率与目标使用率接近时,不会触发扩容或缩容:
触发条件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9
2.1 cpu限制
(1)应用文件:kubectl apply -f hpa.yml
- 查看服务的信息:
kubectl describe svc php-apache
- 测试:
curl 10.244.141.197
(2)弹性收缩
- 启动一个容器,并通过一个循环向 php-apache 服务器发送无限的查询请求
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
- 查看pod的信息:
kubectl get pod
(3)增加负载
kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
- 查看pod的资源使用情况:
kubectl top pod
一分钟时间左右之后,在另个终端可以看到 CPU 负载升高了,由于请求增多,CPU 使用499远超200。 可以看到,Deployment 的副本数量已经增长到了 4
最终副本的数量可能需要几分钟才能稳定下来。最终的副本数量为6,每个副本的cup使用在100m左右
- 查看服务的信息:
kubectl describe svc php-apache
(4) 停止负载
- 在我们创建容器的终端中,输入 + C 来终止负载的产生
- 再次检查负载状态(等待几分钟时间):
- 查看hpa:
kubectl get hpa
kubectl get pod
kubectl top pod
- 几分钟后CPU 利用率已经降到 0,HPA 将自动缩减副本数量至 1
2.2 cpu和内存限制
(1)应用文件:kubectl apply -f hpa-v2.yml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
maxReplicas: 10 ## 副本数量在1~10之间
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 60 ## cpu的限制在60%
type: Utilization
- type: Resource
resource:
name: memory
target:
averageValue: 50Mi ## 内存的限制50Mi
type: AverageValue
(2)增加负载
- 查看pod内存和cpu资源的使用情况
kubectl get pod
kubectl top pod
(3)增加负载
kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
- 一分钟时间左右之后,在另个终端可以看到 CPU 负载升高了,CPU 使用501,Deployment
的副本数量增加到了5,并且每个pod的cpu在100左右
- 查看pod的资源使用情况
kubectl get pod
kubectl top pod
(4)停止负载
-
在我们创建容器的终端中,输入 + C 来终止负载的产生
-
再次检查负载状态,CPU 利用率慢慢降低,最后 HPA 将自动缩减副本数量至 1
kubectl get pod
kubectl top pod
更多推荐
所有评论(0)