Skip to main content
  1. Code Space/

Kubernetes: Scheduler

·87 words·1 min
Table of Contents
kubernetes - This article is part of a series.
Part : This Article

introduce
#

Scheduler 从一组 nodes 中,选择最合适的 node,运行 pod.
考虑的点有 affinity,taints,resource,os 等
Scheduler 的工作分为两步,
filter + score
(predicate + priority)

从 API server 监听 pod 事件,
通过 Informer filter 已经有 nodeName 的节点。
只响应 add 请求。
通过 syncHandler 模式,ProcessNextItem(pod *Pod) . 处理的过程是 filter+score,
首先调用一个一个 filter 函数,比如 filter 资源不符合的,volume 不符合的,taint 不符合的等等。
然后对剩下的 nodes,按照 resouce 等打分。
最后选最高分的 node,bind(pod, node)
这里要先驱逐 node 上面的 pod 以支持 preempt,
并为 pod reserve 资源,相当于对 node 的部分资源加锁。

实际上 kubernetes 抽象出了一个新的 framework, 来将调度过程插件化了
包括 pod 排序(QueueSort),过滤前,过滤,过滤后(用于过滤后一个没有时抢占),打分前,打分,合并总分,预定节点(reserve),许可(permit),绑定前,绑定,绑定后。
整个主要是,过滤,打分和绑定,整个过程变得超级复杂。
其中第一步的 pod 排序,为 pod 调度设置了优先级,哪个 pod 优先被调度。

schedule

schedule 框架 kep 提案

kubernetes - This article is part of a series.
Part : This Article