K8s多调度器共存时节点配额冲突会产生何种问题?
多调度器共存时的资源冲突问题解答
当Kubernetes默认调度器和Volcano调度器同时管理同一批节点,且出现两个总资源需求超过节点容量的Pod被调度到同一节点时,不会直接导致Pod失败,而是会触发K8s的资源校验机制,具体表现分以下几种情况:
- 先完成绑定的Pod正常启动:不管是哪个调度器,只要先完成Pod的
Bind操作,kube-apiserver会确认节点资源充足并完成绑定,kubelet后续会正常拉取并启动这个Pod,节点资源被占用。 - 后发起绑定的Pod绑定失败:另一个调度器完成调度决策后发起
Bind请求时,kube-apiserver会实时检查节点的已分配资源,发现剩余资源无法满足Pod需求,直接拒绝该绑定请求,Pod会回到Pending状态,等待调度器重新进行调度决策。
结合Volcano调度器的特性补充两点:
- 如果是Volcano调度的Pod后发起绑定,且配置了抢占策略,它会尝试抢占节点上优先级更低的已运行Pod,被抢占的Pod会被驱逐并重新调度,此时Volcano的Pod可以成功绑定启动。
- 极端竞态场景:如果两个调度器的
Bind请求几乎同时到达kube-apiserver,可能会出现短暂的资源超分配绑定,但kubelet在启动第二个Pod时会检测到节点实际资源不足,此时该Pod会被标记为Failed,或者卡在ContainerCreating状态,直到节点释放足够资源,或者调度器重新调度该Pod。
内容的提问来源于stack exchange,提问作者wymli
相关产品推荐
相关产品推荐

