Kuberenetes Scheduler 在整个系统中承担了“承上启下”的重要功能,“承上”是指它负责接收 Controller Manager 创建的新 Pod,为其安排一个落脚的“家”——目标 Node;“启下”是指安置工作完成后,目标 Node 上的 kubelet 服务进程接管后续工作,负责 Pod 生命周期中的“下半生”。
具体来说,Kubernetes Scheduler 的作用是将待调度的 Pod(API 新创建的 Pod、Controller Manager 为补足副本而创建的 Pod 等)按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的 Node 上,并将绑定信息写入到 etcd 中,在整个调度过程中涉及三个对象,分别是待调度 Pod 列表、可用 Node 列表及调度算法和策略。
简单地说,就是通过调度算法为待调度 Pod 列表中的每个 Pod 都从 Node 列表中选择一个最合适的 Node。
随后,目标节点上的 kubelet 通过 API Server 监听到 Kubernetes Scheduler 产生的 Pod 绑定事件,然后获取对应的 Pod 清单,下载 Image 镜像并启动容器。
Scheduler 只跟 API Server 打交道,其输入和输出如下:
- 输入:待调度的 Pod 和全部计算节点的信息。
- 输出:目标 Pod 要“安家”的最优节点(或者暂时不存在)。