Kubernetes自定义调度器运行正常但绑定Pod处于Pending状态排查求助
问题根因
你部署的自定义调度器启动参数未指定对应的调度器名称,导致它不会匹配处理你Pod中指定的schedulerName: my-scheduler。
kube-scheduler进程默认的调度器名称为default-scheduler,仅会处理schedulerName和自身名称一致的Pod,你的配置中缺少--scheduler-name启动参数,所以没有调度器认领你的webapp-color Pod,最终一直处于Pending状态且无事件记录。
修复方案
修改/etc/kubernetes/manifests/my-scheduler.yaml的containers.command配置,新增--scheduler-name=my-scheduler参数,修改后部分配置如下:
containers: - command: - kube-scheduler - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf - --bind-address=127.0.0.1 - --kubeconfig=/etc/kubernetes/scheduler.conf - --leader-elect=false - --port=10261 - --secure-port=10269 - --scheduler-name=my-scheduler # 新增这一行
保存文件后kubelet会自动重启自定义调度器Pod,等待Pod重建完成后,待调度的Pod就会被正常调度。
其他可选排查点
如果修改后仍存在问题,可按以下步骤排查:
- 查看自定义调度器日志确认运行异常:执行
kubectl logs -n kube-system my-scheduler-kmaster,检查是否有权限报错、网络连通性报错 - 检查代理配置是否正确:你配置了全局HTTP/HTTPS代理,需确认apiserver的Service IP/域名已加入no_proxy列表,否则调度器访问apiserver的流量会被发往本地代理导致通信失败
- 确认调度器权限配置:
/etc/kubernetes/scheduler.conf对应的用户需要拥有调度相关的所有ClusterRole权限,可与默认kube-scheduler的权限配置对比验证
内容的提问来源于stack exchange,提问作者Narayan Banik
相关产品推荐
相关产品推荐

