
# 调度负载到CCI
#### 简介
对于使用CCE集群和CCI的使用场景，用户可以按需将工作负载调度到CCE集群节点或者对接CCI的虚拟节点，本文详细介绍如何将CCE集群的工作负载调度到CCI上。
bursting插件当前提供了以下方式管理CCE集群的pod，使其能够调度到CCI：
- [方法一：通过配置labels控制pod调度到CCI]
- [方法二：通过配置profile控制pod调度到CCI]
 
#### 约束与限制
- 当前只有负载的原生标签能够被ScheduleProfile匹配，使负载能够被ScheduleProfile管理，将CCE集群的Pod调度到CCI。例如通过ExtensionProfile加到负载上的标签不能够被ScheduleProfile匹配，因此不会被ScheduleProfile管理调度功能。
- 通过配置labels控制pod调度到CCI的方式，需要在创建工作负载前添加label，若对已创建的工作负载进行追加label操作，存量工作负载对应的pod不会更新，可选择该工作负载，单击"更多 -\> 重新部署"实现更新。 ![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000002248772961.png)
  
 
#### 前提条件
- 插件版本：已安装CCE突发弹性引擎（对接 CCI）且插件，如果使用配置profile控制pod调度到CCI的方式请安装CCE突发弹性引擎（对接 CCI）插件版本为1.3.19及以上版本。
- 集群类型：如果使用配置profile控制pod调度到CCI方式仅支持VPC网络模式的CCE Standard集群和CCE Turbo集群。
 
#### 调度策略
CCE集群工作负载弹性调度到CCI策略有以下几种：
| 调度策略                  | 策略图解                                                                                 | 适用场景                              |
|:---|:---|:---|
| 强制调度策略（enforce）       | ![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000001815316209.png) | CCE工作负载强制弹性到CCI。                  |
| 自动调度策略（auto）          | ![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000001815316377.png) | 根据用户集群调度器实际打分决定是否弹性到CCI。          |
| 本地优先调度策略（localPrefer） | ![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000001815436629.png) | 工作负载优先调度到CCE集群，集群资源不足时工作负载弹性到CCI。 |
| 不开启（off）              | ![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000001787483854.png) | 工作负载不会弹性到CCI。                     |
   
 #### 方法一：通过配置labels控制pod调度到CCI
您可以通过控制台或YAML配置labels控制pod调度到CCI。
#### 通过控制台配置labels
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
2. 单击集群名称，进入概览页面。
3. 选择"工作负载"，单击"创建工作负载"。
4. 在基本信息中"弹性至CCI"选择"不开启"以外的任意策略。 
   - 本地优先调度：Pod优先调度至CCE节点，当CCE节点资源不足时将Pod弹性至CCI。
   
   - 强制调度：所有Pod均会弹性至CCI。
   
   
   
   
