由于 Pods 的调度方式,我的 Kubernetes 集群有一半从未使用过

Half of My Kubernetes Cluster Is Never Used, Due to the Way Pods Are Scheduled

我有一个包含 4 个节点的 Kubernetes 集群,理想情况下,我的应用程序应该有 4 个副本,均匀分布到每个节点。但是,当安排 pods 时,它们几乎总是只在两个节点上结束,或者如果我很幸运的话,在 4 个节点中的 3 个节点上结束。我的应用程序有相当大的流量,我真的很想使用我支付的所有资源。

我怀疑发生这种情况的原因是 Kubernetes 试图在具有最多可用资源的节点上安排新的 pods,这作为一个概念很好,但如果它会更好一旦旧节点再次可用,将重新安排 pods。

我有哪些选择?谢谢

你有很多选择!

首先也是最重要的:Pod Affinity and Anti-affinity 确保您的 Pod 更愿意放置在没有具有相同标签的 Pod 的主机上。

其次,您可以设置 Pod Topology Spread Constraints。这是较新且更高级的解决方案,但通常是比简单的反亲和性更好的解决方案。

第三,您可以使用 NodeSelector.

将 Pods 固定到特定节点

最后,您可以编写自己的调度程序或修改默认调度程序设置,但这是一个更高级的主题。不要忘记始终正确设置您的资源请求,这些应该设置为或多或少封装高峰流量期间使用情况的值,以确保节点有足够的可用资源来最大化 Pod 而不会干扰其他 Pods.