You can use node selectors on pods and labels on nodes to control where the pod is scheduled. With node selectors, OpenShift Container Platform schedules the pods on nodes that contain matching labels.
You add labels to a node, a machine set, or a machine config. Adding the label to the machine set ensures that if the node or machine goes down, new nodes have the label. Labels added to a node or machine config do not persist if the node or machine goes down.
To add node selectors to an existing pod, add a node selector to the controlling object for that pod, such as a ReplicaSet
object, DaemonSet
object, StatefulSet
object, deployment
object, or deploymentConfig
object.
Any existing pods under that controlling object are recreated on a node with a matching label. If you are creating a new pod, you can add the node selector directly to the Pod
spec.
|
You cannot add a node selector directly to an existing scheduled pod.
|
Prerequisites
To add a node selector to existing pods, determine the controlling object for that pod.
For example, the router-default-66d5cf9464-m2g75
pod is controlled by the router-default-66d5cf9464
replica set:
$ oc describe pod router-default-66d5cf9464-7pwkc
Name: router-default-66d5cf9464-7pwkc
Namespace: openshift-ingress
....
Controlled By: ReplicaSet/router-default-66d5cf9464
The web console lists the controlling object under ownerReferences
in the pod YAML:
ownerReferences:
- apiVersion: apps/v1
kind: ReplicaSet
name: router-default-66d5cf9464
uid: d81dd094-da26-11e9-a48a-128e7edf0312
controller: true
blockOwnerDeletion: true
Procedure
-
Add labels to a node by using a machine set or editing the node directly:
-
Add the matching node selector a pod:
-
To add a node selector to existing and future pods, add a node selector to the controlling object for the pods:
Example ReplicaSet
object with labels
kind: ReplicaSet
....
spec:
....
template:
metadata:
creationTimestamp: null
labels:
ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
pod-template-hash: 66d5cf9464
spec:
nodeSelector:
beta.kubernetes.io/os: linux
node-role.kubernetes.io/worker: ''
type: user-node (1)
-
To add a node selector to a specific, new pod, add the selector to the Pod
object directly:
Example Pod
object with a node selector
apiVersion: v1
kind: Pod
....
spec:
nodeSelector:
region: east
type: user-node
|
You cannot add a node selector directly to an existing scheduled pod.
|