基于Kubernetes实现云上的自动运维 随着业务量的增多,应用的压力越来越大,这时就需要调整应用的部署量来应对高并发。但是业务量并非一成不变的,当业务量减少时,应用部署过多反而成为一种资源的浪费,这时需要减少部署量来降低资源的损耗。在传统的运维过程中,离不开人为的操作,同时启动量的多少对于运维人员来说也不能准确把控。幸运的是Kubernetes提供了容器的弹性伸缩功能,通过对容器的cpu、内存、并发量等监控,实现容器的自动伸缩,极大的简化了运维的操作难度、节省了人员开支和资源损耗。 Horizontal Pod AutoscalerHorizontal Pod Autoscaling,简称HPA, Kubernetes通过HPA的设定,实现了容器的弹性伸缩功能。对于Kubernetes中的POD集群来说,HPA可以实现很多自动化功能,比如当POD中业务负载上升的时候,可以创建新的POD来保证业务系统稳定运行,当POD中业务负载下降的时候,可以销毁POD来减少资源的浪费。 HPA最早版本(autoscaling/v1)仅支持CPU作为可监控的度量标准。当前版本HPA处于测试阶段(autoscaling/v2beta1)支持内存和其他自定义指标。
当前的弹性伸缩的指标包括: HPA控制器默认每隔30秒就会运行一次,一旦创建的HPA,我们就可以通过命令查看获取到的当前指标信息 $ kubectl get hpa NAME -n NAMESPACE同样如果要查看HAP的事件,也可通下面的命令查看 $ kubectl describe hpa NAME -n NAMESPACE样例apiVersion: autoscaling/v2beta1kind: HorizontalPodAutoscalermetadata: name: hpa-name namespace: my-namespacespec: 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: Ingress name: main-route targetValue: 10k # 每秒请求量弹性伸缩容错处理- HPA通过heapster或自定义RESTClient获取到当前的指标信息如CPU,会对HPA设定值进行比较后,进行扩容或缩容,使当前值尽量向其设定值靠近。同时为避免业务的不稳定,弹性伸缩增加了等待时间,当进行扩或缩后,HPA将进行一段时间的等待,这段时间不会进行弹性伸缩。对于扩容,等待时间为3分钟,而缩容,等待时间为5分钟。
【转载】原文地址:https://blog.csdn.net/u013690521/article/details/81033931
|