调度程序如何在Kubernetes中工作?调度程序负责确定您的Pod在群集中的部署位置。这听起来很简单,但是却相当复杂!让我们开始吧。
每次创建Pod时,它也会添加到调度Scheduler队列中。调度程序通过两个阶段逐个处理Pod:
- 调度阶段(我应该选择哪个节点?)
- 绑定阶段(将属于该节点的Pod信息写入数据库)
如果您要部署一些需要GPU的Pod。您将Pod提交给集群,然后:
- 调度程序过滤掉所有不具有GPU的节点
- 调度程序对其余节点进行排名,并选择利用率最低的节点
- 在这个最低利用率的节点上调度Pod
此时,过滤阶段有13个谓词。这是13个函数,用于确定调度程序应从Pod中丢弃该节点作为可能目标的方式。甚至计分阶段也有13个优先事项。这些是决定如何对节点评分和排名的13个功能。
您如何影响调度程序的决策?
- nodeSelector
- Node affinity
- Pod affinity/anti-affinity
- Taints污点 /toleration容忍度
如果要自定义调度程序该怎么办?
您可以为调度程序编写插件。您可以在调度阶段自定义任何块。但是,绑定阶段不要公开任何公共API。
可以在此处了解有关调度程序的更多信息:
- Kubernetes 调度器https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/…
- 调度策略 https://kubernetes.io/docs/reference/scheduling/policies/…
- 调度框架 https://kubernetes.io/docs/concepts/scheduling-eviction/scheduling-framework/