文档首页/ 云容器实例 CCI/ 最佳实践/ CCE弹性到CCI/ 使用HPA+Bursting插件弹性CCE容器实例到CCI
更新时间:2026-07-08 GMT+08:00
分享

使用HPA+Bursting插件弹性CCE容器实例到CCI

应用场景

在云容器引擎CCE服务中部署应用时,应用的流量大小时刻在进行变化,有高峰,有低谷,如果时刻保持高峰流量的节点数量,将导致资源闲置与成本浪费。通过配置HPA策略和安装CCE突发弹性引擎(对接 CCI),可以实现工作负载自动伸缩和快速使用Serverless容器资源(CCI)。CCI具有极速弹性、按需计费的特点,可以有效应对流量变化大的场景,并实现降本增效的目标。

HPA策略会持续监控应用程序的关键指标,如CPU使用率、内存使用率等,自动增加或减少Pod的数量,以适应当前应用流量大小,从而确保应用性能的稳定性和资源利用的高效性。CCE突发弹性引擎(对接 CCI)插件支持用户在短时高负载场景下,将部署在云容器引擎CCE上的无状态负载(Deployment)、有状态负载(StatefulSet)、普通任务(Job)、定时任务(CronJob)四种资源类型的容器实例(Pod)弹性调度至云容器实例CCI上,以减少集群扩容带来的消耗。

示例说明

在CCE集群中安装云原生监控插件和CCE突发弹性引擎(对接 CCI)插件后,创建工作负载并配置HPA策略和强制弹性Pod至CCI2.0策略。通过hey压测工具构造请求访问工作负载模拟应用的流量变化,观察工作负载弹性伸缩状态。

约束与限制

  • 监控插件依赖:HPA的触发高度依赖容器监控指标。当工作负载通过Bursting插件弹性调度到CCI虚拟节点时,K8s集群原生的metrics-server可能无法完整采集虚拟节点上的Pod指标。需要在CCE集群的“插件中心”安装并使用云原生监控插件(Cloud Native Monitoring),以确保HPA策略能够准确获取所有本地与CCI实例的CPU/内存使用率。
  • 网络互通要求:请确保CCE集群所在VPC的子网与CCI计划使用的子网网段不冲突,且已正确配置所需的VPC终端节点(VPCEP),否则弹性到CCI的Pod将无法拉取镜像或加入负载均衡(ELB)后端。

前提条件

操作步骤

  1. 登录CCE控制台
  2. 单击集群名称进入集群,单击左侧导航栏选的“插件中心“。搜索“CCE突发弹性引擎(对接 CCI)“插件,单击“安装“。

    • 选择插件版本,推荐使用最新版本。规格配置,选择系统预置规格,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
    • 网络互通(可选),开启后,支持CCE集群中的Pod与CCI集群中的Pod通过Kubernetes Service互通,并在插件安装时部署Proxy组件。详细功能介绍请参考网络
    • 参数配置,配置”CCI资源池默认子网”和”CCI 2.0资源池(bursting-node)扩展子网(可选)”。

  3. 单击左侧导航栏的“工作负载“,通过YAML创建无状态负载。YAML示例如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        version: v1
      name: n1
      namespace: default
    spec:
      selector:
        matchLabels:
          app: n1
          version: v1
      template:
        metadata:
          labels:
            app: n1
            version: v1
            bursting.cci.io/burst-to-cci: 'enforce'  # 配置强制弹性Pod到CCI
        spec:
          containers:
            - name: container-1
              image: nginx:latest   # 指定容器镜像。若使用“开源镜像中心”的镜像,可直接填写镜像名称;若使用SWR仓中的镜像,请在SWR中获取具体镜像地址
              resources:
                requests:
                  cpu: 500m
                  memory: 1Gi
                limits:
                  cpu: 500m
                  memory: 1Gi
          imagePullSecrets:       
            - name: default-secret
    ---

  4. 单击左侧导航栏的“服务”,通过YAML创建服务。YAML示例如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: n1
      namespace: default
      labels:
        app: n1
        version: v1
    spec:
      ports:
        - name: cce-service-0
          protocol: TCP    # 访问Service的协议,支持TCP和UDP
          port: 80         # 访问Service的端口
          targetPort: 80   # Service访问目标容器的端口,此端口与步骤2配置的容器中运行的应用强相关,如本例中nginx镜像默认使用80端口
      selector:
        app: n1
        version: v1
      type: ClusterIP

  5. 单击左侧导航栏的“策略”,通过YAML创建HPA策略。YAML示例如下:

    kind: HorizontalPodAutoscaler
    apiVersion: autoscaling/v2
    metadata:
      name: hpa-n1
      namespace: default
      annotations:
        extendedhpa.metrics: '[{"type":"Resource","name":"cpu","targetType":"Utilization","targetRange":{"low":"45","high":"56"}}]'
    spec:
      scaleTargetRef:
        kind: Deployment
        name: n1
        apiVersion: apps/v1
      minReplicas: 1
      maxReplicas: 10
      metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization          
              averageUtilization: 50

  6. 通过工具构造请求访问创建的Service,进行压测,参考命令如下,发起3000万个请求,并发300个客户端。

    hey -n 30000000 -c 300 "http://$<service_ip>/"

    $<service_ip>:4创建的Service的ClusterIP。

    本文示例使用hey压测工具进行过压测,您也可以自定义配置其他压测工具。进行压测时,需保证配置的压测工具所在的网络环境可正常访问CCE集群。

  7. 观察HPA和负载状态。

    压测前:

    压测后:

常见问题

  • 为什么业务流量回落后,CCI上的Pod没有立即缩容?

    现象:停止压测或业务低谷时,HPA监控指标已下降,但CCI实例依然存活了一段时间才被删除。

    原因:这是Kubernetes HPA的默认保护机制(缩容冷却期)。为防止监控指标瞬时抖动导致实例频繁创建和销毁(Thrashing),系统在触发缩容前默认会等待5 分钟(300秒) 的观察期。

    结论:在此期间实例仍处于存活状态属于正常现象,待冷却期结束后,系统会自动销毁CCI实例并立刻停止按秒计费。

  • 弹性到 CCI 的 Pod,其计费规格是如何计算的?(如何避免超额费用?)

    规整机制:CCI底层具有固定的标准规格(如 0.25C1G、0.5C2G、1C4G 等)。当CCE的Pod弹性调度到CCI时,系统会提取该Pod YAML 中声明的requests和limits的最大值,并自动向上规整到最接近的CCI标准规格进行计费。

    配置建议:在配置HPA弹性时,必须在YAML中声明requests(HPA 扩容的计算基数)。为了避免调度到CCI后规格被意外放大,建议将requests与limits的数值设置为一致,或确保它们的最大值刚好等于某个具体的CCI标准规格(如0.25C1G、1C2G 等)。

    示例:若仅配置requests.cpu: 200m且未配置 limits,调度至CCI后,将按照最接近的0.25核规格进行计费。

  • 进阶实践:如何避免缩容期间出现短暂的访问失败(502)?

    场景:当CCI实例被缩容销毁时,若后端业务进程立即退出,而前端的负载均衡(ELB)尚未完成该实例IP的注销,会导致部分残留流量请求失败。

    建议:在混合弹性架构中,强烈建议为工作负载配置优雅下线(Graceful Shutdown)。在Deployment的lifecycle中配置preStop钩子(例如执行sleep 15),让容器在收到终止信号后延迟15秒退出。这能为ELB异步摘除节点留出充足时间,有效保障缩容期间的业务连续性。

相关文档