将部署匹配到特定的节点池

时间:2021-05-27 09:26:24

标签: kubernetes deployment devops

我想知道是否有办法将特定部署分配给特定节点池。

我打算使用 kubernetes 部署一个大型应用程序。我想知道是否有一种方法可以将部署分配给特定的节点池。换句话说,我们有 3 种类型的服务:

  • 一般服务、低性能和低副本数
  • 需要监控服务、高 I/O 和高性能服务器
  • 模块服务,要求最高的服务,我们的目标是为此分配预算的最大部分。

很明显,我们希望最好地将节点分配给特定的部署,这样就不会浪费资源,例如低层服务器节点池 X 将仅由一般服务部署使用,高层服务器节点池 Y 将仅由监控服务,最高层的服务器只会被模块服务使用。

我知道有大量文章讨论了 pod 关联性和其他相关内容,但我似乎无法找到与以下内容匹配的任何内容: How to assign Deployment to specific node pool

提前致谢!

2 个答案:

答案 0 :(得分:3)

另一种方式(除了 Yayotrón 提议的)是使用 NodeAffinity 和 AntiAffinity。有关更多信息,请查看此处的官方文档:https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

污点和容忍非常严格,并且根本不可能在其他节点上进行调度。 使用 Affinity 和 Antiaffinity,您可以指定是严格限制 (RequiredDuringSchedulingIgnoredDuringExecution) 还是软限制 (PreferredDuring....)

答案 1 :(得分:2)

这可以使用 Taints and Tolerations 来实现。它们是什么的快速摘要(来自他们的文档):

<块引用>

节点亲和性,是 Pod 的一个属性,它将它们吸引到一组节点(作为偏好或硬性要求)。污点则相反——它们允许一个节点排斥一组 Pod。

容忍应用于 Pod,并允许(但不要求) 将 pod 调度到具有匹配污点的节点上。

污点和容忍度协同工作以确保 Pod 不被 调度到不适当的节点上。一种或多种污点应用于 一个节点;这标志着节点不应该接受任何这样做的 pod 不能容忍污点。

或者简单地使用 NodeSelector

当您注册一个节点加入 kubernetes 集群时,您可以使用 kubelet --register-with-taints label=value --node-labels=label2=value2 指定污点和标签。

或者您可以将 kubectl taint 用于已注册的节点。

然后当你要部署一个 pod/deployment/statefulset 时,你可以指定它的 nodeSelectorTolerations

spec:
  nodeSelector:
    label2: value2
  tolerations:
    - key: "label"
      operator: "Equal"
      value: "value"
      effect: "NoSchedule"