×

节点选择器指定一个键值对映射。规则是使用节点上的自定义标签和 Pod 中指定的选择器定义的。

为了使 Pod 能够在节点上运行,Pod 必须具有节点上作为标签的指示的键值对。

如果在同一 Pod 配置中使用节点亲和性和节点选择器,请参见下面的重要注意事项。

使用节点选择器控制 Pod 的放置

可以在 Pod 上使用节点选择器,在节点上使用标签来控制 Pod 的调度位置。使用节点选择器,OpenShift Dedicated 将 Pod 调度到包含匹配标签的节点上。

可以将标签添加到节点、计算机器集或机器配置。将标签添加到计算机器集可确保如果节点或机器出现故障,新节点将具有该标签。如果节点或机器出现故障,添加到节点或机器配置的标签不会持久保留。

要将节点选择器添加到现有 Pod,请将节点选择器添加到该 Pod 的控制对象,例如ReplicaSet对象、DaemonSet对象、StatefulSet对象、Deployment对象或DeploymentConfig对象。该控制对象下的任何现有 Pod 都将在具有匹配标签的节点上重新创建。如果正在创建新的 Pod,可以直接将节点选择器添加到 Pod 规范中。如果 Pod 没有控制对象,则必须删除 Pod,编辑 Pod 规范,然后重新创建 Pod。

无法直接将节点选择器添加到现有已调度的 Pod。

先决条件

要将节点选择器添加到现有 Pod,请确定该 Pod 的控制对象。例如,router-default-66d5cf9464-m2g75 Pod 受router-default-66d5cf9464副本集控制

$ oc describe pod router-default-66d5cf9464-7pwkc
示例输出
kind: Pod
apiVersion: v1
metadata:
# ...
Name:               router-default-66d5cf9464-7pwkc
Namespace:          openshift-ingress
# ...
Controlled By:      ReplicaSet/router-default-66d5cf9464
# ...

Web 控制台在 Pod YAML 中的ownerReferences下列出控制对象

apiVersion: v1
kind: Pod
metadata:
  name: router-default-66d5cf9464-7pwkc
# ...
  ownerReferences:
    - apiVersion: apps/v1
      kind: ReplicaSet
      name: router-default-66d5cf9464
      uid: d81dd094-da26-11e9-a48a-128e7edf0312
      controller: true
      blockOwnerDeletion: true
# ...
步骤
  • 将匹配的节点选择器添加到 Pod

    • 要将节点选择器添加到现有和将来的 Pod,请将节点选择器添加到 Pod 的控制对象

      带有标签的示例ReplicaSet对象
      kind: ReplicaSet
      apiVersion: apps/v1
      metadata:
        name: hello-node-6fbccf8d9
      # ...
      spec:
      # ...
        template:
          metadata:
            creationTimestamp: null
            labels:
              ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
              pod-template-hash: 66d5cf9464
          spec:
            nodeSelector:
              kubernetes.io/os: linux
              node-role.kubernetes.io/worker: ''
              type: user-node (1)
      # ...
      1 添加节点选择器。
    • 要将节点选择器添加到特定新的 Pod,请直接将选择器添加到Pod对象

      带有节点选择器的示例Pod对象
      apiVersion: v1
      kind: Pod
      metadata:
        name: hello-node-6fbccf8d9
      # ...
      spec:
        nodeSelector:
          region: east
          type: user-node
      # ...

      无法直接将节点选择器添加到现有已调度的 Pod。