38 kubernetes服务自动伸缩 - xiaoxin01/Blog GitHub Wiki
本文介绍在kubernetes环境下如何配置服务自动伸缩
如果一台server上面只部署一个服务,那么大多数情况下,这台server的负载是很低的,也就是有空闲资源。
kubernetes相当于把server集群当做一个大的资源池,然后进行合理的调度和利用,最大化的利用server的资源
对于一个需要自动伸缩的服务,前提是需要定义好这个服务主要的资源(内存,CPU),否则kubernetes是不清楚什么情况下需要伸缩服务。
定义资源的方法如下:
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
其中cpu的单位为 milli,即千分之一个CPU
语法:
kubectl autoscale deploy foo --min=2 --max=5 --cpu-percent=80
上述定义了一个自动伸缩,最小保持2个pod,最多不超过5个,衡量标准(desiredMetricValue)为80%的cpu占用。
服务对资源的使用量(currentMetricValue)是以requests中定义的cpu值为基准来计算的,比如,当前服务占用cpu为500m,则currentMetricValue=500m/250m=200%。
实际需要的副本数量计算公式如下:
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
需要注意的是,如果 currentMetricValue / desiredMetricValue 的比值在 1 ± 0.1 之内,则会跳过缩放,这个 0.1 可以通过 --horizontal-pod-autoscaler-tolerance 来设定
另外,kubernetes会每5分钟检测一次是否需要缩放资源。
- (Horizontal Pod Autoscaler)[https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/]