kubernetes(k8s) 学习 (十七) 横向自动扩容HPA(pod的弹性伸缩)
文章目录HPA是什么部署步骤运行php-apache服务器并暴露服务创建HPA增加负载,进行测试停止负载HPA伸缩过程详解基于多项度量指标进行伸缩HPA是什么Kubernetes有一个HPA(Horizontal Pod Autoscaler)的资源,可以实现基于CPU使用率的Pod自动伸缩的功能。1.HPA基于Master Node上的kube-controller-manager服务启动参数–
HPA是什么
Kubernetes有一个HPA(Horizontal Pod Autoscaler)的资源,可以实现基于CPU使用率的Pod自动伸缩的功能。
1.HPA基于Master Node上的kube-controller-manager
服务启动参数–horizontal-pod-autoscaler-sync-period定义的时长(默认为30秒),周期性的检测Pod的CPU使用率(需要事先安装heapster)。
如果需要设置–horizontal-pod-autoscaler-sync-period可以在Master Node上的/etc/default/kube-controller-manager中修改。
2.HPA 与之前的 RC、Deployment 一样,也属于一种 Kubernetes 资源对象。通过追踪分析 RC 控制的所有目标 Pod 的负载变化情况,来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理。
当前,HPA可以有以下两种方式作为 Pod 负载的调度指标:
CPUUtilizationPercentage。
应用程序自定义的度量指标,比如服务在每秒内的相应的请求数(TPS 或 QPS)。
官网:
https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
运行deployment 服务:
$ kubectl run hpa-example --image=hpa-example --requests=cpu=200m --expose --port=80
service/hpa-example created
deployment.apps/hpa-example created
$ kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
hpa-example 1/1 1 1 19s
$ kubectl autoscale deployment hpa-example --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/hpa-example autoscaled
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-example Deployment/hpa-example 0%/50% 1 10 1 39s
$ kubectl get svc hpa-example
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hpa-example ClusterIP 10.110.93.191 <none> 80/TCP 63m
$ kubectl run test -it --rm --image=busybox --restart=Never
/ # while true; do wget -q -O- http://10.110.93.191; done
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-example Deployment/hpa-example 494%/50% 1 10 8 7m39s
Hpa会根据Pod的CPU使用率动态调节Pod的数量
部署步骤
运行php-apache服务器并暴露服务
1.
创建HPA
1.
增加负载,进行测试
停止负载
HPA伸缩过程详解
收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization)
对比在扩容条件里记录的cpu限额(CPUUtilization)
调整实例数(必须要满足不超过最大/最小实例数)
每隔30s做一次自动扩容的判断
CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过metrics可以直接获取到)除以cpu request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod CPU核心的使用占比。
HPA进行伸缩算法:
计算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)
ceil()表示取大于或等于某数的最近一个整数
每次扩容后冷却3分钟才能再次进行扩容,而缩容则要等5分钟后。
当前Pod Cpu使用率与目标使用率接近时,不会触发扩容或缩容:
触发条件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9
1.2.缩容完毕后
3.测试计算
基于多项度量指标进行伸缩
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-example
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-example
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 60
type: Utilization
- type: Resource
resource:
name: memory
target:
averageValue: 50Mi
type: AverageValue
更多推荐
所有评论(0)