一个Pod能在多个节点上运行吗?

4

我有一个kubernetes主节点和三个kubernetes节点。我创建了一个正在特定节点上运行的pod。我想在2个节点上运行该pod,我该如何实现?是使用replica概念帮助我吗?如果是,怎么做?

3个回答

4

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

nodeSelector

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

亲和性和反亲和性

Node 亲和性的概念与 nodeSelector 类似 -- 它允许您基于节点上的标签来限制您的 Pod 可以被安排在哪些节点上。

nodeSelector 提供了一种非常简单的方法来限制 Pod 到具有特定标签的节点上。亲和/反亲和功能大大扩展了您可以表达的约束类型。关键增强点包括:

  1. 亲和/反亲和语言更加表达能力强。语言提供了除与逻辑 AND 运算符创建的精确匹配之外的更多匹配规则;
  2. 您可以指示该规则是“软性”/“偏好”,而不是硬性要求,因此如果调度程序无法满足它,Pod 仍将被安排;
  3. 您可以针对运行在节点(或其他拓扑域)上的其他 Pod 的标签来限制 Pod,而不是针对节点本身的标签,这样允许关于哪些 Pod 可以和不能共存制定规则。

DaemonSet

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

一些典型使用情况包括:

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

请查看链接了解更多如何将 Pod 分配给节点的信息。


1
非常感谢!我已经了解了这三个要点的基本概念! - DRPandya
DaemonSet正是我一直在寻找的!谢谢 :) - imlearningdontjudgeme

1

在节点上直接运行Pod并不是一个好的做法,因为节点/ Pod随时可能会崩溃。最好使用K8S控制器,如K8S文档here中所述。

K8S支持多个容器,并根据要求使用适当的控制器。从OP中很难说要使用哪个控制器。


请将文本从英语翻译成中文。只返回翻译后的文本,不要解释。 - goulashsoup

1

如果您想在每个节点上运行Pod,则可以使用DaemonSet。

我看到您正在尝试在每个节点上部署Pod,最好是允许调度程序根据资源决定需要部署Pod的位置。这将在所有最坏的情况下都是最佳选择。我的意思是在节点故障的情况下。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接