Pod可以在多个节点上运行吗?

时间:2020-10-15 05:23:12

标签: kubernetes kubernetes-pod

我有一个kubernetes master和三个kubernetes nodes。我制作了一个在特定节点上运行的Pod。我想在2个节点上运行该pod。我该如何实现? replica概念对我有帮助吗?如果是,怎么办?

3 个答案:

答案 0 :(得分:2)

,您可以将Pod分配给群集中的一个或多个节点,以下是实现此目的的一些选项:

nodeSelector

nodeSelector是推荐的最简单的节点选择约束形式。 nodeSelector是PodSpec的一个字段。它指定键值对的映射。为了使Pod有资格在节点上运行,该节点必须具有每个指示的键值对作为标签(它也可以具有其他标签)。最常见的用法是一对键值对。

affinity and anti-affinity

节点相似性在概念上与nodeSelector相似,它使您可以根据节点上的标签来限制Pod可以在哪些节点上进行调度。

nodeSelector提供了一种非常简单的方法来将pod约束到具有特定标签的节点。相似性/反相似性功能极大地扩展了您可以表达的约束类型。关键的增强功能是

  1. 亲和力/反亲和力语言更具表现力。除了通过逻辑AND操作创建的完全匹配之外,该语言还提供了更多匹配规则;
  2. 您可以指出规则是“软” /“首选项”而不是硬性要求,因此,如果调度程序无法满足该要求,则仍会调度pod;
  3. 您可以限制节点(或其他拓扑域)上运行的其他Pod上的标签,而不是节点本身上的标签,这允许有关哪些Pod可以和不能共置的规则

DaemonSet

DaemonSet确保所有(或某些)节点都运行Pod的副本。将节点添加到群集时,会将Pods添加到它们。当节点从群集中删除时,这些Pod会被垃圾收集。删除DaemonSet将清除其创建的Pod。

DaemonSet的一些典型用法是:

  • 在每个节点上运行集群存储守护程序
  • 在每个节点上运行日志收集守护程序
  • 在每个节点上运行节点监视守护程序

请检查this链接以了解有关如何将Pod分配给节点的更多信息。

答案 1 :(得分:1)

直接在节点上运行Pod并不是一个好习惯,因为节点/ Pod随时可能崩溃。最好使用K8S文档here中提到的K8S控制器。

K8S支持多个容器,根据要求可以使用适当的控制器。通过查看OP,很难说出要使用哪个控制器。

答案 2 :(得分:1)

如果要在每个节点上运行pod,则可以使用daemonset。 我看到的是您正在尝试在每个节点上部署Pod,最好允许调度程序根据资源来决定Pod的部署位置。 在所有最坏的情况下,这都是最好的。 我是说如果发生节点故障。