gpt4 book ai didi

kubernetes - k8s - 调度程序如何分配节点

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

我只是想知道 k8s master/scheduler 将如何处理这个问题。

让我们考虑一下我有一个带有 2 个节点的 k8s 主节点。假设每个节点有 8GB RAM,每个节点运行一个消耗 3GB RAM 的 Pod。

node A - 8GB
- pod A - 3GB
node B - 8GB
- pod B - 3GB

现在我想安排另一个 pod,比如说 pod C,它需要 6GB RAM。

问题:
  • k8s master 是否会将 pod A 或 B 转移到其他节点以容纳集群中的 pod C 还是 pod C 会处于待处理状态?
  • 如果 pod C 将处于挂起状态,如何通过 k8s 有效地使用资源?

  • 不幸的是,我无法用我的 minikube 尝试这个。如果您知道 k8s 调度程序如何分配节点,请说明。

    最佳答案

    大多数 Kubernetes 组件按职责划分,工作负载分配也不异常(exception)。我们可以将工作负载分配过程定义为 排类 执行 .

    调度器 顾名思义会负责排类 step,这个过程可以简单的描述为“获取一个pod列表,如果没有调度到某个节点,就分配给一个有能力运行这个pod的节点”。 Julia Evan 有一篇不错的博客文章 here解释调度程序。

    Kubelet 负责执行 计划到它的节点的 pod。它将获得分配给它的节点的 POD 定义列表,确保它们以正确的配置运行,如果没有运行,则启动。

    考虑到这一点,您描述的场景将具有预期的行为,不会调度 POD,因为您没有具有可用于 POD 的容量的节点。

    Resource Balancing 主要是在调度层面决定的,一个很好的观察方式是,当你向集群中添加一个新节点时,如果没有待分配的 POD,该节点将不会收到任何 Pod。可以在 this PR 上看到用于资源平衡的逻辑简介。

    解决方案,

    Kubernetes 附带一个默认调度程序。如果默认调度程序不适合您的需求,您可以按照 here 中所述实现您自己的调度程序。 .当集群有容量但没有很好地分配来分配新负载时,这个想法将是调度器的实现和扩展,以重新调度已经运行的 POD。

    另一种选择是使用为此类场景创建的工具,Descheduler是其中之一,它将监视集群并从节点中驱逐 Pod,以使调度程序以更好的平衡重新分配 POD。有一篇不错的博文here描述这些场景。

    PS:
    请记住,节点的总内存是不可分配的,根据您使用的提供商,可分配的容量将远低于总数,请查看此 SO:Cannot create a deployment that requests more than 2Gi memory

    关于kubernetes - k8s - 调度程序如何分配节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54820777/

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