众核调度用户指南
特性介绍
随着数据中心服务器芯片向众核架构(256核及以上)快速演进,多业务混合部署场景下的核心资源争抢问题日益突出,具体表现为以下特征。
- 锁竞争激增:当核数超过256时,频繁的共享内核资源访问(如文件系统、网络栈、系统调用)导致锁竞争加剧,同步原语(互斥锁、信号量等)的全局竞争显著增加,引发大规模上下文切换开销。
- 资源匹配失衡:核密度提升的同时,内存带宽与I/O吞吐量未同步增长,高密度混部场景下算力密集型业务与内存敏感型业务易发生资源踩踏。
- 部署密度瓶颈:为保证关键业务QoS,传统调度策略在超大规模核场景下容器部署密度骤降<20%,造成硬件资源利用率严重劣化。
众核集群中存在集群间资源分配不均匀的情况,部分节点I/O竞争较大、部分节点内存竞争较大。所以在集群层面采用均衡调度的方式,尽量将同类型业务调度至不同节点上。
本特性支持为工作负载显式标注业务特征标签(I/O密集型、内存敏感型、算力密集型),调度器采用多维加权评分算法动态选择资源竞争最小的目标节点,评分维度包括同类业务资源请求占比和节点剩余资源量。
应用场景
用户在部署工作负载时,如果配置了业务类型,则根据业务类型的不同将其调度至最合适的节点上。
能力范围
- Webhook拦截错误请求:增加防呆机制,通过白名单的形式拦截错误的业务类型字段创建请求,并给出提示。
- 均衡调度:根据不同业务类型,将工作负载调度至最合适的节点上。
亮点特征
根据不同的业务类型,进行反亲和调度。
实现原理
工作负载类型配置
用户可通过工作负载的YAML注解(annotation)指定业务类型,该配置需用户显式声明。系统支持以下三种业务类型:
- I/O密集型(io-intensive)
- 内存敏感型(memory-sensitive)
- 算力密集型(compute-intensive)
配置示例:
apiVersion: v1
kind: Pod
metadata:
annotations:
# 核心业务类型标签
business.workload/type: "io-intensive" # 可选值:io-intensive/memory-sensitive/compute-intensive
同时,本策略可支持用户将一个应用配置多种业务类型,示例如下。
apiVersion: v1
kind: Pod
metadata:
annotations:
business.workload/type: "io-intensive,memory-sensitive" # 多种业务类型以逗号隔开
本调度策略根据工作负载的业务类型,采用加权打分机制,选择同类型业务最少的节点。
针对不同的负载类型,重点关注不同的资源维度:
-
I/O密集型
type.score = 0.6(1 - DiskIOUsage) + 0.2(1 - CPUUsage) + 0.2(1 - MemUsage)
-
内存敏感型
type.score = 0.6(1 - MemUsage) + 0.2(1 - CPUUsage) + 0.2(1 - DiskIOUsage)
-
算力密集型
type.score = 0.6(1 - CPUUsage) + 0.2(1 - MemUsage) + 0.2(1 - DiskIOUsage)
变量解释:
-
DiskIOUsage:磁盘I/O利用率。
-
MemUsage:内存利用率。
-
CPUUsage:CPU利用率。
多业务类型混合调度计算
如果某个工作负载配置了多种业务类型标签,则根据各个已配置的策略得分计算总得分:
说明:
type.weight:策略权重,默认值为1。
调度决策
系统将工作负载调度至综合得分(Balanced.score)最高的节点。
与相关特性的关系
本特性为volcano的扩展调度策略,依赖volcano共同安装使用。
相关实例
代码链接:https://gitcode.com/openFuyao/many-core-scheduler
安装
本特性为volcano的扩展调度策略,安装部署时随着volcano-config-service共同安装。
前提条件
- 已部署Kubernetes v1.21及以上。
- 已部署Containerd v1.7及以上。
开始安装
- 在openFuyao平台的左侧导航栏选择“应用市场 > 应用列表”,进入“应用列表”界面。
- 勾选左侧类型“扩展组件”,查看所有扩展组件。或在搜索框中输入“volcano”。
- 单击“volcano-config-service”卡片,进入调度扩展组件“详情”界面。
- 单击“部署”进入“部署”界面。
- 输入应用名称、选择安装版本和命名空间。
- 在参数配置的“Values.yaml”中输入要部署的values信息。
- 单击“部署”完成部署,此时已部署完成均衡调度相关组件。
- 勾选左侧类型“扩展组件”,查看所有扩展组件。或在搜索框中输入“many-core”。
- 单击“many-core-scheduler”卡片,进入调度扩展组件“详情”界面。
- 单击“部署”进入“部署”界面。
- 输入应用名称、选择安装版本和命名空间。
- 在参数配置的“Values.yaml”中输入要部署的values信息。
- 单击“部署”完成部署,此时已部署完成均衡调度相关组件。
- 在左侧导航栏单击“扩展组件管理”,管理调度组件。
独立部署
相比于应用市场安装部署,本组件提供了独立部署功能,步骤如下:
-
拉取镜像。
helm pull oci://harbor.openfuyao.com/openfuyao-catalog/charts/volcano-config-service --version xxx
helm pull oci://harbor.openfuyao.com/openfuyao-catalog/charts/many-core-scheduler --version xxx将其中的xxx替换成需要拉取的helm镜像版本,例如:0.0.0-latest
-
解压安装包。
tar -zxvf volcano-config-service-xxx.tgz
tar -zxvf many-core-scheduler-xxx.tgz -
关闭openFuyao及Oauth开关。
vim volcano-config-service/charts/volcano-config-website/values.yaml
将enableOAuth以及openFuyao选项改为false。
-
独立安装。
helm install volcano-config-service ./volcano-config-service/
helm install many-core-scheduler ./many-core-scheduler/
开启调度策略
前提条件
无。
背景信息
对已部署的调度扩展组件进行修改调度策略。
使用限制
需要已部署可支持配置调度策略的调度扩展组件。
操作步骤
-
单击左侧导航栏“资源管理”中选择“配置与密钥 > ConfigMap”通过配置YAML方式新增balance策略。
apiVersion: v1
data:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: balance # 此处新增balance策略
- name: priority
- name: gang
enablePreemptable: false
- name: conformance
- plugins:
- name: overcommit
- name: drf
enablePreemptable: false
- name: predicates
- name: proportion
- name: nodeorder
- name: binpack -
单击左侧导航栏“资源管理”中选择“工作负载 > Pod,重启volcano调度器pod,以生效新调度配置。
-
单击左侧导航栏“资源管理”中选择“工作负载 > Pod”通过配置YAML方式创建Pod。示例如下,在annotations中加上业务类型标签,并指定调度器为volcano。
apiVersion: v1
kind: Pod
metadata:
annotations:
# 核心业务类型标签
business.workload/type: "io-intensive"
spec:
schedulerName: volcano
containers:xxx -
使用该YAML创建工作负载,根据配置的业务类型进行调度。