2.10. 노드 선택기를 사용하여 특정 노드에 Pod 배치
노드 선택기는 키-값 쌍으로 구성된 맵을 지정합니다. 규칙은 노드의 사용자 정의 라벨과 Pod에 지정된 선택기를 사용하여 정의합니다.
Pod를 노드에서 실행하려면 Pod에 노드의 라벨로 표시된 키-값 쌍이 있어야 합니다.
동일한 Pod 구성에서 노드 유사성 및 노드 선택기를 사용하는 경우 아래의 중요 고려 사항을 참조하십시오.
2.10.1. 노드 선택기를 사용하여 Pod 배치 제어
Pod의 노드 선택기와 노드의 라벨을 사용하여 Pod가 예약되는 위치를 제어할 수 있습니다. 노드 선택기를 사용하면 OpenShift Container Platform에서 일치하는 라벨이 포함된 노드에 Pod를 예약합니다.
노드, 머신 세트 또는 머신 구성에 라벨을 추가합니다. 머신 세트에 라벨을 추가하면 노드 또는 머신이 중단되는 경우 새 노드에 라벨이 지정됩니다. 노드 또는 머신이 중단된 경우 노드 또는 머신 구성에 추가된 라벨이 유지되지 않습니다.
기존 Pod에 노드 선택기를 추가하려면 ReplicaSet
오브젝트, DaemonSet
오브젝트, StatefulSet
오브젝트, Deployment
오브젝트 또는 DeploymentConfig
오브젝트와 같이 해당 Pod의 제어 오브젝트에 노드 선택기를 추가합니다. 이 제어 오브젝트 아래의 기존 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 # ...
웹 콘솔에서 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을 적용하여 머신 세트에 라벨을 추가할 수도 있습니다.
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: xf2bd-infra-us-east-2a namespace: openshift-machine-api spec: template: spec: metadata: labels: region: "east" type: "user-node" #...
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을 적용하여 노드에 라벨을 추가할 수 있습니다.
kind: Node apiVersion: v1 metadata: name: hello-node-6fbccf8d9 labels: type: "user-node" region: "east" #...
라벨이 노드에 추가되었는지 확인합니다.
$ 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.24.0
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에 노드 선택기를 직접 추가할 수 없습니다.