在K8S中,Scheduler作用及实现原理是什么?

在kubernetes中,Scheduler是一个核心组件,主要作用是负责集群中的Pod调度

Scheduler作用:

  1. 资源分配:根据每个Pod的资源请求(如CPU、内存),以及节点当前的可用资源情况,选择合适的Node来运行Pod。
  2. 满足约束条件:考虑Pod的调度约束条件和亲和性/反亲和性规则,例如节点标签、区域、拓扑结构等要求,确保Pod被调度到符合其特定需求的Node上。
  3. 服务稳定性与优化:通过预选(Filtering)和优选(Scoring)两个阶段的策略执行,Scheduler不仅确保Pod能够成功调度,还尽可能的优化集群的整体性能和可靠性。

实现原理

Scheduler的工作流程主要包括以下几个关键步骤:

  1. 监听事件:Scheduler会持续监听API Server的事件,一旦有新的待调度Pod或已有Pod需要重新调度时,它将介入并进行调度决策。
  2. 预选阶段(Filtering)
  • Scheduler遍历整个集群的所有Node列表。
  • 对于每个Node,检查该节点是否满足Pod的资源需求和其他硬件约束条件,如节点标签匹配、容忍度、存储容量等。
  • 如果一个Node通过了所有预选策略,则会被加入候选节点集合。
  1. 优选阶段(Prioritizing/Scoring)
  • Scheduler对候选节点集合应用一系列优选策略,为每个节点计算一个优先级分数。
  • 这些优选策略可以包括默认的系统策略(如基于资源利用率的打分)以及用户自定义的策略。
  • Scheduler根据各个节点得到的积分排序,得分最高的节点将被选为Pod的最佳调度位置。
  1. 绑定决策
  • 当确定了最佳节点后,Scheduler会在API Server中为Pod创建一个binding对象,将Pod与选定的Node绑定在一起。
  • 调度结果写入etcd,并通知Kubelet开始在该node上启动Pod。
  1. 动态调整
  • Scheduler不断的观察集群状态的变化,并相应的调整Pod的位置,以适应集群资源的实时变化及业务需求。

综上所述:
通过上述机制,kubernetes Scheduler实现了集群资源的有效利用和Pod的智能调度。

猜你喜欢

转载自blog.csdn.net/qq_56408123/article/details/143276838