# CCE增强集群弹性引擎
#### 插件简介
CCE增强集群弹性引擎（AdvancedClusterAutoscaler，简称ACA）是一个基于社区cluster-autoscaler智能增强的集群预测弹性引擎插件，深度对接AASP服务（柔性资源容量预测服务）进行宏观建模，提前感知集群级别负载压力变化，实现更主动，更精准的容量调整。针对具有明显周期性变化的整体性负载具有更佳效果。
AASP服务以Transformer系列深度学习模型为核心，深度解析业务历史负载与实时监控数据，为K8s集群环境提供前瞻性的算力需求预测，从而驱动集群级的弹性调度与资源协同。
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/caution_3.0-zh-cn.png)
使用此插件前需要联系客服开启AASP服务特性白名单。
#### 插件说明
ACA可分成扩容和缩容两个方面：
- **智能自动扩容** ：支持双模触发机制
  - **主动预测扩容**：当 AASP（柔性资源容量预测服务）预测的需求节点数大于当前节点数量时，ACA提前扩容节点至预测节点数，消除云服务器分钟级的初始化耗时。
  
  - **被动兜底扩容** ：当集群遭遇非周期性突发流量，Pod 由于工作节点资源不足而无法调度（Pending）时，ACA 结合社区底座能力，触发**被动兜底扩容**，快速拉起与所在节点池资源配额一致的节点。
   
- **平滑自动缩容**
  综合Pod所需资源与AASP（柔性资源容量预测服务）预测的需要的节点数量，平滑缩容到两者之间的较大节点数，消除瞬时流量的波动震荡。
  
 
