文档首页/ 云容器引擎 CCE/ 最佳实践/ 弹性伸缩/ CCE容器实例弹性伸缩到CCI服务
更新时间:2025-08-12 GMT+08:00
分享

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服务,请另外新建命名空间。

安装插件

  1. 登录CCE控制台。
  2. 选择CCE集群,单击进入CCE集群总览页面。
  3. 在导航栏左侧单击“插件中心”,进入插件中心首页。
  4. 选择“CCE 突发弹性引擎 (对接 CCI)”插件,单击“安装”。
  5. 选择插件版本,推荐您使用最新版本CCE 突发弹性引擎 (对接 CCI)插件。
  6. 在安装插件页面,根据需求选择“规格配置”
    • 选择“系统预置规格”时,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
    • 选择“自定义规格”时,您可根据需求调整插件实例数及资源配额。实例数为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组件。详细功能介绍请参考网络
  7. 设置插件支持的参数配置。
    • 子网:选择弹到 CCI 的 Pod 实例会占用所选子网下的 IP,请合理规划网段,避免 IP 资源不足。
    • 企业项目:选择所在企业项目。
  8. 完成以上配置后,单击“安装”

通过配置profile控制pod调度到CCI

您可以通过控制台或YAML配置profile控制pod调度到CCI。

  1. 登录CCE控制台,单击集群名称,进入概览页面。
  2. 选择“策略 > CCI弹性承载策略”。
  3. 单击“创建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容器资源池,即将日落。

  4. 单击“确定”。
  1. 选择“工作负载”,单击并创建工作负载,其中“高级配置 > 标签与注解”中添加Pod标签,其中键值与3创建关联负载中的键值需保持一致,其他操作步骤请参考创建工作负载
  2. 完成后单击“创建工作负载”即可。
  1. 登录CCE控制台,单击集群名称,进入概览页面。
  2. 选择“策略 > CCI弹性承载策略”。
  3. 单击“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。
    • 缩容优先级为非必填项参数,如果不配置缩容优先级,默认值将为空。

  1. 单击“确定”。
  2. 创建无状态负载,使用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关联

  3. 单击“确定”。

工作负载下发

  1. 登录CCE控制台。
  2. 选择CCE集群,单击进入CCE集群总览页面。
  3. 在导航栏左侧单击“工作负载”,进入工作负载首页。
  4. 单击“创建工作负载”,具体操作步骤详情请参见创建工作负载
  5. 填写基本信息。“弹性至CCI”选择“强制调度”策略,CCI资源池选择“CCI 2.0资源池”。关于调度策略更多信息,请参考调度负载到CCI

  6. 进行容器配置。
  7. 配置完成后,单击“创建工作负载”。
  8. 在工作负载页面,选择工作负载名称,单击进入工作负载管理界面。
  9. 工作负载所在节点为bursting-node,说明负载成功已调度到CCI。

插件卸载

  1. 登录CCE控制台。
  2. 选择CCE集群,单击进入CCE集群总览页面。
  3. 在导航栏左侧单击“插件中心”,进入插件中心首页。
  4. 选择“CCE 突发弹性引擎 (对接 CCI)”插件,单击“卸载”。

    表5 特殊场景说明

    特殊场景描述

    场景现象

    场景说明

    CCE集群无节点,卸载插件。

    插件卸载失败。

    bursting插件卸载时会在集群中启动Job用于清理资源,卸载插件时请保证集群中至少有一个可以调度的节点。

    用户直接删除集群,未卸载插件。

    用户在CCI侧的命名空间中有资源残留,如果命名空间有计费资源,会造成额外计费。

    由于直接删除集群,没有执行插件的资源清理Job,造成资源残留。用户可以手动清除残留命名空间及其下的计费资源来避免额外计费。

    关于CCE突发弹性引擎(对接CCI)更多内容详情请参见:CCE突发弹性引擎(对接CCI)

相关文档