通过自定义调度优先级配置,实现在vk弹性场景下,扩容时优先调度到本地CCE集群,缩容时优先缩容CCI业务
一、背景说明
Virtual Kubelet插件是基于社区标准生态要求开发的插件,作为一种虚拟的kubelet用来连接Kubernetes集群和其他平台的API。Virtual Kubelet的主要场景是将Kubernetes API扩展到无服务器的容器平台(如CCI)。在当前集群的k8s来看,virtual kubelet进程“伪装”成了一个Node。
CCE/CCE turbo提供企业级kubernetes集群服务,客户在集群中纳管ECS节点,部署容器业务,按照购买的ECS虚拟机规格收费。CCI提供serverless container服务,无需创建集群和节点,秒级拉起业务,依据pod规格按秒付费。CCE集群通过vk插件弹性CCI的方式,可以为客户提供标准kubernetes使用体验的同时,还能应对临时性、大规模弹性业务场景。
对于客户而言,在实际生产管理过程中,CCE/CCE turbo集群主要按照节点收费,属于固定成本;CCI主要依据pod规格,依据Pod运行时间,按秒收费,属于灵活成本。总成本=固定成本+灵活成本,为了进一步降本增效,最佳的策略应该为:
- 新pod创建时,如果CCE/CCE turbo集群有空闲资源,pod优先调度到CCE/CCE turbo上,如果集群没有可调度资源再通过vk部署到CCI上,调度到CCI的pod按秒计费,以更大限度提高固定成本的负载率;
- 当deployment缩容时,如果有运行在CCI的pod,应该优先缩容CCI的pod,以减少灵活成本
二、方案说明
通过ScheduleProfile CRD资源自定义调度优先级。
三、操作示例
操作前提为以创建CCE/CCE turbo集群,并且安装Virtual Kubelet插件,本示例不赘述相关步骤
1. 创建nginx演示负载
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 0
selector:
matchLabels:
app: nginx
version: v1
template:
metadata:
labels:
app: nginx
version: v1
spec:
containers:
- name: container-1
image: nginx:perl
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
dnsPolicy: ClusterFirst
schedulerName: default-scheduler
2. 创建ScheduleProfile CRD资源
apiVersion: scheduling.cci.io/v1
kind: ScheduleProfile
metadata:
name: nginx
namespace: default
spec:
location:
cci:
scaleDownPriority: 50 #定义CCI缩容优先级,值越大越先缩容,取值范围[-100, 100],不设置时,默认值为0
local:
scaleDownPriority: -50 #定义CCE本地集群缩容优先级,此处cci.scaleDownPriority > local.scaleDownPriority,说明cci缩容优先级比本地集群更高,优先缩容cci pod
objectLabels:
matchLabels: # 通过label关联相关deployment,本示例中 nginx deployment管理label为app:nginx version:v1,请根据具体业务修改
app: nginx
version: v1
strategy: localPrefer #配置localPrefer本地优先策略 ,集群资源不足时,将Pod部署到CCI
3. 扩容演示:nginx deploymen扩容时,优先部署在CCE集群中
调整nginx的副本数到20,由于pod的request和集群节点资源情况,第19、20个pod由于本地没有资源才部署到CCI上,第1-18个pod本地有调度资源,优先调度运行在本地集群中。
4. 缩容演示:nginx deployment 缩容时,优先缩容弹性至CCI的pod
缩容2个实例,调度到CCI的2个pod被优先缩容
- 点赞
- 收藏
- 关注作者
评论(0)