如图'fig:3.2'所示,kube-scheduler 的调度框架由调度策略和调度器插件组成。调度策略负责为 Pod 选择最佳节点。在 Kubernetes 中,存在两种类型的调度策略:Predicate 和 Priority。Predicate 负责排除不符合 Pod 需求的节点,例如 CPU 资源不足或端口冲突的节点。而 Priority 则计算每个节点的优先级,该优先级根据各种因素组成,包括 Pod 与节点的亲和性以及 Pod 与 Pod 的亲和性等。

调度器插件是一组可选的插件,用于扩展调度器的功能。在 Kubernetes 中,默认启用了一些调度器插件,如 NodeSelector 插件可根据节点标签与 Pod 的需求将 Pod 调度到符合条件的节点上;Taints/Tolerations 插件通过给节点打上污点并指定 Pod 可以容忍的污点,实现将 Pod 调度在特定节点上;PodAffinity/PodAntiAffinity 插件根据 Pod 之间的亲和性或反亲和性,优先将它们分散或聚合;PodTopologySpread 插件使用拓扑约束,将 Pod 扩散到不同拓扑区域,以防止某一区域故障的影响。

然而,kube-scheduler 的主要问题在于用户需要编写详细的 Pod 定义,包括 Pod 的资源需求以及与 Pod 和节点的亲和性等。这要求用户具备先验知识,并且对应用的特点非常熟悉。当集群和 Pod 规模增大时,Pod 与 Pod 和节点之间的依赖关系变得更加复杂,描述 Pod 定义的难度也随之增大。

Kubernetes 调度框架:kube-scheduler 的架构、策略和挑战

原文地址: https://www.cveoy.top/t/topic/qgRV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录