Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

16.5.4. 프로젝트에 Pod 배치 제어

Pod 노드 선택기 승인 컨트롤러를 사용하면 특정 프로젝트와 연결된 노드에 Pod를 강제 적용하고 해당 노드에서 Pod가 예약되지 않도록 할 수 있습니다.

Pod 노드 선택기 승인 컨트롤러는 Pod 에 지정된 프로젝트 및 노드 선택기의 라벨을 사용하여 Pod를 배치할 수 있는 위치를 결정합니다. 포드의 노드 선택기가 프로젝트의 라벨과 일치하는 경우에만 프로젝트와 연결된 노드에 새 포드가 배치됩니다.

Pod가 생성되면 노드 선택기가 Pod에 병합되므로 Pod 사양에 원래 사양에 포함된 라벨과 노드 선택기의 새 라벨이 포함됩니다. 아래 예제에서는 병합 효과를 보여줍니다.

Pod 노드 선택기 승인 컨트롤러를 사용하면 특정 프로젝트에서 허용되는 라벨 목록을 생성할 수도 있습니다. 이 목록은 개발자가 프로젝트에서 사용할 수 있는 레이블을 알 수 있도록 하는 허용 목록 역할을 하며 관리자에게 클러스터에서 레이블 지정을 더욱 효과적으로 제어할 수 있도록 합니다.

Pod 노드 선택기 승인 컨트롤러를 활성화하려면 다음을 수행합니다.

  1. 다음 방법 중 하나를 사용하여 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
      1
      Pod 노드 선택기 승인 컨트롤러 플러그인을 추가합니다.
      2
      모든 노드의 기본 레이블을 생성합니다.
      3
      지정된 프로젝트에서 허용된 라벨의 화이트리스트를 생성합니다. 여기서 프로젝트는 ns1 이고 레이블은 뒤에 오는 key=value 쌍입니다.
    • 승인 컨트롤러 정보가 포함된 파일을 생성합니다.

      podNodeSelectorPluginConfig:
          clusterDefaultNodeSelector: "k3=v3"
           ns1: region=west,env=test,infra=fedora,os=fedora

      그런 다음 마스터 구성에서 파일을 참조합니다.

      admissionConfig:
        pluginConfig:
          PodNodeSelector:
            location: <path-to-file>
      참고

      프로젝트에 노드 선택기가 지정되지 않은 경우 기본 노드 선택기(clusterDefaultNodeSelector)를 사용하여 해당 프로젝트와 연결된 Pod가병합됩니다.

  2. 변경 사항을 적용하려면 OpenShift Container Platform을 다시 시작하십시오.

    # master-restart api
    # master-restart controllers
  3. 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=testinfra=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 주석을 설정합니다.

  4. 노드 선택기에 라벨을 포함하는 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
    프로젝트 레이블과 일치하는 노드 선택기입니다.
  5. 프로젝트에서 Pod를 생성합니다.

    # oc create -f pod.yaml --namespace=ns1
  6. 노드 선택기 레이블이 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가 예약됩니다.