1

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

所以基本上有m一些限制,比如:

  • 每个特定Deployments/的 podStatefulSets应该在不同的 kubernetes 节点上
  • Deployments特定/的 podStatefulSets应在 3 个可用区上进行平衡

现在,我想找出我需要多少个节点(所有相同类型)来托管给定的Deployments/集StatefulSets

我最初认为这更像是一个使用匈牙利算法解决的分配问题,但这在术语上似乎要复杂得多,比如多维约束。

4

3 回答 3

2

Kubernetes 根据许多约束来分配 pod,例如

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

这是一篇很好的文章: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/

于 2021-07-20T10:28:59.320 回答
2

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

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

然后使用排序算法来确定最佳拟合节点。为了更深入地了解

于 2021-07-20T10:31:37.900 回答
1

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

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

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

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

于 2021-07-26T10:46:05.623 回答