## 概述

### 了解K8S中的弹性伸缩

Kubernetes在多个维度、多个层次上提供不同的组件来满足不同场景下的伸缩需求，主要如下：

|  类型  |              Pod               |        Node        |
| :--: | :----------------------------: | :----------------: |
| 横向伸缩 | HPA(Horizontal Pod Autoscaler) | Cluster Autoscaler |
| 纵向伸缩 | VPA (Vertical Pod Autoscaler)  |        None        |

- **HPA:** 即容器水平伸缩（Horizontal Pod
  Autoscaler）负责Pod水平伸缩的组件，是所有伸缩组件中历史最悠久的，目前支持autoscaling/v1、autoscaling/v2beta1与autoscaling/v2beta2，其中autoscaling/v1只支持CPU一种伸缩指标，在autoscaling/v2beta1中增加支持custom
  metrics，在autoscaling/v2beta2中增加支持external metrics。

- **CA:** 即集群伸缩(Cluster Autoscaler)，负责Node节点水平伸缩的组件，1.0.0之后已是GA阶段（General
  Availability，即正式发布的版本），UK8S使用的为GA版本。

- **VPA:**
  即Pod的纵向伸缩，根据Pod的资源利用率、历史数据、异常事件，来动态调整负载的Request值的组件，主要关注在有状态服务、单体应用的资源伸缩场景，目前（2019年8月26日）处于beta阶段，不推荐在生产环境使用。

另外，还有cluster-proportional-autoscaler伸缩组件，可根据集群的节点数目，水平调整Pod数目的组件，目前处在GA阶段，用来根据集群规模大小动态调整CoreDNS、Ingress等关键服务的规模。另外addon-resizer组件可根据集群中节点的数目，纵向调整负载的Request的组件，目前处在beta阶段。

下面我们主要来介绍下HPA和CA这两个最常用的伸缩组件。