5. 勾选相关的CCI资源池。 
   - CCI 2.0资源池(bursting-node)：新一代Serverless容器资源池。
   
   - CCI 1.0资源池(virtual-kubelet)：存量Serverless容器资源池，即将日落。
     ![](https://support.huaweicloud.com/usermanual-cci/public_sys-resources/note_3.0-zh-cn.png)
     在CCE集群控制台（console）创建工作负载时，CCI弹性承载支持勾选"CCI 2.0资源池(bursting-node)"或者"CCI 1.0资源池(virtual-kubelet)"，如果使用CCI 1.0请勾选"virtual-kubelet"，如果使用CCI 2.0请勾选"bursting-node"。
     
   
   
   
   
6. CCE工作负载具体操作步骤详情请参见[创建工作负载](https://support.huaweicloud.com/usermanual-cce/cce_10_0673.html)，完成后单击"确定"即可。
 
#### 通过YAML文件配置labels
1. 登录CCE控制台，单击集群名称，进入概览页面。
2. 选择"工作负载"，单击"YAML创建"。
3. 在工作负载的yaml文件中添加virtual-kubelet.io/burst-to-cci标签。 
   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: test
     namespace: default
     labels:
       virtual-kubelet.io/burst-to-cci: 'auto'    # 弹性到CCI
   spec:
     replicas: 2
     selector:
       matchLabels:
         app: test
     template:
       metadata:
         labels:
           app: test
       spec:
         containers:
           - image: 'nginx:perl'
             name: container-0
             resources:
               requests:
                 cpu: 250m
                 memory: 512Mi
               limits:
                 cpu: 250m
                 memory: 512Mi
             volumeMounts: []
         imagePullSecrets:
           - name: default-secret
   ```
   表1关键参数说明 
   | 参数                              | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   |:---|:---|:---|
   | virtual-kubelet.io/burst-to-cci | String | 表示CCE集群工作负载弹性调度到CCI策略，取值如下： - enforce，CCE工作负载强制弹性到CCI。  - auto，根据用户集群调度器实际打分决定是否弹性到CCI。  - localPrefer，工作负载优先调度到CCE集群，集群资源不足时工作负载弹性到CCI。  - off，工作负载不会弹性到CCI。   |
      
   
   
4. 完成后单击"确定"。
 
 #### 方法二：通过配置profile控制pod调度到CCI
您可以通过控制台或YAML配置profile控制pod调度到CCI。
#### 通过控制台配置
1. 登录CCE控制台，单击集群名称，进入概览页面。
2. 选择"策略 \> CCI弹性承载策略"。
3. 单击"创建CCI弹性承载策略"，并填写相关信息。
   
   表2创建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容器资源池，即将日落。   |
      
   
   
4. 单击"确定"。

5. 选择"工作负载"，单击并创建工作负载，其中"高级配置 \> 标签与注解"中添加Pod标签，其中键值与[3]创建关联负载中的键值需保持一致，其他操作步骤请参考[创建工作负载](https://support.huaweicloud.com/usermanual-cce/cce_10_0673.html)。
6. 完成后单击"创建工作负载"即可。
 
#### 通过YAML配置
1. 登录CCE控制台，单击集群名称，进入概览页面。
2. 选择"策略 \> CCI弹性承载策略"。
3. 单击"YAML创建"，创建profile对象。 
   示例一：限制调度到CCE集群最大负载数，配置local maxNum和scaleDownPriority的profile模板如下：
   ```
   apiVersion: scheduling.cci.io/v1
   kind: ScheduleProfile
   metadata:
     name: test-cci-profile
     namespace: default
   spec:
     objectLabels:
       matchLabels:
         app: nginx
     strategy: localPrefer
     location:
       local: 
         maxNum: 20 # 当前暂不支持local/cci同时配置maxNum
         scaleDownPriority: 10
       cci: {}
   ```
   示例二：限制CCI集群最大负载数，配置cci maxNum和scaleDownPriority的profile的模板如下：
   ```
   apiVersion: scheduling.cci.io/v1
   kind: ScheduleProfile
   metadata:
     name: test-cci-profile
     namespace: default
   spec:
     objectLabels:
       matchLabels:
         app: nginx
     strategy: localPrefer
     location:
       local: {}
       cci:
         maxNum: 20 # 当前暂不支持local/cci同时配置maxNum
         scaleDownPriority: 10
   ```
   表3关键参数说明 
   | 参数                | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                  |
   |:---|:---|:---|
   | strategy          | String | 表示CCE集群工作负载弹性调度到CCI策略，取值如下： - enforce，CCE工作负载强制弹性到CCI。  - auto，根据用户集群调度器实际打分决定是否弹性到CCI。  - localPrefer，工作负载优先调度到CCE集群，集群资源不足时工作负载弹性到CCI。   |
   | maxNum            | int    | 表示pod最大数量配置。 取值范围\[0\~int32\]。                                                                                                                                                                                                                                                                                                       |
   | scaleDownPriority | int    | 表示缩容优先级配置，数值越大所关联的pod越先缩容。 取值范围\[-100, 100\]。                                                                                                                                                                                                                                                                                         |
      
   ![](https://support.huaweicloud.com/usermanual-cci/public_sys-resources/note_3.0-zh-cn.png)
   - location配置local字段（CCE侧）和cci字段（CCI侧）控制pod数量和缩容优先级。
   
   - local字段和cci字段不可以同时设置maxNum。
   
   - 缩容优先级为非必填项参数，如果不配置缩容优先级，默认值将为空。
    
   
   

4. 单击"确定"。
5. 创建无状态负载，使用selector方式选择含有"app：nginx"的pod，关联上文创建的profile。 
   ```
   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
   ```
   表4特殊场景使用说明 
   | 特殊使用场景                      | 使用说明                                                                                                                                                                                                                                                                  |
   |:---|:---|
   | pod同时使用label和profile控制调度CCI | 使用label控制调度CCI的方式优先级高于使用profile控制调度CCI的方式。 例如label中策略为off，profile的策略为enforce，最终pod不会调度到CCI。 ![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000001862784401.png)                         |
   | pod同时被多个profile关联           | pod有且仅有一个关联profile。当pod被多个profile关联，根据profile匹配pod的label的数量，选出最大关联profile，存在多个时，选择字典序小的profile关联。 pod最终被profileA关联 ![](https://support.huaweicloud.com/usermanual-cci/zh-cn_image_0000001866953184.png) |
      
   
   
6. 单击"确定"。
 
