我正在学习k8s Scheduling Framework,调度周期阶段。我无法捕捉过滤器“PreFilter”,“Filter”和“PostFilter”之间的实际差异。它们之间的真实的区别是什么,一个简单的例子的实际工作是什么?
- PreFilter -这些插件用于预处理有关Pod的信息。例如:如果POD有太大的内存请求(超过我们集群中节点的最大值),那么这个插件会返回一个错误,调度周期会被中止。对不对?
1.过滤器-调度器的主要工作。这些插件用于过滤掉不满足Pod调度约束的节点。那么,这个插件即将与节点过滤器,是正确的吗?例如:如果POD有一些nodeSelector,那么这个插件将过滤掉所有不满足nodeSelector的节点。对不对? - PostFilter --这些插件在过滤阶段之后被调用,但仅当没有为pod找到可行节点时。例如:如果我们有一些POD和一些nodeSelector,但是没有足够的资源(例如:内存)在这些节点上,那么....我们在这个调度周期上运行下一个插件(score...)。我有点困惑,这个插件的真实的作用是什么?
1条答案
按热度按时间w8rqjzmb1#
kube-scheduler通过两步操作为pod选择节点:
从云坤写的Kubernetes scheduler文档中可以了解到,调度器通过informer将需要调度的Pod插入到队列中。这些pod被循环地从队列中弹出并被推入调度管道中。
调度管道分为调度线程、等待线程和绑定线程。
过滤阶段选择与pod规范一致的节点。评分阶段对所选节点进行评分和排序。预留阶段将pod放入最优排序节点的节点缓存中,指示pod被分配给该节点。以这种方式,当节点被过滤和评分时,等待调度的下一个pod知道先前分配的pod。
Pod只在调度线程中逐个调度,在等待线程和绑定线程中异步并行调度。
*PreFilter对Pod相关请求进行预处理,例如Pod缓存请求。
*过滤器支持自定义过滤器。例如,GPU共享由自定义过滤器实现。
*PostFilter用于对日志和指标进行处理,或者在评分环节之前对数据进行预处理。您可以通过PostFilter配置缓存插件。
实现kubernetes scheduler扩展点的组件称为插件。
更多信息可参考王梦海撰写的文档filters。