这更多的是成本估算问题,而不是如何使用节点亲和性等功能。
因此,基本上有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启动并在其中一个集群节点上运行。然而,在那几秒钟内发生了很多事情。让我们看看:
- 在扫描API服务器(它正在持续进行(时,Kubernetes调度程序检测到有一个新的Pod没有nodeName参数。nodeName显示哪个节点应该拥有这个Pod
- Scheduler为此Pod选择合适的节点,并使用节点名称(通过nodeName参数(更新Pod定义
- 所选节点上的kubelet被通知有一个pod正在等待执行
- kubelet执行Pod,后者开始在节点上运行
您还可以找到有关调度进程和调度程序算法的教程。