【问题标题】:How to launch one pod on each node without using daemonset on a subgroup of all nodes in a cluster?如何在每个节点上启动一个 Pod,而不在集群中所有节点的子组上使用 daemonset?
【发布时间】:2021-08-12 15:02:10
【问题描述】:

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

我正在考虑并想出了以下解决方案,但每个都有问题:

  • 标记这 3 个节点并在应用程序中使用该标签,副本数 = 3,但我们最终可能会在一个节点上使用两个副本(为了高可用性,我想防止这种情况发生)。

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

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

【问题讨论】:

  • 我会创建一个普通的部署并设置replicas: 3;它们将被安排在集群中的某个位置,而您无需特别担心哪些节点。您要使用的 3 个节点有什么特别之处吗?

标签: kubernetes high-availability


【解决方案1】:

标记这 3 个节点并在应用程序中使用该标签,副本数 = 3,但我们最终可能会在一个节点上使用两个副本(为了高可用性,我想防止这种情况发生)。

您可以使用 podAntiAffinity 规则或 topologySpreadConstraints,以避免 2 个 Pod 在同一个节点上启动

标记这 3 个节点并使用 daemonset 并在 daemonset 中使用该标签,但我们将有 7 个 Pod 处于待处理模式。

如果您的 DeamonSet nodeSelector 匹配 3 个节点,调度程序将坚持这些节点。不应该有 Pod 卡在 Pending 中。

这两种解决方案听起来都不错。也许使用 Deployment + affinities 会更可靠:使用 DaemonSet,如果您的一个节点发生故障,则在您修复该节点之前不会重新安排第三个副本。这可能是也可能不是问题......取决于你。

【讨论】:

    猜你喜欢
    • 2015-04-17
    • 2019-02-08
    • 1970-01-01
    • 2018-07-13
    • 2022-01-25
    • 2019-10-27
    • 2022-01-23
    • 2020-01-05
    • 1970-01-01
    相关资源
    最近更新 更多