5

我们可以使用 DaemonSet 对象在每个节点上部署一个副本。我们如何为每个节点部署 2 个副本或 3 个副本?我们怎样才能做到这一点。请告诉我们

4

2 回答 2

12

没有办法像 Daemonset 那样强制每个节点有 x 个 pod。但是,通过一些计划,您可以使用pod anti affinity强制在您的节点之间进行相当均匀的 pod 分布。

假设我们有 10 个节点。首先,我们需要一个 ReplicaSet(部署),其中包含 30 个 pod(每个节点 3 个)。接下来,我们要将 pod 反亲和性设置为使用preferredDuringSchedulingIgnoredDuringExecution相对较高的权重并匹配部署的标签。这将导致调度程序更喜欢不调度已经存在相同 pod 的 pod。一旦每个节点有 1 个 pod,循环就会重新开始。具有 2 个 pod 的节点的权重将低于具有 1 个 pod 的节点,因此下一个 pod 应该尝试去那里。

请注意,这不如 DaemonSet 精确,并且在扩展或缩减集群时可能会遇到一些限制。

如果扩展集群,更可靠的方法是简单地创建多个具有不同名称但其他方式相同的 DaemonSet。由于 DaemonSet 将具有相同的标签,因此它们都可以通过相同的服务公开。

于 2019-07-16T15:02:20.703 回答
2

默认情况下,kubernetes 调度器会优先在不同的节点上调度 pod。

  1. kubernetes 调度程序将首先根据您的亲和/反亲和/资源限制等确定可以部署 pod 的所有可能节点。

  2. 之后,调度程序将找到可以部署 pod 的最佳节点。如果可能的话,调度程序会自动将 Pod 调度到单独的可用区和单独的节点上。

你可以自己试试这个。例如,如果您有 3 个节点,请尝试部署 9 个 pod 副本。您将看到每个节点将运行 2 个 pod。

于 2019-07-16T19:27:21.213 回答