CCE容器实例弹性伸缩到CCI服务
CCE突发弹性引擎(对接 CCI)作为一种虚拟的kubelet用来连接Kubernetes集群和其他平台的API。Bursting的主要场景是将Kubernetes API扩展到无服务器的容器平台(如CCI)。
基于该插件,支持用户在短时高负载场景下,将部署在云容器引擎CCE上的无状态负载(Deployment)、有状态负载(StatefulSet)、普通任务(Job)、定时任务(CronJob)四种资源类型的容器实例(Pod),弹性创建到云容器实例CCI服务上,以减少集群扩容带来的消耗。
前提条件
- 使用插件前需要用户在CCI界面对CCI服务进行授权。
- 如果使用CCI 2.0服务对接CCE突发弹性引擎(对接 CCI)请先购买云服务VPCEP,具体操作步骤请参见环境设置。
约束与限制
- 仅支持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)。
- 暂不支持动态资源分配(Dynamic Resource Allocation)特性,并在1.5.27插件版本对相关配置进行拦截。
- 安装bursting插件后会在CCI服务新建一个名为"bursting-"+集群ID的命名空间,该命名空间完全由bursting插件管理,不建议直接在CCI服务使用该命名空间,如需使用CCI服务,请另外新建命名空间。
安装插件
- 登录CCE控制台。
- 选择CCE集群,单击进入CCE集群总览页面。
- 在导航栏左侧单击“插件中心”,进入插件中心首页。
- 选择“CCE 突发弹性引擎 (对接 CCI)”插件,单击“安装”。
- 选择插件版本,推荐您使用最新版本CCE 突发弹性引擎 (对接 CCI)插件。
- 在安装插件页面,根据需求选择“规格配置”。
- 选择“系统预置规格”时,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
- 选择“自定义规格”时,您可根据需求调整插件实例数及资源配额。实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。
- CCE 突发弹性引擎 (对接 CCI) 插件在1.5.2及以上版本,将占用更多节点资源,请在升级CCE突发弹性引擎(对接 CCI)插件前预留节点可创建的Pod数量。节点可分配的Pod数量可参考:节点可创建的最大Pod数量说明。
- 弹性到CCI的业务量不同时,插件的资源占用也不相同。其中proxy、resource-syncer、bursting-resource-syncer组件的资源配额设置与最大弹性Pod数量有关,virtual-kubelet、bursting-virtual-kubelet、profile-controller、webhook、bursting-webhook组件的资源配额设置与最大Pod创建或删除的并发数有关,各组件的资源申请值和限制值推荐计算公式请参见表1,其中P为最大弹性Pod数量,C为最大Pod创建或删除的并发数,建议用户评估自己的业务使用量,选择规格配置。
表1 Bursting组件规格计算公式 组件名称
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组件。详细功能介绍请参考网络。
- 设置插件支持的参数配置。
- 子网:选择弹到 CCI 的 Pod 实例会占用所选子网下的 IP,请合理规划网段,避免 IP 资源不足。
- 企业项目:选择所在企业项目。
- 完成以上配置后,单击“安装”。
通过配置profile控制pod调度到CCI
您可以通过控制台或YAML配置profile控制pod调度到CCI。
- 登录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容器资源池,即将日落。
- 单击“确定”。
- 登录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关联
- 单击“确定”。
工作负载下发
插件卸载
- 登录CCE控制台。
- 选择CCE集群,单击进入CCE集群总览页面。
- 在导航栏左侧单击“插件中心”,进入插件中心首页。
- 选择“CCE 突发弹性引擎 (对接 CCI)”插件,单击“卸载”。
表5 特殊场景说明 特殊场景描述
场景现象
场景说明
CCE集群无节点,卸载插件。
插件卸载失败。
bursting插件卸载时会在集群中启动Job用于清理资源,卸载插件时请保证集群中至少有一个可以调度的节点。
用户直接删除集群,未卸载插件。
用户在CCI侧的命名空间中有资源残留,如果命名空间有计费资源,会造成额外计费。
由于直接删除集群,没有执行插件的资源清理Job,造成资源残留。用户可以手动清除残留命名空间及其下的计费资源来避免额外计费。
关于CCE突发弹性引擎(对接CCI)更多内容详情请参见:CCE突发弹性引擎(对接CCI)。