16.5.4. 프로젝트에 Pod 배치 제어
Pod 노드 선택기 승인 컨트롤러를 사용하면 특정 프로젝트와 연결된 노드에 Pod를 강제 적용하고 해당 노드에서 Pod가 예약되지 않도록 할 수 있습니다.
Pod 노드 선택기 승인 컨트롤러는 Pod 에 지정된 프로젝트 및 노드 선택기의 라벨을 사용하여 Pod를 배치할 수 있는 위치를 결정합니다. 포드의 노드 선택기가 프로젝트의 라벨과 일치하는 경우에만 프로젝트와 연결된 노드에 새 포드가 배치됩니다.
Pod가 생성되면 노드 선택기가 Pod에 병합되므로 Pod 사양에 원래 사양에 포함된 라벨과 노드 선택기의 새 라벨이 포함됩니다. 아래 예제에서는 병합 효과를 보여줍니다.
Pod 노드 선택기 승인 컨트롤러를 사용하면 특정 프로젝트에서 허용되는 라벨 목록을 생성할 수도 있습니다. 이 목록은 개발자가 프로젝트에서 사용할 수 있는 레이블을 알 수 있도록 하는 허용 목록 역할을 하며 관리자에게 클러스터에서 레이블 지정을 더욱 효과적으로 제어할 수 있도록 합니다.
Pod 노드 선택기 승인 컨트롤러를 활성화하려면 다음을 수행합니다.
다음 방법 중 하나를 사용하여 Pod 노드 선택기 승인 컨트롤러 및 허용 목록을 구성합니다.
마스터 구성 파일 /etc/origin/master/master-config.yaml에 다음을 추가합니다.
admissionConfig: pluginConfig: PodNodeSelector: configuration: podNodeSelectorPluginConfig: 1 clusterDefaultNodeSelector: "k3=v3" 2 ns1: region=west,env=test,infra=fedora,os=fedora 3
승인 컨트롤러 정보가 포함된 파일을 생성합니다.
podNodeSelectorPluginConfig: clusterDefaultNodeSelector: "k3=v3" ns1: region=west,env=test,infra=fedora,os=fedora
그런 다음 마스터 구성에서 파일을 참조합니다.
admissionConfig: pluginConfig: PodNodeSelector: location: <path-to-file>
참고프로젝트에 노드 선택기가 지정되지 않은 경우 기본 노드 선택기(cluster
DefaultNodeSelector)를 사용하여 해당 프로젝트와 연결된 Pod가
병합됩니다.
변경 사항을 적용하려면 OpenShift Container Platform을 다시 시작하십시오.
# master-restart api # master-restart controllers
scheduler.alpha.kubernetes.io/node-selector
주석 및 라벨이 포함된 프로젝트 오브젝트를 생성합니다.apiVersion: v1 kind: Namespace metadata name: ns1 annotations: scheduler.alpha.kubernetes.io/node-selector: env=test,infra=fedora 1 spec: {}, status: {}
- 1
- 프로젝트 레이블 선택기와 일치하도록 라벨을 생성하는 주석입니다. 여기서 키/값 레이블은
env=test
및infra=fedora
입니다.
참고Pod 노드 선택기 승인 컨트롤러를 사용하는 경우 프로젝트 노드 선택기를 설정하는 데
oc adm new-project <project-name>
을 사용할 수 없습니다.oc adm new-project myproject --node-selector='type=user-node,region=<region>
명령을 사용하여 프로젝트 노드 선택기를 설정하는 경우 OpenShift Container Platform은 NodeEnv 승인 플러그인에서 처리하는openshift.io/node-selector
주석을 설정합니다.노드 선택기에 라벨을 포함하는 Pod 사양을 생성합니다. 예를 들면 다음과 같습니다.
apiVersion: v1 kind: Pod metadata: labels: name: hello-pod name: hello-pod spec: containers: - image: "docker.io/ocpqe/hello-pod:latest" imagePullPolicy: IfNotPresent name: hello-pod ports: - containerPort: 8080 protocol: TCP resources: {} securityContext: capabilities: {} privileged: false terminationMessagePath: /dev/termination-log dnsPolicy: ClusterFirst restartPolicy: Always nodeSelector: 1 env: test os: fedora serviceAccount: "" status: {}
- 1
- 프로젝트 레이블과 일치하는 노드 선택기입니다.
프로젝트에서 Pod를 생성합니다.
# oc create -f pod.yaml --namespace=ns1
노드 선택기 레이블이 Pod 구성에 추가되었는지 확인합니다.
get pod pod1 --namespace=ns1 -o json nodeSelector": { "env": "test", "infra": "fedora", "os": "fedora" }
노드 선택기는 Pod에 병합되고 Pod를 적절한 프로젝트에 예약해야 합니다.
프로젝트 사양에 지정되지 않은 라벨을 사용하여 Pod를 생성하는 경우 Pod가 노드에 예약되지 않습니다.
예를 들어 여기서 레이블 env: production
은 프로젝트 사양에 없습니다.
nodeSelector: "env: production" "infra": "fedora", "os": "fedora"
노드 선택기 주석이 없는 노드가 있는 경우 해당 노드에 Pod가 예약됩니다.