给定一个由一个主服务器和一些工作服务器组成的正在运行的 Kubernetes 集群。
出于网络原因,我们需要添加一个节点来运行特定 Pod,并使其成为集群的一部分。然后,主节点在之后的 Pod 创建过程中会基本忽略该节点。
在每个部署中添加选择器来避免这个节点是不可能的。
谢谢!
答案1
nodeSelector
提供了一种非常简单的方法来将 Pod 约束到具有特定标签的节点。亲和性/反亲和性功能极大地扩展了您可以表达的约束类型。关键增强功能包括
- 语言更具表现力(不仅仅是“AND 或完全匹配”)
- 你可以指定该规则是“软”/“偏好”,而不是硬性要求,因此如果调度程序无法满足该规则,则仍会调度该 Pod
- 你可以限制节点(或其他拓扑域)上运行的其他 pod 上的标签,而不是节点本身上的标签,这允许制定关于哪些 pod 可以和哪些不能共置的规则
亲和性功能包括两种类型的亲和性:“节点亲和性”和“pod 间亲和性/反亲和性”。节点亲和性与现有的类似
nodeSelector
(但具有上面列出的前两个优点),而 pod 间亲和性/反亲和性除了具有上面列出的第一和第二个属性外,还限制了 pod 标签而不是节点标签,如上面列出的第三项所述
简而言之,node affinity
它类似于,nodeSelector
但它允许您根据节点上的标签来限制可以在哪些节点上调度您的 pod。
您还可以查看污点和容忍度
你可以使用以下方法将污点添加到节点 kubectl 污点。 例如,
kubectl taint nodes node1 key=value:NoSchedule
在节点上放置污点
node1
。污点具有键key
、值value
和污点效果 。这意味着, 除非具有匹配的容忍度,否则NoSchedule
任何 Pod 都无法被调度到该节点上 。node1
在答案中引用或重写文档毫无意义。我真的建议您仔细阅读这些文档,然后选择最适合您的示例的文档。