Kubernetes 扩容/缩容(云厂商与自研发实现)

弹性伸缩概述


从传统意义上,弹性伸缩主要解决的问题是容量规划与实际负载的矛盾。

蓝色水位线表示集群资源容量随着负载的增加不断扩容,红色曲线表示集群资源实际负载变化。
弹性伸缩就是要解决当实际负载增大,而集群资源容量没来得及反应的问题。

当你的实际的负载随着业务量访问增大,而逐渐的向集群的资源靠拢的时候,接近的时候,能不能在快速的时候,快速的响应,来扩容集群的流量,从而来应对这种突发。

如图红色的峰值,明显的超出了集群的容量,蓝色的是水位线,这种情况下我们要及时做的就是快速的扩容这个资源,能够让蓝色水位线保持高于红色水位线这么一个状态,这样集群的架构才是持久的,稳定的。(如果没有快速应对的话,就意味实际的业务访问有一定的影响)

Kubernetes 扩容/缩容(云厂商与自研发实现)_第1张图片

缓存水位解决突发的问题:在容量规划的时候需要预估,缓冲水位比实际的负载高出20%-30%这么一个配置,这是预料之外的事情,还有一种是预料之内的事情,比如赶上一些活动,在某些活动之前是需要增加机器的,所以在活动开始的时候,需要准备机器,然后加入到集群,再去做一定的测试,确保压测可以达到预期的。

面对这些未知的都会提前加入这批机器。

未知情况下会为服务器预留一些缓冲的能力,其次在已知的的条件下,提前给机器扩容,增加机器,提高并发能力。

Kubernetes弹性伸缩布局


在Kubernetes平台中,资源分为两个维度:

Node级别:K8s将多台服务器抽象一个集群资源池,每个Node提供这些资源
Pod级别:Pod是K8s最小部署单元,运行实际的应用程序,使用request和limit为Pod配额(request其实就是实际当中你去申请的配额,如果集群资源池里面没有提供的配额的时候,就会处于pending状态)(如果limit比request大的很大这样会带来一定的问题,这样宿主机资源占用过高导致宕机,驱逐)
因此,K8s实现弹性伸缩也是这两个级别,当Node资源充裕情况下,Pod可任意弹性,当不足情况下需要弹性增加节点来扩容资源池。
针对Pod负载: 当Pod资源不足时,使用HPA(Horizontal Pod Autoscaler)自动增加Pod副本数量
针对Node负载: 当集群资源池不足时,使用CA(Cluster Autoscaler)自动增加Node

Node自动扩容/缩容 


Node弹性伸缩有两种方案:
Cluster Autoscaler: 是一个自动调整Kubernetes集群大小的组件,需要与公有云一起使用,例如AWS、Azure、Aliyun
项目地址: https://github.com/kubernetes/autoscaler
自研发: 根据Node监控指标或者Pod调度状态判断是否增加Node,需要一定开发成本

Node自动扩容/缩容:实现思路


Kubernetes 扩容/缩容(云厂商与自研发实现)_第2张图片

自动增加Node:周期性检查是否有充足集群资源来调度新创建的Pod,当资源不足时会创建新的Node(监控整体request的请求和资源池做个对比,拿那个阈值去判断是否需要增加节点,或者创建pod处于pending状态,是不是要创建,当满足的时候就创建新的节点

Kubernetes 扩容/缩容(云厂商与自研发实现)_第3张图片

自动减少Node: 周期性检查Node资源使用情况,当一个Node长时间资源利用率很低时,自动从集群中下线,原有Pod会自动调度到其他Node上(这可能会影响某些业务,因为要下线某个node,你就涉及到将pod驱逐到其他节点去运行)

 

Node自动扩容/缩容: Cluster Autoscaler


去实现这块的方案有两块,一块是可以使用CA,Cluster Autoscaler 官方社区组件提供的对接公有云的组件,对接公有云的组件有这些云厂商支持。

Cluster Autoscaler支持的云提供商:
阿里云: https://github.com/kubernetes/autoscaler/blob/master/cluster
autoscaler/cloudprovider/alicloud/README.md
AWS: https://github.com/kubernetes/autoscaler/blob/master/cluster
autoscaler/cloudprovider/aws/README.md
Azure: https://github.com/kubernetes/autoscaler/blob/master/cluster
autoscaler/cloudprovider/azure/README.md
GCE: https://kubernetes.io/docs/concepts/cluster-administration/cluster-management/
GKE: https://cloud.google.com/container-engine/docs/cluster-autoscaler

你可能感兴趣的:(Kubernetes,规划与安装,kubernetes)