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가 예약됩니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.