2

能够在更高级别定义一种方法来确定一组 pod 应该在其上运行的一组节点对我来说很有用。

有没有办法使用 kustomize 以便我可以指定部署应该有哪些 nodeSelectors?

4

2 回答 2

1

我最终只是定义了一个补丁:

kustomization.yaml

patchesStrategicMerge:
- nodeSelectors.yaml

nodeSelectors.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  template:
    spec:
      nodeSelector:
        group: infra
        slurm: mysql

有点啰嗦;但我想它在定义我关心的 pod 和位置方面提供了最大的灵活性。

于 2019-12-07T04:09:53.260 回答
-1

我认为你可以tain节点。这种节点是为特定的 pod 保留的。

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

污点和容忍一起工作,以确保 Pod 不会被调度到不合适的节点上。一个或多个污点应用于一个节点;这标志着该节点不应接受任何不容忍污点的 pod。Tolerations 应用于 Pod,并允许(但不要求)Pod 调度到具有匹配污点的节点上。

污点和容忍是一种灵活的方式来引导 pod 远离节点或驱逐不应该运行的 pod。以下是其中几个示例:

  • 专用节点:如果您想将一组节点专用于一组特定用户专用,您可以为这些节点添加一个污点(例如,kubectl taint nodes nodename dedicated=groupName:NoSchedule),然后添加相应的容忍度到他们的 pod(这可以通过编写自定义准入控制器最容易地完成)。然后,具有容忍度的 Pod 将被允许使用受污染的(专用)节点以及集群中的任何其他节点。
  • 具有特殊硬件的节点:在一小部分节点具有专用硬件(例如 GPU)的集群中,最好将不需要专用硬件的 pod 保留在这些节点之外,从而为稍后到达的 pod 留出空间确实需要专门的硬件。这可以通过污染具有专用硬件的节点(例如 kubectl taint nodes nodename special=true:NoSchedule 或 kubectl taint nodes nodename special=true:PreferNoSchedule)并向使用特殊硬件的 pod 添加相应的容忍度来完成。
  • 基于污染的驱逐(beta 功能):当存在节点问题时,每个 pod 可配置的驱逐行为,将在下一节中描述。

您可以在此处找到更多信息:特定 pod 的 Kubernetes 节点

有趣的文档:taint-toleration-dedicated

于 2019-12-06T11:26:20.517 回答