如何在每个节点上启动一个pod,而不使用集群中所有节点的子组上的daemonset ?



假设我们有一个有10个节点的集群,我们想在其中3个节点上启动一个应用程序的副本,该怎么做呢?

我一直在想,我想出了下面的解决方案,但每个都有一个问题:

  • 标记这3个节点,并在应用程序中使用replicas=3的标签,但我们可能最终在一个节点上有两个副本(对于高可用性,我想防止这种情况)。

  • 标记这3个节点并使用daemonset,并在daemonset中使用该标签,但我们将有7个pod处于挂起模式。

这个问题的解决方案是什么?

标记这3个节点,并在应用程序中使用replicas=3的标签,但我们可能最终在一个节点上有两个副本(对于高可用性,我希望防止这种情况)。

你可以使用podAntiAffinity规则,或者topologySpreadConstraints,来避免2个pod在同一个节点上启动

标记这3个节点并使用daemonset,并在daemonset中使用该标签,但是我们将有7个pod处于挂起模式。

如果您的DeamonSet nodeSelector匹配3个节点,则调度器将坚持使用这些节点。不应该有pod卡在Pending状态

两个解决方案听起来都不错。也许使用Deployment +亲缘关系会更可靠:使用守护进程,如果您的一个节点发生故障,在修复该节点之前不会重新调度第三个副本。这可能是个问题,也可能不是……由你决定。

相关内容

  • 没有找到相关文章

最新更新