调度负载到CCI 2.0
对于使用CCE集群和CCI的使用场景,用户可以按需将工作负载调度到CCE集群节点或者对接CCI的虚拟节点,本文详细介绍如何将CCE集群的工作负载调度到CCI 2.0上。
bursting插件当前提供了以下方式管理CCE集群的pod,使其能够调度到CCI 2.0:
约束与限制
- 当前只有负载的原生标签能够被ScheduleProfile匹配,使负载能够被ScheduleProfile管理,将CCE集群的Pod调度到CCI 2.0。例如通过ExtensionProfile加到负载上的标签不能够被ScheduleProfile匹配,因此不会被ScheduleProfile管理调度功能。
- 通过配置labels控制pod调度到CCI 2.0的方式,需要在创建工作负载前添加label,若对已创建的工作负载进行追加label操作,存量工作负载对应的pod不会更新,可选择该工作负载,单击“更多 -> 重新部署”实现更新。
前提条件
- 插件版本:已安装CCE突发弹性引擎(对接 CCI)且插件,如果使用配置profile控制pod调度到CCI的方式请安装CCE突发弹性引擎(对接 CCI)插件版本为1.3.19及以上版本。
- 集群类型:如果使用配置profile控制pod调度到CCI方式仅支持VPC网络模式的CCE Standard集群和CCE Turbo集群。
调度策略
调度策略 |
策略图解 |
适用场景 |
---|---|---|
强制调度策略(enforce) |
|
CCE工作负载强制弹性到CCI 2.0。 |
自动调度策略(auto) |
|
根据用户集群调度器实际打分决定是否弹性到CCI 2.0。 |
本地优先调度策略(localPrefer) |
|
工作负载优先调度到CCE集群,集群资源不足时工作负载弹性到CCI 2.0。 |
不开启(off) |
|
工作负载不会弹性到CCI 2.0。 |
通过控制台配置
- 登录CCE控制台,单击集群名称,进入概览页面。
- 选择“工作负载”,单击“创建工作负载”。
- 在基本信息中“弹性至CCI”选择“不开启”以外的任意策略。
- 本地优先调度:Pod优先调度至CCE节点,当CCE节点资源不足时将Pod弹性至CCI。
- 强制调度:所有Pod均会弹性至CCI。
- 勾选相关的CCI资源池。
- CCI 2.0资源池(bursting-node):新一代Serverless容器资源池。
- CCI 1.0资源池(virtual-kubelet):存量Serverless容器资源池,即将日落。
在CCE集群控制台(console)创建工作负载时,CCI弹性承载支持勾选“CCI 2.0资源池(bursting-node)”或者“CCI 1.0资源池(virtual-kubelet)”,如果使用CCI 1.0请勾选“virtual-kubelet”,如果使用CCI 2.0请勾选“bursting-node”。
- CCE工作负载具体操作步骤详情请参见创建工作负载,完成后单击“确定”即可。
通过YAML文件配置
- 登录CCE控制台,单击集群名称,进入概览页面。
- 选择“工作负载”,单击“YAML创建”。
- 在工作负载的yaml文件中添加virtual-kubelet.io/burst-to-cci标签。
apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: default labels: bursting.cci.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 关键参数说明 参数
类型
描述
bursting.cci.io/burst-to-cci
String
表示CCE集群工作负载弹性调度到CCI策略,取值如下:- enforce,CCE工作负载强制弹性到CCI 2.0。
- auto,根据用户集群调度器实际打分决定是否弹性到CCI 2.0。
- localPrefer,工作负载优先调度到CCE集群,集群资源不足时工作负载弹性到CCI 2.0。
- off,工作负载不会弹性到CCI 2.0。
- 完成后单击“确定”。
通过控制台配置
- 登录CCE控制台,单击集群名称,进入概览页面。
- 选择“策略 > CCI弹性承载策略”。
- 单击“创建CCI弹性承载策略”,并填写相关信息。
表2 创建CCI弹性承载策略 参数
参数说明
策略名称
输入策略名称。
命名空间
选择弹性策略生效的命名空间。您可选择命名空间或创建命名空间,创建命名空间操作步骤详情请参见创建命名空间。
关联负载
填写键值或引用负载标签。
调度策略
选择调度策略。
- 本地优先调度: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容器资源池,即将日落。
- 单击“确定”。
通过YAML配置
- 登录CCE控制台,单击集群名称,进入概览页面。
- 选择“策略 > CCI弹性承载策略”。
- 单击“YAML创建”,创建profile对象。
示例一:限制调度到CCE集群最大负载数,配置local maxNum和scaleDownPriority的profile模板如下:
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的profile的模板如下: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
表3 关键参数说明 参数
类型
描述
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]。
- location配置local字段(CCE侧)和cci字段(CCI侧)控制pod数量和缩容优先级。
- local字段和cci字段不可以同时设置maxNum。
- 缩容优先级为非必填项参数,如果不配置缩容优先级,默认值将为空。
- 单击“确定”。
- 创建无状态负载,使用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 2.0
使用label控制调度CCI 2.0的方式优先级高于使用profile控制调度CCI 2.0的方式。
例如label中策略为off,profile的策略为enforce,最终pod不会调度到CCI 2.0。
pod同时被多个profile关联
pod有且仅有一个关联profile。当pod被多个profile关联,根据profile匹配pod的label的数量,选出最大关联profile,存在多个时,选择字典序小的profile关联。
pod最终被profileA关联
- 单击“确定”。