#### 约束与限制
- 该插件不能和CCE集群弹性引擎插件同时使用。
- 使用该插件要求已存在时长大于等于2周的AOM数据。
- 节点池只支持一种CPU/Memory规格（例如：4U8G），且只支持创建一个节点池。
- 创建出来的节点需要确保POD可以调度。
- 该插件功能仅支持**虚拟机节点**，不支持物理机节点和裸金属服务器。
- 默认节点池不支持弹性扩缩容，详情请参见[默认节点池DefaultPool说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0081.html#cce_10_0081__section16928123042115)。
- 缩容节点会导致与节点关联的[本地持久卷](https://support.huaweicloud.com/usermanual-cce/cce_10_0391.html)类型的PVC/PV数据丢失，无法恢复，且PVC/PV无法再正常使用。缩容节点时使用了本地持久存储卷的Pod会从缩容的节点上被驱逐，并重新创建Pod，Pod会一直处于pending状态，因为Pod使用的PVC带有节点标签，由于冲突无法调度成功。
- AdvancedClusterAutoscaler插件仅支持1.33及以上版本。
 
#### 安装插件
1. 为插件创建委托。 
   1. 登录[统一身份认证服务控制台](https://console.huaweicloud.com/iam/#/iam/users)。
   
   2. 在左侧导航栏中选择"委托"，单击"创建委托"。
   
   3. 委托类型选择"云服务"，云服务选择"云容器引擎服务CCE"。
   
   4. 单击"完成"。创建完成后选择"立即授权"。
   
   5. 单击右上角"新建策略"，策略内容如下：
      ```
      {
          "Version": "1.1",
          "Statement": [
              {
                  "Action": [
                      "cce:node:list",
                      "cce:node:delete",
                      "cce:nodepool:update",
                      "cce:nodepool:list",
                      "cce:nodepool:get",
                      "cce:cluster:get",
                      "cce:nodepool:scale",
                      "ecs:cloudServerFlavors:get",
                      "ecs:flavors:get",
                      "ecs:flavors:get",
                      "evs:types:get"
                  ],
                  "Effect": "Allow"
              }
          ]
      }
      ```
      
   
   6. 选择刚创建的策略进行授权。
   
   
   
   
2. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
3. 在左侧导航栏中选择"插件中心"，在右侧找到**AdvancedClusterAutoscaler**插件，单击"安装"。
4. 在安装插件页面，根据需求选择"实例数"和资源配额。 
   内存申请值和限制值建议如下：
   - **内存申请值** **= Pod** **数量** **\* Pod** **的** **YAML** **大小（** **Kb** **）** **/ 1w \* 0.28G+1G**
   
   - **内存限制值** **=** **内存申请值** **+2G**
   
   
   例如2w个Pod的场景下，每个Pod的YAML为10Kb，则内存申请值 = 2 \* 10 \* 0.28G + 1G = 6.6G；内存限制值 = 6.6G + 2G = 8.6G（该计算方法相比[表1]中的建议值会存在一定的误差，通过查表或计算均可）
    表1大规模场景的插件内存建议值 
   | Pod数量（每个Pod的YAML配置以10Kb计算） | 建议内存申请值 | 建议内存限制值 |
   |:---|:---|:---|
   | 10000                    | 4Gi       | 6Gi     |
   | 30000                    | 8Gi      | 10Gi    |
   | 50000                  | 16Gi    | 18Gi     |
   | 80000                    | 24Gi     | 26Gi    |
   | 100000                 | 28Gi      | 30Gi    |
      
   
   
5. 设置"参数配置"，以下为必填项。 
   - agencyName：使用的委托名称，使用第1步中创建的委托
   
   - clusterId：集群ID
   
   - instanceId：AASP服务实例ID
   
   - nodepoolName：节点池名称
   
   - tenantId：项目ID
   
   - stabilizationWindowSeconds：稳定窗口期，推荐节点数更新周期，默认值为300秒
   
   - minPoolSize：节点池最小节点数量，默认为0
   
   - maxPoolSize：节点池最大节点数量，默认为50
   
   
   
   
6. 设置插件实例的部署策略。 
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
   - 调度策略对于DaemonSet类型的插件实例不会生效。
   
   - 设置多可用区部署或节点亲和策略时，需保证集群中存在满足调度策略的节点且拥有足够的资源，否则插件实例将无法运行。
    
   表2插件调度配置 
   | 参数   | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   |:---|:---|
   | 多可用区部署 | - 优先模式：优先将插件的Deployment实例调度到不同可用区的节点上，如集群下节点不满足多可用区，插件实例将调度到单可用区下的不同节点。  - 均分模式：插件Deployment实例均匀调度到当前集群下各可用区，增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署；均分模式限制不同可用区间插件实例数相差不超过1，单个可用区资源不足会导致后续其他实例无法调度。  - 强制模式：插件Deployment实例强制调度到不同可用区的节点上，每个可用区下最多运行一个实例。如集群下节点不满足多可用区，插件实例将无法全部运行。节点故障后，插件实例存在无法迁移风险。                                                                                                    |
   | 节点亲和 | - 不配置：插件实例不指定节点亲和调度。  - 指定节点调度：指定插件实例部署的节点。若不指定，将根据集群默认调度策略进行随机调度。  - 指定节点池调度：指定插件实例部署的节点池。若不指定，将根据集群默认调度策略进行随机调度。  - 自定义亲和策略：填写期望插件部署的节点标签实现更灵活的调度策略，若不填写将根据集群默认调度策略进行随机调度。 同时设置多条自定义亲和策略时，需要保证集群中存在同时满足所有亲和策略的节点，否则插件实例将无法运行。    |
   | 容忍策略  | 容忍策略与节点的污点能力配合使用，允许（不强制）插件的 Deployment 实例调度到带有与之匹配的污点的节点上，也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。 插件会对实例添加针对**node.kubernetes.io/not-ready** 和**node.kubernetes.io/unreachable**污点的默认容忍策略，容忍时间窗为60s。 详情请参见[设置容忍策略](https://support.huaweicloud.com/usermanual-cce/cce_10_0728.html)。                                                                                                                                                                                                                                                                |
      
   
   
7. 配置完成后，单击"安装"。
 
