Kubernetes 允许你在单个集群内运行多个调度器。
本页介绍在集群中运行多个调度器的总体原则,假设这些调度器中至少有一个是默认的
kube-scheduler。如果你只运行自定义或第三方调度器,请参阅它们各自的文档。
在运行多个调度器时,你必须确定它们彼此之间以及与集群节点之间如何交互。 有三种常见的部署场景:
如果你想运行单个逻辑调度器(例如 kube-scheduler),但又要确保它发生故障时仍然可用,
你应该运行该调度器的多个副本并启用领导者选举。
启用领导者选举后,只有一个副本(领导者)处于活跃状态并调度 Pod,其他副本则处于待命状态。 如果活跃的领导者发生故障,其中一个待命副本会自动赢得领导者选举并接管调度工作。
有关如何配置的详细信息, 请参阅启用领导者选举。
如果你想针对不同的工作负载使用不同的配置或调度规则,
你可以配置单个 kube-scheduler 实例并使用多个调度方案,
也可以运行多个彼此独立的 kube-scheduler 实例。
kube-scheduler 进程可以运行多个调度方案
(每个方案都有唯一的调度器名称)。由于这些方案运行在同一进程中,
且共享同一个调度队列和缓存,因此它们不会做出相互冲突的调度决策。
如果你想通过将每个方案导向特定的节点池来隔离工作负载,
仍然可以使用节点亲和性。kube-scheduler 进程(Deployment),
它们之间不会相互协调,可能会做出相互冲突的调度决策(例如过度分配某个节点的资源)。为避免这种情况,
每个调度器实例必须借助节点亲和性指向一组互不相交的节点。如果你将 kube-scheduler 与自定义或第三方调度器一起运行,
请在互不相交的节点池上运行这些调度器,以避免资源冲突。
取决于你的自定义调度器是如何设计的,它可能支持以双活(active-active)配置运行,
也可能需要自己的领导者选举机制。请务必查阅你的自定义调度器的文档。