$ oc describe pod router-default-66d5cf9464-7pwkc
节点选择器指定键值对的映射。规则是使用节点上的自定义标签和 Pod 中指定的选择器定义的。
为了使 Pod 能够在节点上运行,Pod 必须在节点上具有指示的键值对作为标签。
如果您在同一个 Pod 配置中使用节点亲和性和节点选择器,请参阅下面的重要注意事项。
您可以对 Pod 使用节点选择器,对节点使用标签来控制 Pod 的调度位置。使用节点选择器,OpenShift Container Platform 会将 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
# ...
使用计算机器集或直接编辑节点来向节点添加标签
使用MachineSet
对象在创建节点时向计算机器集管理的节点添加标签
运行以下命令以向MachineSet
对象添加标签
$ oc patch MachineSet <name> --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"<key>"="<value>","<key>"="<value>"}}]' -n openshift-machine-api
例如
$ oc patch MachineSet abc612-msrtw-worker-us-east-1c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-api
或者,您可以应用以下 YAML 来向计算机器集添加标签
|
使用oc edit
命令验证标签是否已添加到MachineSet
对象
例如
$ oc edit MachineSet abc612-msrtw-worker-us-east-1c -n openshift-machine-api
MachineSet
对象apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
# ...
spec:
# ...
template:
metadata:
# ...
spec:
metadata:
labels:
region: east
type: user-node
# ...
直接向节点添加标签
编辑节点的Node
对象
$ oc label nodes <name> <key>=<value>
例如,要为节点添加标签
$ oc label nodes ip-10-0-142-25.ec2.internal type=user-node region=east
或者,您可以应用以下 YAML 来向节点添加标签
|
验证标签是否已添加到节点
$ oc get nodes -l type=user-node,region=east
NAME STATUS ROLES AGE VERSION
ip-10-0-142-25.ec2.internal Ready worker 17m v1.30.3
向 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。 |