Scheduler 决定了 pod 分配往哪台 node。
从资源变化的角度
Scheduler 向 API server 监听 pod 的变化。当它发现有 pod 没有指派 node 时,它将该 pod 调度到某个 node,以修改该 pod 资源定义的方式。
Node 上的 kubelet 也监听 pod 资源的变化。当某一 node 发现有 pod 被指派给它时,它调用 container runtime 将该 pod 运行起来。
默认调度算法
怎样决定 node 是否 acceptable?
- Node 资源情况:是否满足 pod 运行;node 自身是否资源紧缺,比如上报了 memory pressure
- Pod 指派情况:Pod 是否指定了它要运行的 node 或者 node label?
- Pod 指定了 host port 时,看 node 上的该端口是否被占用?
- Volumn,taints,pod affinity rule 等影响
怎样决定哪个 node 更合适?
这一过程没有深究了。Kubernetes in Action 一书没有很详细讲这点。你可以实现自定义的 scheduler,也可以指定具体的 pod 使用哪一 scheduler。