Docker Engine 接收“在这台主机运行容器”的请求;kube-scheduler 解决的是“这个尚未绑定节点的 Pod 应该放到集群中的哪台节点”。

Pod 创建但没有 nodeName

scheduler 过滤不可用节点

对可用节点打分

写入绑定结果

目标节点 kubelet 启动 Pod

调度器不会直接创建容器。它只选择节点,之后由该节点的 kubelet 和容器运行时完成实际启动。

调度依据

  • 容器的 CPU、内存 requests;
  • nodeSelector、节点亲和性和反亲和性;
  • taint 与 toleration;
  • PV 的拓扑与节点亲和性;
  • Pod 拓扑分布约束;
  • 节点是否 Ready、是否可调度。

Pending 不一定表示镜像或应用有问题。如果 Events 中出现 FailedScheduling,应优先检查资源请求和约束。

Docker Compose 能在单机组织多个服务,但不提供 Kubernetes 这种跨节点调度与持续调谐。两者不是同一级别的“启动命令替代品”。

参考:Kubernetes scheduler