跳到主要内容
版本:v1.13.0 (最新版)

Nodeorder

概述

Nodeorder 插件是一种调度优化策略,通过模拟分配从多个维度对节点进行打分,以找到最适合当前任务的节点。打分参数由用户配置。

工作原理

Nodeorder 插件实现了 NodeOrderFn,使用一系列打分算法对任务的所有候选节点进行评分。得分最高的节点被认为是最适合该任务的节点。

评分维度包括:

  • Affinity(亲和性):节点和 Pod 亲和性/反亲和性分数
  • LeastRequestedResource(最少请求资源):优先选择可用资源更多的节点
  • MostRequestedResource(最多请求资源):优先选择可用资源较少的节点(用于整合)
  • BalancedResourceAllocation(均衡资源分配):优先选择资源使用均衡的节点
  • ImageLocality(镜像本地性):优先选择已缓存所需容器镜像的节点

应用场景

Nodeorder 插件从多个维度提供调度评分标准。通过组合不同维度,用户可以根据自身需求灵活配置合适的调度策略。

工作负载分布

通过调整不同评分维度的权重,可以控制工作负载在集群中的分布方式:

  • 使用 LeastRequestedResource 均匀分散工作负载
  • 使用 MostRequestedResource 整合工作负载(类似 Binpack)

镜像本地性优化

对于体积较大的容器镜像,使用 ImageLocality 打分可以通过优先选择已缓存所需镜像的节点来缩短 Pod 启动时间。

亲和性优化

Affinity 维度确保 Pod 按照其亲和性和反亲和性规则进行放置。

配置

Nodeorder 插件在调度器 ConfigMap 中启用,支持配置权重:

tiers:
- plugins:
- name: predicates
- name: nodeorder
arguments:
nodeorder.weight: 10
nodeorder.leastrequested.enable: true
nodeorder.mostrequested.enable: false
nodeorder.nodeaffinity.enable: true
nodeorder.podaffinity.enable: true
nodeorder.balancedresource.enable: true
nodeorder.imagelocality.enable: true

配置参数

参数说明默认值
nodeorder.weightNodeorder 插件的整体权重1
nodeorder.leastrequested.enable启用最少请求资源打分true
nodeorder.mostrequested.enable启用最多请求资源打分false
nodeorder.nodeaffinity.enable启用节点亲和性打分true
nodeorder.podaffinity.enable启用 Pod 亲和性打分true
nodeorder.balancedresource.enable启用均衡资源打分true
nodeorder.imagelocality.enable启用镜像本地性打分true
nodeorder.leastrequested.weight最少请求打分的权重1
nodeorder.mostrequested.weight最多请求打分的权重1
nodeorder.nodeaffinity.weight节点亲和性打分的权重1
nodeorder.podaffinity.weightPod 亲和性打分的权重1
nodeorder.balancedresource.weight均衡资源打分的权重1
nodeorder.imagelocality.weight镜像本地性打分的权重1

示例

分散工作负载的配置

apiVersion: v1
kind: ConfigMap
metadata:
name: volcano-scheduler-configmap
namespace: volcano-system
data:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: priority
- name: gang
- plugins:
- name: predicates
- name: nodeorder
arguments:
nodeorder.leastrequested.enable: true
nodeorder.leastrequested.weight: 2
nodeorder.balancedresource.enable: true

整合工作负载的配置

apiVersion: v1
kind: ConfigMap
metadata:
name: volcano-scheduler-configmap
namespace: volcano-system
data:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: priority
- name: gang
- plugins:
- name: predicates
- name: nodeorder
arguments:
nodeorder.mostrequested.enable: true
nodeorder.mostrequested.weight: 2
nodeorder.leastrequested.enable: false

带 Pod 亲和性的作业

apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
name: affinity-job
spec:
schedulerName: volcano
minAvailable: 2
tasks:
- replicas: 2
name: worker
template:
spec:
affinity:
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: cache
topologyKey: kubernetes.io/hostname
containers:
- name: worker
image: busybox

Nodeorder 插件将对已存在符合亲和性规则 Pod 的节点给予更高的分数。