
# CCE容器实例弹性伸缩到CCI服务
CCE突发弹性引擎（对接 CCI）作为一种虚拟的kubelet用来连接Kubernetes集群和其他平台的API。Bursting的主要场景是将Kubernetes API扩展到无服务器的容器平台（如CCI）。
基于该插件，支持用户在短时高负载场景下，将部署在云容器引擎CCE上的无状态负载（Deployment）、有状态负载（StatefulSet）、普通任务（Job）、定时任务（CronJob）四种资源类型的容器实例（Pod），弹性创建到[云容器实例CCI](https://support.huaweicloud.com/cci/index.html)服务上，以减少集群扩容带来的消耗。
#### 前提条件
- 使用插件前需要用户在CCI界面对CCI服务进行授权。
- 如果使用CCI 2.0服务对接CCE突发弹性引擎（对接 CCI）请先购买云服务VPCEP，具体操作步骤请参见[环境设置](https://support.huaweicloud.com/usermanual-cci2/cci_01_0005.html)。
 
#### 约束与限制
- 仅支持VPC网络模式的CCE Standard集群和CCE Turbo集群。
- CCE突发弹性引擎（对接 CCI）插件1.5.37及以下版本不支持Arm集群。如果集群中包含Arm节点，插件实例将不会部署至Arm节点。
- 集群所在子网不能与10.247.0.0/16重叠，否则会与CCI命名空间下的Service网段冲突，导致无法使用。
- Volcano调度器1.17.10及以下版本暂不支持使用Volcano调度器将挂载云存储卷的容器实例（Pod）弹性到CCI。
- 使用CCE集群中的Bursting插件对接CCI 2.0服务，支持配置独享型ELB的Ingress和Service。Bursting插件1.5.5以下版本不支持配置ELB类型的Service。
- 暂不支持守护进程集（DaemonSet）。
- 安装bursting插件后会在CCI服务新建一个名为"bursting-"+集群ID的命名空间，该命名空间完全由bursting插件管理，不建议直接在CCI服务使用该命名空间，如需使用CCI服务，请另外新建命名空间。
- 具体Kubernetes版本与限制请参见下表（其中高版本的约束包含低版本）。
  
  | Kubernetes 版本 | 约束与限制                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
  |:---|:---|
  | 1.35          | - 不支持ContainerRestartRules。  - 不支持配置securityContext.supplementalGroupsPolicy。  - 不支持image类型的volume。  - 不支持EnvFiles。  - 不支持HostnameOverride。                                                                                                                                            |
  | 1.34          | - 不支持PodLevelResources。  - 不支持RelaxedDNSSearchValidation。  - 不支持RelaxedEnvironmentVariableValidation。  - 不支持SecurityContext.中AppArmor相关配置  - 由于CCI不支持VolumeAttributesClass API，在弹性场景中使用PVC时，请勿配置PVC的VolumeAttributesClassName字段（即PVC不要绑定 VolumeAttributesClass对象），否则该配置在CCI中将不生效。   |
  | 1.33          | - 不支持InPlacePodVerticalScaling。  - 不支持UserNamespacesSupport。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
  | 1.32          | - 不支持PodLifecycleSleepAction。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
  | 1.31          | - 不支持DynamicResourceAllocation。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     
  
 
#### 安装插件
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
2. 选择CCE集群，单击进入CCE集群总览页面。
3. 在导航栏左侧单击"插件中心"，进入插件中心首页。
4. 选择"CCE 突发弹性引擎 (对接 CCI)"插件，单击"安装"。
5. 选择插件版本，推荐您使用最新版本CCE 突发弹性引擎 (对接 CCI)插件。
6. 在安装插件页面，根据需求选择"规格配置"。
   - 选择"系统预置规格"时，系统会根据不同的预置规格配置插件的实例数及资源配额，具体配置值请以控制台显示为准。
   
   - 选择"自定义规格"时，您可根据需求调整插件实例数及资源配额。实例数为1时插件不具备高可用能力，当插件实例所在节点异常时可能导致插件功能无法正常使用，请谨慎选择。
     ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
     - CCE 突发弹性引擎 (对接 CCI) 插件在1.5.2及以上版本，将占用更多节点资源，请在升级CCE突发弹性引擎（对接 CCI）插件前预留节点可创建的Pod数量。节点可分配的Pod数量可参考：[节点可创建的最大Pod数量说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0348.html)。
     
     - 弹性到CCI的业务量不同时，插件的资源占用也不相同。其中proxy、resource-syncer、bursting-resource-syncer组件的资源配额设置与最大弹性Pod数量有关，virtual-kubelet、bursting-virtual-kubelet、profile-controller、webhook、bursting-webhook组件的资源配额设置与最大Pod创建或删除的并发数有关，各组件的资源申请值和限制值推荐计算公式请参见[表1]，其中P为最大弹性Pod数量，C为最大Pod创建或删除的并发数，建议用户评估自己的业务使用量，选择规格配置。
      
      表1Bursting组件规格计算公式 
     | 组件名称                                     | CPU Request(m)       | CPU Limit(m)       | Memory Request(Mi)   | Memory Limit(Mi)   |
     |:---|:---|:---|:---|:---|
     | virtual-kubelet、bursting-virtual-kubelet | (C+400)/2400\*1000   | (C+400)/600\*1000  | (C+400)/2400\*1024   | (C+400)/300\*1024  |
     | profile-controller                       | (C+1000)/6000\*1000  | (C+400)/1200\*1000 | (C+1000)/6000\*1024  | (C+400)/1200\*1024 |
     | proxy                                    | (P+2000)/12000\*1000 | (P+800)/2400\*1000 | (P+2000)/12000\*1024 | (P+800)/2400\*1024 |
     | resource-syncer、bursting-resource-syncer | (P+800)/4800\*1000   | (P+800)/1200\*1000 | (P+800)/4800\*1024   | (P+800)/600\*1024  |
     | webhook、bursting-webhook                 | (C+400)/2400\*1000   | (C+400)/600\*1000  | (C+1000)/6000\*1024  | (C+400)/1200\*1024 |
        
     
   
   - 网络互通（可选），开启后，支持CCE集群中的Pod与CCI集群中的Pod通过Kubernetes Service互通，并在插件安装时部署Proxy组件。详细功能介绍请参考[网络](https://support.huaweicloud.com/usermanual-cci2/cci_01_0031.html)。
   
   - 同步日志采集策略至 CCI 2.0（可选），开启后，将同步CCE集群日志中心的容器标准输出和容器文件日志采集策略至CCI 2.0，采集弹性到CCI 2.0的Pod日志，并在插件安装时部署组件log-webhook。该组件依赖云原生日志采集插件的日志采集策略，开启前请确保已安装该插件。
    
7. 设置插件支持的参数配置。
   - CCI 资源池默认子网：CCI默认子网，选择弹到CCI的Pod实例会占用所选子网下的IP，请合理规划网段，避免IP资源不足。
   
   - CCI 2.0资源池(bursting-node)扩展子网(可选)：支持选择多个扩展子网。在"CCI 2.0资源池(bursting-node)扩展子网(可选)"下拉框中，可同时选择多个扩展子网，最多可选择19个。
    
8. 完成以上配置后，单击"安装"。
 
#### 通过配置profile控制pod调度到CCI
您可以通过控制台或YAML配置profile控制pod调度到CCI。
表2特殊场景使用说明 
| 特殊使用场景                                  | 使用说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|
| pod同时使用label和ScheduleProfile控制调度CCI 2.0 | 使用label控制调度CCI 2.0的方式优先级高于使用profile控制调度CCI 2.0的方式。 例如label中策略为off，ScheduleProfile的策略为enforce，最终pod不会调度到CCI 2.0。 ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002467559033.png "点击放大")                                                                                                                                                                                      |
| pod同时被多个profile关联                       | pod有且仅有一个关联profile。当pod被多个profile关联，根据profile匹配pod的label的数量，选出最大关联profile，存在多个时，选择字典序小的profile关联。 pod最终被profileA关联 ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002434200358.png "点击放大")                                                                                                                                                                                     |
| 滚动升级导致Pod调度到CCI                         | **现象**：已创建profile且配置本地最大实例数（local: maxNum），但在Deployment滚动升级期间，部分Pod意外调度到了CCI。 **原因** ：Deployment滚动升级时，系统会根据maxSurge（最大激增数）策略创建新Pod，导致短时间内总实例数达到峰值（replicas + maxSurge）。如果此时总数超过了Profile中配置的本地最大实例数（local: maxNum），超出部分的Pod将会被调度到CCI上。如想避免滚动升级时Pod被调度到CCI，请进行相关设置，具体参见[滚动升级时临时允许本地Pod超过设定最大值](https://support.huaweicloud.com/usermanual-cci2/cci_01_0529.html)。 **注意**：如需严格控制，请合理规划maxSurge值或本地资源限额。 |
   
- [通过控制台配置]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
  
  2. 单击集群名称，进入概览页面。
  
  3. 选择"策略 \> CCI弹性承载策略"。
  
  4. 单击"创建CCI弹性承载策略"，并填写相关信息。
     
     表3创建CCI弹性承载策略 
     | 参数       | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     |:---|:---|
     | 策略名称     | 输入策略名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | 命名空间     | 选择弹性策略生效的命名空间。您可选择命名空间或创建命名空间，创建命名空间操作步骤详情请参见[创建命名空间](https://support.huaweicloud.com/usermanual-cce/cce_10_0278.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | 关联负载     | 填写键值或引用负载标签。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
     | 调度策略     | 选择调度策略。 - 本地优先调度：Pod优先调度至CCE节点，当CCE节点资源不足时将Pod弹性至CCI。  - 强制调度：所有Pod均会弹性至CCI。   |
     | 分配策略     | - 本地：设置本地CCE集群。  - CCI：设置CCI上运行的"最大实例数"。                                                                                                                                                 |
     | 最大实例数    | 设置"本地"或"CCI"运行的最大实例数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | 本地缩容优先级  | 取值范围\[-100, 100\]，数值越大越先缩容。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
     | CCI缩容优先级 | 取值范围\[-100, 100\]，数值越大越先缩容。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
     | CCI资源池   | - CCI 2.0资源池(bursting-node)：新一代Serverless容器资源池。  - CCI 1.0资源池(virtual-kubelet)：存量Serverless容器资源池，即将日落。                                                                                   |
        
     
     
  
  5. 单击"确定"。
  
  
  
  6. 选择"工作负载"，单击并创建工作负载，其中"高级配置 \> 标签与注解"中添加Pod标签，其中键值与[4]创建关联负载中的键值需保持一致，其他操作步骤请参考[创建工作负载](https://support.huaweicloud.com/usermanual-cce/cce_10_0673.html)。
  
  7. 完成后单击"创建工作负载"即可。
   
- [通过YAML配置]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
  
  2. 单击集群名称，进入概览页面。
  
  3. 选择"策略 \> CCI弹性承载策略"。
  
  4. 单击"YAML创建"，创建ScheduleProfile对象。 
     示例一：限制调度到CCE集群最大实例数，配置最大实例数（local: maxNum）和scaleDownPriority的ScheduleProfile模板如下：
     ```
     apiVersion: scheduling.cci.io/v2
     kind: ScheduleProfile
     metadata:
       name: test-local-profile
       namespace: default
     spec:
       objectLabels:
         matchLabels:
           app: nginx
       strategy: localPrefer
       virtualNodes:
         - type: bursting-node
       location:
         local: 
           maxNum: 20 # 当前暂不支持local/cci同时配置maxNum
           scaleDownPriority: 2
         cci: 
           scaleDownPriority: 10
     ```
     示例二：限制CCI集群最大实例数，配置cci: maxNum和scaleDownPriority的ScheduleProfile的模板如下：
     ```
     apiVersion: scheduling.cci.io/v2
     kind: ScheduleProfile
     metadata:
       name: test-cci-profile
       namespace: default
     spec:
       objectLabels:
         matchLabels:
           app: nginx
       strategy: localPrefer
       virtualNodes:
         - type: bursting-node
       location:
         local: {}
         cci:
           maxNum: 20 # 当前暂不支持local/cci同时配置maxNum
           scaleDownPriority: 10
     ```
     表4关键参数说明 
     | 参数                | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     |:---|:---|:---|
     | strategy          | String | 表示CCE集群工作负载弹性调度到CCI 2.0策略，取值如下： - enforce，CCE工作负载强制弹性到CCI 2.0。  - auto，根据用户集群调度器实际打分决定是否弹性到CCI 2.0。  - localPrefer，工作负载优先调度到CCE集群，集群资源不足时工作负载弹性到CCI 2.0。   |
     | maxNum            | int    | 表示pod最大数量配置。 取值范围\[0\~int32\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
     | scaleDownPriority | int    | 表示缩容优先级配置，数值越大所关联的pod越先缩容。 取值范围\[-100, 100\]。 该能力基于Kubernetes的Pod Deletion Cost机制实现，属于尽力而为（Best-Effort），尽可能优先缩容优先级较高（即数值较大）的Pod，但受限于集群状态及调度机制，不保证绝对的缩容顺序。                                                                                                                                                                                                                                                                                                                                                                                                                           |
        
     ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
     - location配置local字段（CCE侧）和cci字段（CCI侧）控制pod数量和缩容优先级。
     
     - local字段和cci字段不可以同时设置maxNum。
     
     - 缩容优先级为非必填项参数，如果不配置缩容优先级，默认值将为空。
      
     
     
  
  
  
  5. 单击"确定"。
  
  6. 创建无状态负载，使用selector方式选择含有"app：nginx"的pod，关联上文创建的ScheduleProfile。 
     ```
     kind: Deployment
     apiVersion: apps/v1
     metadata:
       name: nginx
     spec:
       replicas: 10
       selector:
         matchLabels:
           app: nginx
       template:
         metadata:
           labels:
             app: nginx
         spec:
           containers:
             - name: container-1
               image: nginx:latest
               imagePullPolicy: IfNotPresent
               resources:
                 requests:
                   cpu: 250m
                   memory: 512Mi
                 limits:
                   cpu: 250m
                   memory: 512Mi
           imagePullSecrets:
             - name: default-secret
     ```
     
     
  
  7. 单击"确定"。
   
#### 工作负载下发
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
2. 选择CCE集群，单击进入CCE集群总览页面。
3. 在导航栏左侧单击"工作负载"，进入工作负载首页。
4. 单击"创建工作负载"，具体操作步骤详情请参见[创建工作负载](https://support.huaweicloud.com/usermanual-cce/cce_10_0673.html)。
5. 填写基本信息。"弹性至CCI"选择"强制调度"策略，CCI资源池选择"CCI 2.0资源池"。关于调度策略更多信息，请参考[调度负载到CCI](https://support.huaweicloud.com/usermanual-cci2/cci_01_0026.html)。
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002253389677.png "点击放大")
   
   
6. 进行容器配置。
7. 配置完成后，单击"创建工作负载"。
8. 在工作负载页面，选择工作负载名称，单击进入工作负载管理界面。
9. 工作负载所在节点为bursting-node，说明负载成功已调度到CCI。 ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002253512333.png "点击放大")
   
   
 
#### 插件卸载
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
2. 选择CCE集群，单击进入CCE集群总览页面。
3. 在导航栏左侧单击"插件中心"，进入插件中心首页。
4. 选择"CCE 突发弹性引擎 (对接 CCI)"插件，单击"卸载"。 ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002205288928.png)
   表5特殊场景说明 
   | 特殊场景描述          | 场景现象                                    | 场景说明                                                          |
   |:---|:---|:---|
   | CCE集群无节点，卸载插件。  | 插件卸载失败。                                 | bursting插件卸载时会在集群中启动Job用于清理资源，卸载插件时请保证集群中至少有一个可以调度的节点。        |
   | 用户直接删除集群，未卸载插件。 | 用户在CCI侧的命名空间中有资源残留，如果命名空间有计费资源，会造成额外计费。 | 由于直接删除集群，没有执行插件的资源清理Job，造成资源残留。用户可以手动清除残留命名空间及其下的计费资源来避免额外计费。 |
      
   关于CCE突发弹性引擎（对接CCI）更多内容详情请参见：[CCE突发弹性引擎（对接CCI）](https://support.huaweicloud.com/usermanual-cci2/cci_01_0022.html)。
   
 
