Kubernetes使用哪种算法为节点分配pod



这更多的是成本估算问题,而不是如何使用节点亲和性等功能。

因此,基本上有m吊舱具有一些约束,如:

  • 特定Deployments/StatefulSets的每个pod都应该在不同的kubernetes节点上
  • 特定Deployments/StatefulSets的吊舱应在3个可用区域内保持平衡

现在,我想知道在给定的Deployments/StatefulSets集合中,我需要托管多少个节点(所有类型相同(。

我最初认为这更像是一个使用匈牙利算法解决的分配问题,但从多维约束的角度来看,这似乎要复杂得多。

据我所知,kube调度器默认使用的算法在github上有描述。

它解释了它是如何工作的。它首先过滤不满足pod要求的节点,例如资源请求>节点上的可用资源、亲和力等

然后使用排序算法来确定最适合的节点。深入了解

Kubernetes基于许多约束(如(分配pod

  • 资源需求
  • 资源存在(节点容量(
  • 节点选择器(如果有(或Affinity规则
  • 亲和性规则的权重

这是一篇很好的文章:https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/

此外:https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/

我建议阅读:https://kubernetes.io/docs/concepts/scheduling-eviction/

参考用户Harsh Manvar的非常好的回答,我将添加一些我自己的更多信息。正如我的前任所描述的那样,该文件涵盖了这一主题。除了她,你可以在这里找到非常好的材料:

在Kubernetes集群上创建Pod时会发生什么几秒钟后,Pod启动并在其中一个集群节点上运行。然而,在那几秒钟内发生了很多事情。让我们看看:

  1. 在扫描API服务器(它正在持续进行(时,Kubernetes调度程序检测到有一个新的Pod没有nodeName参数。nodeName显示哪个节点应该拥有这个Pod
  2. Scheduler为此Pod选择合适的节点,并使用节点名称(通过nodeName参数(更新Pod定义
  3. 所选节点上的kubelet被通知有一个pod正在等待执行
  4. kubelet执行Pod,后者开始在节点上运行

您还可以找到有关调度进程和调度程序算法的教程。

最新更新