K8s Pod超出Volcano队列GPU内存限制仍运行,求资源限制方案
解决Volcano队列vgpu内存限制不生效的问题
问题分析
Volcano队列的capability默认仅对原生Kubernetes资源(如cpu、memory)做配额限制,自定义虚拟GPU资源(volcano.sh/vgpu-memory、volcano.sh/vgpu-number)需要通过PodGroup绑定队列的方式,才能触发队列的资源配额校验。另外,如果Pod未指定使用Volcano调度器,也会直接绕过队列的资源检查逻辑。
具体解决方案
1. 创建关联目标队列的PodGroup
定义PodGroup并关联到model-deploy队列,只有属于该PodGroup的Pod,才会受队列资源配额约束:
apiVersion: scheduling.volcano.sh/v1beta1 kind: PodGroup metadata: name: model-deploy-pg spec: queue: model-deploy # 关联到目标队列 minMember: 1
2. 修改Pod模板配置
确保Pod指定使用Volcano调度器,并绑定上述PodGroup:
spec: schedulerName: volcano # 必须指定Volcano调度器 metadata: labels: volcano.sh/pod-group-name: model-deploy-pg # 绑定对应的PodGroup containers: - name: your-container-name resources: limits: cpu: 4 memory: 8Gi volcano.sh/vgpu-number: 1 volcano.sh/vgpu-memory: 14000 requests: cpu: 4 memory: 8Gi volcano.sh/vgpu-memory: 14000
3. 验证Volcano调度器配置
确保使用的Volcano版本支持自定义资源的队列配额检查(最新版本默认支持)。若为旧版本,需手动在调度器配置文件中添加volcano.sh/vgpu-memory、volcano.sh/vgpu-number到资源检查列表中。
4. 验证约束生效
提交修改后的Pod后,若队列剩余的volcano.sh/vgpu-memory不足以满足Pod申请,Volcano调度器会拒绝调度,并在Pod事件中输出资源不足的错误提示。
内容的提问来源于stack exchange,提问作者张纳心
相关产品推荐
相关产品推荐

