装箱调度(Binpack)是一种追求资源高效利用的调度算法,其核心目标是尽可能减少整体资源的浪费。在处理集群中的任务分配时,该算法会智能地将Pod分配到那些已经有一定资源消耗的节点上,以此来减少资源的闲置和碎片化。通过采用装箱调度策略,调度器会优先考虑那些资源使用率较高的节点,将新的Pod部署到这些节点上,而不是选择资源使用率低的节点。这样做的目的是为了避免某些节点资源过载而其他节点资源闲置的情况发生。
在实际操作中,装箱调度有助于提高集群的资源利用率,因为它能够确保资源在整个集群中得到更加均匀和合理的分配。这种方法尤其适用于那些对资源消耗有严格要求的场景,能够帮助集群管理员更有效地管理和优化集群的性能。
前提条件
- 安装智算套件
Binpack调度策略原理
- Binpack调度策略的打分算法会根据Binpack插件自身权重和各资源设置的权重值综合打分。首先,对Pod请求资源中的每类资源依次打分,以CPU为例,CPU资源在待调度节点的得分信息如下:
cpu.weight * (request + used) / allocatable
- 即CPU权重值越高 或者 节点使用率高,得分越高。Memory、GPU等资源原理类似。最后节点得分等于所有资源的得分之和,根据计算出的节点得分,调度器会优选出最优节点进行调度。
使用方式
Binpack调度策略通过更改配置方式开启/关闭该功能。如果想修改资源的权重也可以通过配置进行修改。
[root@ecm-3757-002 ~]# kubectl get cm roc-scheduler-configmap -n kube-system -oyaml
apiVersion: v1
data:
roc-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: priority
- name: gang
enablePreemptable: false
- name: conformance
- plugins:
- name: drf
enablePreemptable: false
- name: predicates
- name: eci
- name: proportion
- name: nodeorder
- name: binpack
arguments:
binpack.weight: 100
binpack.cpu: 10
binpack.memory: 10
binpack.resources.nvidia.com/gpu: 80 # 支持扩展资源配置权重,前缀需加上binpack.resources
kind: ConfigMap
metadata:
annotations:
meta.helm.sh/release-name: roc
meta.helm.sh/release-namespace: kube-system
creationTimestamp: "2024-04-01T09:52:33Z"
labels:
app.kubernetes.io/managed-by: Helm
name: roc-scheduler-configmap
namespace: kube-system
resourceVersion: "18306561"
uid: 23164cf2-374f-4d73-bb6f-c2d7b4e3a89e