7.2 阿里云容器服务Kubernetes的弹性总览

阿里云容器服务Kubernetes主要包含如下两大类弹性组件:调度层弹性组件与资源层弹性组件,如图7-5所示。

图7-5 阿里云Kubernetes集群弹性方案

7.2.1 调度层弹性组件

调度层弹性组件是指所有的弹性动作都是和Pod相关的,与具体的资源情况无关。

1.HPA

HPA是Pod水平伸缩的组件,除了社区支持的Resource Metrics和Custom Metrics,阿里云容器服务Kubernetes还提供了external-metrics-adapter,支持云服务的指标作为弹性伸缩的判断条件,目前已经支持多个产品不同维度的监控指标,例如Ingress的QPS、RT,ARMS中应用的GC次数、慢SQL次数,等等。

2.VPA

VPA是Pod纵向伸缩的组件,主要面向有状态服务的扩容和升级场景。

3.cronHPA

cronHPA是定时伸缩组件,主要面向的是周期性负载,通过资源画像可以预测有规律的负载周期,并通过周期性伸缩,实现资源成本的节约。

4.Resizer

Resizer是集群核心组件的伸缩控制器,可以根据集群的CPU核数、节点的个数,实现线性和梯度两种不同的伸缩,目前主要面对的场景是核心组件的伸缩,例如CoreDNS。

7.2.2 资源层弹性组件

对于资源层弹性组件,弹性的操作都是针对Pod和具体资源关系的。

1.Cluster Autoscaler

Cluster Autoscaler是目前比较成熟的节点伸缩组件,主要应用场景是当Pod资源不足时进行节点的伸缩,并将无法调度的Pod调度到新弹出的节点上。

2.Virtual kubelet autoscaler

Virtual kubelet autoscaler是阿里云容器服务Kubernetes开源的组件,和Cluster Autoscaler的原理类似,当Pod由于资源问题无法调度时,弹出的不是节点,而是将Pod绑定到虚拟节点上,并通过ECI的方式启动Pod。

最后给大家做一个简单的方案演示。如图7-6所示,应用主体是Apiservice,Apiservice会通过Sub-Apiservice调用Database,接入层通过Ingress进行管理。

我们通过PTS模拟上层产生的流量,通过SLS采集接入层的日志,通过ARMS采集应用的性能指标,并通过Alibaba cloud metrics adapster暴露external metrics触发HPA重新计算工作负载的副本,当伸缩的Pod占满集群资源时,触发Virtual kubelet autoscaler生成ECI承载超过集群容量规划的负载。