Kubernetes 1.18集群如何启用RequestedToCapacityRatio装箱调度特性
Pod无法调度的核心原因
- 调度插件配置不完整:Kubernetes 1.18版本的kube-scheduler有默认启用的调度插件列表,你在配置中仅显式启用了
RequestedToCapacityRatio这一个评分阶段插件,会导致其他所有默认评分插件(如NodeResourcesFit、NodeAffinity等)被自动禁用,调度逻辑链路缺失,无法完成正常的节点筛选和评分。 - 测试Pod未声明资源请求:
RequestedToCapacityRatio插件的评分逻辑完全依赖Pod的resources.requests字段计算节点资源利用率,你提供的测试Pod未配置任何CPU、内存或GPU资源请求,调度器无法计算利用率得分,叠加插件权重设置过高的影响,没有符合调度条件的节点,最终Pod卡在Pending状态。 - 可选排查点:可执行
journalctl -u kube-scheduler -f查看调度器运行日志,确认配置是否加载成功、是否有其他调度相关报错;同时检查节点是否已正确安装nvidia-device-plugin,执行kubectl describe node <节点名>确认Capacity/Allocatable字段下有nvidia.com/gpu资源上报。
正确启用bin packing调度特性的操作步骤
- 修正调度策略配置文件
保留所有默认启用的评分插件,再添加RequestedToCapacityRatio插件,参考配置如下:
apiVersion: kubescheduler.config.k8s.io/v1beta1 kind: KubeSchedulerConfiguration leaderElection: leaderElect: true clientConnection: kubeconfig: /etc/kubernetes/kube-scheduler.kubeconfig profiles: - schedulerName: kube-scheduler plugins: score: enabled: # 保留默认启用的评分插件 - name: NodeResourcesFit weight: 1 - name: NodeAffinity weight: 1 - name: PodTopologySpread weight: 1 - name: TaintToleration weight: 1 - name: ImageLocality weight: 1 # 新增bin packing插件,高权重优先生效 - name: RequestedToCapacityRatio weight: 100 pluginConfig: - name: RequestedToCapacityRatio args: shape: # 利用率越高评分越高,实现装箱效果 - utilization: 0 score: 0 - utilization: 100 score: 10 resources: - name: cpu weight: 1 - name: nvidia.com/gpu weight: 100
- 重启kube-scheduler生效配置
执行原有重启命令即可,重启后检查调度器日志确认无报错:
systemctl daemon-reload systemctl stop kube-scheduler systemctl start kube-scheduler journalctl -u kube-scheduler -f
- 修正业务Pod配置
所有需要参与bin packing调度的Pod必须显式声明resources.requests,GPU资源需要同时配置requests和limits,修正后的测试Pod参考如下:
apiVersion: v1 kind: Pod metadata: name: test spec: containers: - command: ["/bin/bash", "-c", "sleep 3600"] image: ubuntu:18.04 name: test resources: requests: cpu: "1" memory: "2Gi" nvidia.com/gpu: "1" limits: nvidia.com/gpu: "1"
- 验证调度效果
Pod创建后执行kubectl describe pod test查看Events字段的调度记录,确认Pod被调度到GPU利用率更高的节点,符合bin packing策略预期。
内容的提问来源于stack exchange,提问作者Wallace
相关产品推荐
相关产品推荐

