Queue 定义
queue是容纳一组podgroup的队列,也是该组podgroup获取集群资源的划分依据。
资源静态限制例子
可以通过spec.capability字段添加资源限制。下面字段包含k8s标准资源CPU, 内存以外,其他所以子定义资源,例如nvidia device plugin 注册nvidia.com/gpu, volcano项目自带一gpu共享插件volcano.sh/gpu-memory 等。
apiVersion: scheduling.volcano.sh/v1beta1kind: Queuemetadata:name: test-gpuspec:weight: 1reclaimable: falsecapability:cpu: 2memory: "8Gi"nvidia.com/gpu: "3"volcano.sh/gpu-memory: 1000
capability 可以支持什么类型资源,可以通过下面命令获取各个节点资源
$ kubectl describe nodes....Resource Requests Limits-------- -------- ------cpu 100m (0%) 0 (0%)memory 70Mi (0%) 170Mi (0%)ephemeral-storage 0 (0%) 0 (0%)hugepages-1Gi 0 (0%) 0 (0%)hugepages-2Mi 0 (0%) 0 (0%)nvidia.com/gpu 0 0volcano.sh/gpu-memory 0 0volcano.sh/gpu-number 0 0...
上面表示k8s集群里面已经注册资源名称,都可以配置队列里面进行限制. 当然nvidia.com/gpu, volcano.sh/gpu-memory 不同主机上面显卡,使用两种不同类型插件对资源描述和管理。前者独占,一个显卡只能属于一个pod里面容器,后者显卡共用到多个容器上。
实现静态限制作用
明确限制各个队列最大资源限制,按照上面例子,队列所以任务request CPU不能大于2,大于2任务就被pending,等待其他任务执行。 queue相当于volcan调度引擎扩展功能。
在k8s里面其实也有类似的功能对应命名空间用户资源限制,按照上面queue限制k8s可以下面配置
apiVersion: v1kind: ResourceQuotametadata:name: mem-cpu-gpunamespace: defaultspec:hard:requests.cpu: "2"requests.memory: "8Gi"requests.nvidia.com/gpu: "1"requests.volcano.sh/gpu-memory: "1000"limits.cpu: "2"limits.memory: 8Gilimits.nvidia.com/gpu: "1"limits.volcano.sh/gpu-memory: "1000"
结论
在资源静态限制上和k8sResourceQuota功能基本一致的
