3.7.4. 프로젝트 수준 노드 선택기 생성
프로젝트의 노드 선택기와 함께 노드의 라벨을 사용하여 해당 프로젝트에서 생성되는 모든 Pod를 라벨이 지정된 노드로 제한할 수 있습니다.
이 프로젝트에서 Pod를 생성하면 OpenShift Container Platform에서 프로젝트의 Pod에 노드 선택기를 추가하고 프로젝트의 라벨이 일치하는 노드에 Pod를 예약합니다. 클러스터 수준 기본 노드 선택기가 있는 경우 프로젝트 노드 선택기가 우선합니다.
openshift.io/node-selector
매개변수를 추가하도록 Namespace
오브젝트를 편집하여 프로젝트에 노드 선택기를 추가합니다. 노드, 머신 세트 또는 머신 구성에 라벨을 추가합니다. 머신 세트에 라벨을 추가하면 노드 또는 머신이 중단되는 경우 새 노드에 라벨이 지정됩니다. 노드 또는 머신이 중단된 경우 노드 또는 머신 구성에 추가된 라벨이 유지되지 않습니다.
Pod
오브젝트에 노드 선택기가 포함되어 있지만 일치하는 노드 선택기가 있는 프로젝트가 없는 경우 Pod를 예약하지 않습니다. 해당 사양에서 Pod를 생성하면 다음 메시지와 유사한 오류가 발생합니다.
오류 메시지의 예
Error from server (Forbidden): error when creating "pod.yaml": pods "pod-4" is forbidden: pod node label selector conflicts with its project node label selector
Pod에 키/값 쌍을 추가할 수 있습니다. 그러나 프로젝트 키에는 다른 값을 추가할 수 없습니다.
프로세스
기본 프로젝트 노드 선택기를 추가하려면 다음을 수행합니다.
네임스페이스를 생성하거나 기존 네임스페이스를 편집하여
openshift.io/node-selector
매개변수를 추가합니다.$ oc edit namespace <name>
출력 예
apiVersion: v1 kind: Namespace metadata: annotations: openshift.io/node-selector: "type=user-node,region=east" 1 openshift.io/description: "" openshift.io/display-name: "" openshift.io/requester: kube:admin openshift.io/sa.scc.mcs: s0:c30,c5 openshift.io/sa.scc.supplemental-groups: 1000880000/10000 openshift.io/sa.scc.uid-range: 1000880000/10000 creationTimestamp: "2021-05-10T12:35:04Z" labels: kubernetes.io/metadata.name: demo name: demo resourceVersion: "145537" uid: 3f8786e3-1fcb-42e3-a0e3-e2ac54d15001 spec: finalizers: - kubernetes
- 1
- 적절한
<key>:<value>
쌍이 포함된openshift.io/node-selector
를 추가합니다.
머신 세트를 사용하거나 노드를 직접 편집하여 노드에 라벨을 추가합니다.
노드를 생성할 때 머신 세트에서 관리하는 노드에 라벨을 추가하려면
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 ci-ln-l8nry52-f76d1-hl7m7-worker-c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-api
oc edit
명령을 사용하여 라벨이MachineSet
오브젝트에 추가되었는지 확인합니다.예를 들면 다음과 같습니다.
$ oc edit MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c -n openshift-machine-api
출력 예
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: ... spec: ... template: metadata: ... spec: metadata: labels: region: east type: user-node
해당 머신 세트와 관련된 노드를 재배포합니다.
예를 들면 다음과 같습니다.
$ oc scale --replicas=0 MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c -n openshift-machine-api
$ oc scale --replicas=1 MachineSet ci-ln-l8nry52-f76d1-hl7m7-worker-c -n openshift-machine-api
노드가 준비되고 사용 가능한 경우
oc get
명령을 사용하여 라벨이 노드에 추가되었는지 확인합니다.$ oc get nodes -l <key>=<value>
예를 들면 다음과 같습니다.
$ oc get nodes -l type=user-node,region=east
출력 예
NAME STATUS ROLES AGE VERSION ci-ln-l8nry52-f76d1-hl7m7-worker-c-vmqzp Ready worker 61s v1.18.3+002a51f
라벨을 노드에 직접 추가합니다.
라벨을 추가할
Node
오브젝트를 편집합니다.$ oc label <resource> <name> <key>=<value>
예를 들어 노드에 라벨을 지정하려면 다음을 수행합니다.
$ oc label nodes ci-ln-l8nry52-f76d1-hl7m7-worker-c-tgq49 type=user-node region=east
oc get
명령을 사용하여Node
오브젝트에 라벨이 추가되었는지 확인합니다.$ oc get nodes -l <key>=<value>
예를 들면 다음과 같습니다.
$ oc get nodes -l type=user-node,region=east
출력 예
NAME STATUS ROLES AGE VERSION ci-ln-l8nry52-f76d1-hl7m7-worker-b-tgq49 Ready worker 17m v1.18.3+002a51f