gpt4 book ai didi

kubernetes - Kubernetes 的调度器是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 08:37:12 25 4
gpt4 key购买 nike

Kubernetes 的调度器是如何工作的?我的意思是 Kubernetes 的调度程序看起来很简单?

我最初的想法是这个调度器只是一个简单的准入控制系统,而不是一个真正的调度器。是这样吗?

我找到了一个简短的描述,但它的信息量并不大:

The kubernetes scheduler is a policy-rich, topology-aware, workload-specific function that significantly impacts availability, performance, and capacity. The scheduler needs to take into account individual and collective resource requirements, quality of service requirements, hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference, deadlines, and so on. Workload-specific requirements will be exposed through the API as necessary.

最佳答案

您引用的段落描述了我们希望在 future 达到的目标( future 以月为单位,而不是以年为单位)。我们还没有到那里,但调度程序已经有许多有用的功能,足以进行简单的部署。在本回复的其余部分,我将解释调度程序今天是如何工作的。

调度器不仅仅是一个准入 Controller ;对于创建的每个 pod,它会为该 pod 找到“最佳”机器,如果没有合适的机器,则 pod 将保持未调度状态,直到机器变得合适为止。

调度程序是可配置的。它有两种类型的策略, FitPredicate (见 master/pkg/scheduler/predicates.go)和 优先功能 (见 master/pkg/scheduler/priorities.go)。我将描述它们。

拟合谓词 是必需的规则,例如节点上的标签必须与 pod 上的标签选择器兼容(此规则在 PodSelectorMatches() 中实现 predicates.go),以及容器已请求资源的总和在机器上运行加上您正在考虑调度到机器上的新容器的请求资源不得大于机器的容量(此规则在 PodFitsResources() 中实现 predicates.go ;注意“请求资源”被定义为 pod.Spec.Containers[n].Resources.Limits,如果你请求零资源,那么你总是适合)。如果特定(新 pod、机器)对不满足任何所需规则,则不会在该机器上调度新 pod。如果在检查完所有机器后,调度程序决定新的 pod 不能被调度到任何机器上,那么 pod 将保持 Pending 状态,直到其中一台机器可以满足它。

在根据适合谓词检查所有机器后,调度程序可能会发现多台机器“适合”pod。但是当然,pod 只能调度到一台机器上。这就是优先级函数的用武之地。基本上,调度程序对满足所有合适谓词的机器进行排名,然后选择最好的机器。例如,它更喜欢已经运行的 pod 消耗最少资源的机器(这在 LeastRequestedPriority() 中实现 priorities.go)。该策略将 pod(以及容器)散布开,而不是将批次打包到一台机器上,而让其他机器空着。

当我说调度程序是可配置的时,我的意思是您可以在编译时决定希望 Kubernetes 应用哪些适合谓词和优先级函数。目前,它适用于您在 predicates.go 中看到的所有内容。和 priorities.go .

关于kubernetes - Kubernetes 的调度器是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com