基于Kubernetes实现云上的自动运维
随着业务量的增多,应用的压力越来越大,这时就需要调整应用的部署量来应对高并发。但是业务量并非一成不变的,当业务量减少时,应用部署过多反而成为一种资源的浪费,这时需要减少部署量来降低资源的损耗。在传统的运维过程中,离不开人为的操作,同时启动量的多少对于运维人员来说也不能准确把控。幸运的是Kubernetes提供了容器的弹性伸缩功能,通过对容器的cpu、内存、并发量等监控,实现容器的自动伸缩,极大的简化了运维的操作难度、节省了人员开支和资源损耗。
Horizontal Pod Autoscaler
Horizontal Pod Autoscaling,简称HPA,
Kubernetes通过HPA的设定,实现了容器的弹性伸缩功能。对于Kubernetes中的POD集群来说,HPA可以实现很多自动化功能,比如当POD中业务负载上升的时候,可以创建新的POD来保证业务系统稳定运行,当POD中业务负载下降的时候,可以销毁POD来减少资源的浪费。
HPA最早版本(autoscaling/v1)仅支持CPU作为可监控的度量标准。当前版本HPA处于测试阶段(autoscaling/v2beta1)支持内存和其他自定义指标。
当前的弹性伸缩的指标包括:
* CPU
* 内存
* 并发数
* 包传输大小
HPA控制器默认每隔30秒就会运行一次,一旦创建的HPA,我们就可以通过命令查看获取到的当前指标信息
$ kubectl get hpa NAME -n NAMESPACE
同样如果要查看HAP的事件,也可通下面的命令查看
$ kubectl describe hpa NAME -n NAMESPACE
样例
apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name:
hpa-name namespace: my-namespace spec: scaleTargetRef: apiVersion: apps/v1
kind: Deployment# 基于Deployment进行扩缩 name: deployment-name # Deployment名
minReplicas:1 # 最大实例数 maxReplicas: 10 # 最小实例数 metrics: - type: Resource
resource:name: cpu targetAverageUtilization: 50 # CPU阈值设定50% - type: Pods pods:
metricName: packets-per-second targetAverageValue: 1k # 每秒数据量 - type: Object
object: metricName: requests-per-second target: apiVersion: extensions/v1beta1
kind: Ingressname: main-route targetValue: 10k # 每秒请求量
弹性伸缩容错处理
*
HPA通过heapster或自定义RESTClient获取到当前的指标信息如CPU,会对HPA设定值进行比较后,进行扩容或缩容,使当前值尽量向其设定值靠近。同时为避免业务的不稳定,弹性伸缩增加了等待时间,当进行扩或缩后,HPA将进行一段时间的等待,这段时间不会进行弹性伸缩。对于扩容,等待时间为3分钟,而缩容,等待时间为5分钟。
热门工具 换一换