调度问题有哪些
在本文中,我们将从以下几个方面为大家解释关于调度的相关问题:
简单来说,Kubernetes 调度器会选择一个状态为 pending 的 Pod,然后尝试将这个 Pod 绑定到最合适的节点上,但调度器是如何挑选正确 Pod 的呢?默认的调度器将状态为 pending(挂起)的那些 Pod 存储在一个堆数据结构中。这个堆会根据 Pod 的优先级和创建时间对 Pod 进行排序,并按照这个顺序进行资源的分配。如果在共享集群中使用默认的 Kubernetes 调度器,在 GPU 数量有限时,可能会引起公平性问题,因为某些任务很容易垄断整个集群的资源。
优先级:用户垄断 GPU 集群的一种方法是提交设置为最高优先级的 Pod。这时,他们的 Pod 会移到堆的顶部,从而首先被分配。最终,优先级高的用户就可以垄断并使用集群中的所有 GPU。
批量提交:垄断 GPU 集群的另一种方式是尽可能多地提交 Pod。这样会导致堆中有更多的 Pod,并且缩短它们的创建时间。堆中的 Pod 数量越多, GPU 资源分配也就越多。
基于上述两种情况的出现,为了防止集群的垄断,需要构建一个调度程序,它可以在用户之间公平地共享 GPU 资源,而不管创建时间和 Pod 优先级如何。
02
Kubernetes
调度框架
Kubernetes 的 V1.15 版本对调度器的架构进行了重大调整,采用了新的调度框架。这一框架采用了更为模块化的设计思路,提供了多个扩展接口,允许用户根据需要调整调度器的工作方式。这一变化对于寻求默认调度器替代方案的开发者来说是一个巨大的突破,因为它简化了开发流程,减少了从零开始构建调度器并持续集成 Kubernetes 新特性的工作量。
在 d.run 算力一体化方案中,「DaoCloud 道客」重新评估了这个新的调度框架,最终决定对此调度策略做升级。我们认为现有的堆结构限制了我们的调度策略,无法满足我们对调度灵活性和效率的特定需求,并希望对此进行改进优化调度过程,提高资源分配的效率和智能性。
03
d.run 调度策略
静态分配:在任务开始之前,根据任务的特性和需求,预先分配 GPU 资源。这种方法的优点是可以避免运行时的调度开销,但缺点是不够灵活,难以适应任务执行过程中的变化。 动态分配:根据任务的实际执行情况,实时调整资源分配。这种方法更加灵活,能够更好地适应任务需求的变化,但可能会增加调度的复杂性和开销。
抢占式调度:允许调度器在任务执行过程中,根据某些策略(如优先级、资源使用情况等)中断当前任务,将资源重新分配给其他任务。这种方法可以提高资源的利用率,但可能会导致任务执行的延迟增加。 非抢占式调度:任务一旦开始执行,就会持续运行直到完成,不会在中途被中断。这种方法的优点是可以减少任务切换的开销,但可能会导致资源长时间被单一任务占用,影响其他任务的执行。
热门推荐
访问以下网址,或点击文末【阅读原文】立即体验
DaoCloud 公司简介
网址:www.daocloud.io
邮件:info@daocloud.io
电话:400 002 6898