K8s中的调度程序是如何工作的? - daniele


调度程序如何在Kubernetes中工作?调度程序负责确定您的Pod在群集中的部署位置。这听起来很简单,但是却相当复杂!让我们开始吧。
 
每次创建Pod时,它也会添加到调度Scheduler队列中。调度程序通过两个阶段逐个处理Pod:

  1. 调度阶段(我应该选择哪个节点?)
  2. 绑定阶段(将属于该节点的Pod信息写入数据库)

 
如果您要部署一些需要GPU的Pod。您将Pod提交给集群,然后:
  1. 调度程序过滤掉所有不具有GPU的节点
  2. 调度程序对其余节点进行排名,并选择利用率最低的节点
  3. 在这个最低利用率的节点上调度Pod

 此时,过滤阶段有13个谓词。这是13个函数,用于确定调度程序应从Pod中丢弃该节点作为可能目标的方式。甚至计分阶段也有13个优先事项。这些是决定如何对节点评分和排名的13个功能。
 
您如何影响调度程序的决策?
  • nodeSelector
  • Node affinity
  • Pod affinity/anti-affinity
  • Taints污点 /toleration容忍度

如果要自定义调度程序该怎么办?
您可以为调度程序编写插件。您可以在调度阶段自定义任何块。但是,绑定阶段不要公开任何公共API。
 
可以在此处了解有关调度程序的更多信息: