CCE容器实例弹性伸缩到CCI服务
Virtual Kubelet是基于社区Virtual Kubelet开源项目开发的插件,该插件支持用户在短时高负载场景下,将部署在CCE上的无状态负载(Deployment)、有状态负载(StatefulSet)、普通任务(Job)三种资源类型的容器实例(Pod),弹性创建到华为云云容器实例CCI服务上,以减少集群扩容带来的消耗。
具体功能如下:
- 支持容器实例实现秒级弹性伸缩:Virtual Kubelet插件将自动为您在云容器实例CCI侧创建容器实例,减少运维成本。
- 无缝对接华为云容器镜像服务SWR,支持使用公用镜像和私有镜像。
- 支持CCI容器实例的事件同步、监控、日志、exec、查看状态等操作。
- 支持查看虚拟弹性节点的节点容量信息。
- 支持CCE和CCI两侧实例的service网络互通。
约束及限制
- 仅支持VPC网络模式的CCE集群和CCE Turbo集群(virtual-kubelet 1.2.5版本及以上支持),且仅支持1.19及以下集群。
- 调度到CCI的实例的存储类型只支持ConfigMap、Secret、emptyDir、SFS、SFS Turbo几种Volume类型,其中emptyDir不支持子路径。
- 暂不支持守护进程集(DaemonSet)以及HostNetwork网络模式的容器实例(Pod)弹性到CCI。
- 跨CCE和CCI实例Service网络互通只支持集群内访问(ClusterIP)类型。
- 集群所在子网不能与10.247.0.0/16重叠,否则会与CCI命名空间下的Service网段冲突,导致无法使用。
- 使用插件前需要用户在CCI界面对CCI服务进行授信。
- 安装virtual-kubelet插件后会在CCI服务新建一个名为"cce-burst-"+集群ID的命名空间,该命名空间完全由virtual-kubelet管理,不建议直接在CCI服务使用该命名空间,如需使用CCI服务,请另外新建命名空间。
- 实例的规格必须满足云容器实例CCI的容器规范。
- 使用1.2.5以下版本插件时,各容器的Requests须等于Limits(1.2.5及以上版本插件两者可不相等,弹性到CCI时自动将两者设置为一样,若配置了Limits,则以Limits为准,没有配Limits,则以Requests为准)。
- Pod中至少有1个容器配置CPU大于0。
- 经过资源自动规整后,Pod总CPU不得超过32核,内存不得超过256Gi。
资源自动规整
对弹性到CCI的Pod,若其配置的资源规格不满足CCI容器规范,virtual-kubelet会自动尝试将Pod资源向上规整到满足CCI容器规范的范围,以规整后的资源规格创建Pod到CCI。
自动规整规则如下:
- 将Pod中除了BestEffort类型容器外的每个容器CPU向上调整至0.25核的整数倍, Memory向上调整至大于等于0.2Gi。
- 将整个Pod的Memory向上调整至1Gi的整数倍。
- 若Pod Memory/CPU的比值小于2,则将Pod Memory向上调整至大于等于CPU的2倍,且满足是1Gi的整数倍;若Pod Memory/CPU的比值大于8,则将Pod CPU向上调整至大于等于Memory的1/8,且满足是0.25核的整数倍。
- 若向上调整之后,CPU超过32核或Memory超过256Gi,则矫正失败,拒绝创建请求。
- 以上对Pod级别资源向上调整造成的增量CPU和Memory,全部添加到Pod中第一个不为BestEffort的容器上。
安装插件
- 登录CCE控制台,进入集群,单击左侧导航栏的“插件管理”,在右侧找到virtual-kubelet,单击“安装”。
- 选择插件规格,勾选“支持CCE集群中的Pod与CCI集群中的Pod通过Kubernetes Service互通”。
- 单击“安装”。
通过Yaml文件创建工作负载
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-vk
labels:
virtual-kubelet.io/burst-to-cci: 'auto'
spec:
replicas: 20
selector:
matchLabels:
app: test-vk
template:
metadata:
labels:
app: test-vk
spec:
containers:
- name: container-0
image: centos:latest
resources:
limits:
cpu: 500m
memory: 1024Mi
requests:
cpu: 500m
memory: 1024Mi
command:
- /bin/bash
- '-c'
- sleep 10000
dnsPolicy: Default

标红部分为添加labels。
创建弹性至CCI的负载时需要在负载的labels中添加如下字段:
virtual-kubelet.io/burst-to-cci: "auto"
其中,value值支持以下选项:
- auto:CCE节点资源使用率较高时自动弹性至CCI。
- enforce:强制调度至CCI。
- off:不调度至CCI。
卸载插件
- 登录CCE控制台,进入集群,在左侧导航栏选择“插件管理”,在右侧“已安装插件”页签下,单击virtual kubelet下的“卸载”。
- 在弹出的窗口中,单击“是”,可卸载该插件。(卸载插件会自动删除CCI侧的所有资源,以确保不会有资源残留造成额外计费)

如果在未卸载virtual-kubelet插件的情况下直接删除集群,CCI侧的资源不会被自动清理,会导致CCI侧资源残留,可能会造成额外计费。因此请确保完成以下任意一操作。
- 在删除集群前先卸载virtual-kubelet插件。
- 在直接删除集群后登录CCI控制台删除名为cce-burst-${CLUSTER_ID}的命名空间。
