12.6. NUMA 인식 워크로드 예약


지연 시간에 민감한 워크로드를 실행하는 클러스터는 일반적으로 워크로드 지연 시간을 최소화하고 성능을 최적화하는 데 도움이 되는 성능 프로필을 갖추고 있습니다. NUMA 인식 스케줄러는 사용 가능한 노드 NUMA 리소스와 노드에 적용된 모든 성능 프로필 설정을 기준으로 작업 부하를 배포합니다. NUMA 인식 배포와 워크로드의 성능 프로필을 결합하면 워크로드가 성능을 극대화하는 방식으로 예약됩니다.

NUMA 리소스 운영자가 완전히 작동하려면 NUMAResourcesOperator 사용자 지정 리소스와 NUMA 인식 보조 포드 스케줄러를 배포해야 합니다.

12.6.1. NUMAResourcesOperator 사용자 정의 리소스 생성

NUMA Resources Operator를 설치한 후 NUMA Resources Operator가 데몬 세트와 API를 포함하여 NUMA 인식 스케줄러를 지원하는 데 필요한 모든 클러스터 인프라를 설치하도록 지시하는 NUMAResourcesOperator 사용자 지정 리소스(CR)를 만듭니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • NUMA 리소스 운영자를 설치합니다.

프로세스

  1. NUMAResourcesOperator 사용자 지정 리소스를 만듭니다.

    1. 다음의 최소 필수 YAML 파일 예를 nrop.yaml 로 저장합니다.

      apiVersion: nodetopology.openshift.io/v1
      kind: NUMAResourcesOperator
      metadata:
        name: numaresourcesoperator
      spec:
        nodeGroups:
        - machineConfigPoolSelector:
            matchLabels:
              pools.operator.machineconfiguration.openshift.io/worker: "" 
      1
      Copy to Clipboard Toggle word wrap
      1
      이는 NUMA 리소스 연산자를 구성하려는 MachineConfigPool 리소스와 일치해야 합니다. 예를 들어, 통신 작업을 실행할 것으로 예상되는 노드 집합을 지정하는 worker-cnf 라는 MachineConfigPool 리소스를 만들었을 수 있습니다. 각 NodeGroup은 정확히 하나의 MachineConfigPool 과 일치해야 합니다. NodeGroup이 두 개 이상의 MachineConfigPool 과 일치하는 구성은 지원되지 않습니다.
    2. 다음 명령을 실행하여 NUMAResourcesOperator CR을 만듭니다.

      $ oc create -f nrop.yaml
      Copy to Clipboard Toggle word wrap
  2. 선택 사항: 여러 머신 구성 풀(MCP)에 대해 NUMA 인식 스케줄링을 활성화하려면 각 풀에 대해 별도의 NodeGroup을 정의합니다. 예를 들어, 다음 예와 같이 NUMAResourcesOperator CR에서 worker-cnf , worker-htworker-other 에 대한 세 개의 NodeGroup을 정의합니다.

    여러 NodeGroups가 있는 NUMAResourcesOperator CR에 대한 YAML 정의 예

    apiVersion: nodetopology.openshift.io/v1
    kind: NUMAResourcesOperator
    metadata:
      name: numaresourcesoperator
    spec:
      logLevel: Normal
      nodeGroups:
        - machineConfigPoolSelector:
            matchLabels:
              machineconfiguration.openshift.io/role: worker-ht
        - machineConfigPoolSelector:
            matchLabels:
              machineconfiguration.openshift.io/role: worker-cnf
        - machineConfigPoolSelector:
            matchLabels:
              machineconfiguration.openshift.io/role: worker-other
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 NUMA 리소스 운영자가 성공적으로 배포되었는지 확인하세요.

    $ oc get numaresourcesoperators.nodetopology.openshift.io
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                    AGE
    numaresourcesoperator   27s
    Copy to Clipboard Toggle word wrap

  2. 몇 분 후, 다음 명령을 실행하여 필요한 리소스가 성공적으로 배포되었는지 확인하세요.

    $ oc get all -n openshift-numaresources
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                    READY   STATUS    RESTARTS   AGE
    pod/numaresources-controller-manager-7d9d84c58d-qk2mr   1/1     Running   0          12m
    pod/numaresourcesoperator-worker-7d96r                  2/2     Running   0          97s
    pod/numaresourcesoperator-worker-crsht                  2/2     Running   0          97s
    pod/numaresourcesoperator-worker-jp9mw                  2/2     Running   0          97s
    Copy to Clipboard Toggle word wrap

NUMA 리소스 연산자를 설치한 후 NUMAResourcesOperator 사용자 정의 리소스(CR)를 만듭니다. CR은 NUMA 리소스 운영자에게 데몬 세트와 API를 포함하여 호스팅된 제어 평면에서 NUMA 인식 스케줄러를 지원하는 데 필요한 모든 클러스터 인프라를 설치하도록 지시합니다.

중요

호스팅된 제어 평면에 대한 NUMAResourcesOperator 사용자 지정 리소스를 만드는 것은 기술 미리 보기 기능에만 해당됩니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • NUMA 리소스 운영자를 설치합니다.

프로세스

  1. 다음 명령을 실행하여 관리 클러스터 kubeconfig 파일을 내보냅니다.

    $ export KUBECONFIG=<path-to-management-cluster-kubeconfig>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 클러스터의 노드 풀 이름을 찾으세요.

    $ oc --kubeconfig="$MGMT_KUBECONFIG" get np -A
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE   NAME                     CLUSTER       DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION   UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    clusters    democluster-us-east-1a   democluster   1               1               False         False        4.19.0    False             False
    Copy to Clipboard Toggle word wrap

    node-pool-name은 출력의 NAME 필드입니다. 이 예에서 노드 풀 이름democluster-us-east-1a 입니다.

  3. 최소한 다음 내용을 포함하는 nrop-hcp.yaml 이라는 YAML 파일을 만듭니다.

    apiVersion: nodetopology.openshift.io/v1
    kind: NUMAResourcesOperator
    metadata:
      name: numaresourcesoperator
    spec:
      nodeGroups:
      - poolName: democluster-us-east-1a 
    1
    Copy to Clipboard Toggle word wrap
    1
    poolName 은 2단계에서 검색된 노드 풀 이름 입니다.
  4. 관리 클러스터에서 다음 명령을 실행하여 사용 가능한 비밀을 나열합니다.

    $ oc get secrets -n clusters
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                              TYPE                      DATA   AGE
    builder-dockercfg-25qpp           kubernetes.io/dockercfg   1      128m
    default-dockercfg-mkvlz           kubernetes.io/dockercfg   1      128m
    democluster-admin-kubeconfig      Opaque                    1      127m
    democluster-etcd-encryption-key   Opaque                    1      128m
    democluster-kubeadmin-password    Opaque                    1      126m
    democluster-pull-secret           Opaque                    1      128m
    deployer-dockercfg-8lfpd          kubernetes.io/dockercfg   1      128m
    Copy to Clipboard Toggle word wrap

  5. 다음 명령을 실행하여 호스팅된 클러스터의 kubeconfig 파일을 추출합니다.

    $ oc get secret <SECRET_NAME> -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig
    Copy to Clipboard Toggle word wrap

    $ oc get secret democluster-admin-kubeconfig -n clusters -o jsonpath='{.data.kubeconfig}' | base64 -d > hosted-cluster-kubeconfig
    Copy to Clipboard Toggle word wrap

  6. 다음 명령을 실행하여 호스팅된 클러스터 kubeconfig 파일을 내보냅니다.

    $ export HC_KUBECONFIG=<path_to_hosted-cluster-kubeconfig>
    Copy to Clipboard Toggle word wrap
  7. 호스팅된 클러스터에서 다음 명령을 실행하여 NUMAResourcesOperator CR을 만듭니다.

    $ oc create -f nrop-hcp.yaml
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 NUMA 리소스 운영자가 성공적으로 배포되었는지 확인하세요.

    $ oc get numaresourcesoperators.nodetopology.openshift.io
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                    AGE
    numaresourcesoperator   27s
    Copy to Clipboard Toggle word wrap

  2. 몇 분 후, 다음 명령을 실행하여 필요한 리소스가 성공적으로 배포되었는지 확인하세요.

    $ oc get all -n openshift-numaresources
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                    READY   STATUS    RESTARTS   AGE
    pod/numaresources-controller-manager-7d9d84c58d-qk2mr   1/1     Running   0          12m
    pod/numaresourcesoperator-democluster-7d96r             2/2     Running   0          97s
    pod/numaresourcesoperator-democluster-crsht             2/2     Running   0          97s
    pod/numaresourcesoperator-democluster-jp9mw             2/2     Running   0          97s
    Copy to Clipboard Toggle word wrap

12.6.3. NUMA 인식 보조 포드 스케줄러 배포

NUMA 리소스 연산자를 설치한 후 다음 절차에 따라 NUMA 인식 보조 포드 스케줄러를 배포합니다.

프로세스

  1. NUMA 인식 사용자 정의 Pod 스케줄러를 배포하는 NUMAResourcesScheduler 사용자 정의 리소스를 만듭니다.

    1. 다음의 최소한의 필수 YAML을 nro-scheduler.yaml 파일에 저장합니다.

      apiVersion: nodetopology.openshift.io/v1
      kind: NUMAResourcesScheduler
      metadata:
        name: numaresourcesscheduler
      spec:
        imageSpec: "registry.redhat.io/openshift4/noderesourcetopology-scheduler-rhel9:v4.19" 
      1
      Copy to Clipboard Toggle word wrap
      1
      연결이 끊긴 환경에서는 다음 중 하나를 수행하여 이 이미지의 해상도를 구성해야 합니다.
      • ImageTagMirrorSet 사용자 정의 리소스(CR) 생성. 자세한 내용은 "추가 리소스" 섹션의 "이미지 레지스트리 저장소 미러링 구성"을 참조하세요.
      • 연결이 끊긴 레지스트리에 URL을 설정합니다.
    2. 다음 명령을 실행하여 NUMAResourcesScheduler CR을 만듭니다.

      $ oc create -f nro-scheduler.yaml
      Copy to Clipboard Toggle word wrap
      참고

      호스팅된 제어 평면 클러스터에서 호스팅된 제어 평면 노드에서 이 명령을 실행합니다.

  2. 몇 초 후에 다음 명령을 실행하여 필요한 리소스가 성공적으로 배포되었는지 확인하세요.

    $ oc get all -n openshift-numaresources
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                    READY   STATUS    RESTARTS   AGE
    pod/numaresources-controller-manager-7d9d84c58d-qk2mr   1/1     Running   0          12m
    pod/numaresourcesoperator-worker-7d96r                  2/2     Running   0          97s
    pod/numaresourcesoperator-worker-crsht                  2/2     Running   0          97s
    pod/numaresourcesoperator-worker-jp9mw                  2/2     Running   0          97s
    pod/secondary-scheduler-847cb74f84-9whlm                1/1     Running   0          10m
    
    NAME                                          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGE
    daemonset.apps/numaresourcesoperator-worker   3         3         3       3            3           node-role.kubernetes.io/worker=   98s
    
    NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/numaresources-controller-manager   1/1     1            1           12m
    deployment.apps/secondary-scheduler                1/1     1            1           10m
    
    NAME                                                          DESIRED   CURRENT   READY   AGE
    replicaset.apps/numaresources-controller-manager-7d9d84c58d   1         1         1       12m
    replicaset.apps/secondary-scheduler-847cb74f84                1         1         1       10m
    Copy to Clipboard Toggle word wrap

12.6.4. NUMA 인식 스케줄러를 사용한 작업 스케줄링

이제 topo-aware-scheduler가 설치되었고 NUMAResourcesOperatorNUMAResourcesScheduler CR이 적용되었으며 클러스터에 일치하는 성능 프로필이나 kubeletconfig 가 있으므로 워크로드를 처리하는 데 필요한 최소 리소스를 지정하는 배포 CR을 사용하여 NUMA 인식 스케줄러로 워크로드를 예약할 수 있습니다.

다음 예제 배포에서는 샘플 워크로드에 대해 NUMA 인식 스케줄링을 사용합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

프로세스

  1. 다음 명령을 실행하여 클러스터에 배포된 NUMA 인식 스케줄러의 이름을 가져옵니다.

    $ oc get numaresourcesschedulers.nodetopology.openshift.io numaresourcesscheduler -o json | jq '.status.schedulerName'
    Copy to Clipboard Toggle word wrap

    출력 예

    "topo-aware-scheduler"
    Copy to Clipboard Toggle word wrap

  2. 예를 들어 topo-aware-scheduler 라는 스케줄러를 사용하는 배포 CR을 만듭니다.

    1. 다음 YAML을 nro-deployment.yaml 파일에 저장합니다.

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: numa-deployment-1
        namespace: openshift-numaresources
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: test
        template:
          metadata:
            labels:
              app: test
          spec:
            schedulerName: topo-aware-scheduler 
      1
      
            containers:
            - name: ctnr
              image: quay.io/openshifttest/hello-openshift:openshift
              imagePullPolicy: IfNotPresent
              resources:
                limits:
                  memory: "100Mi"
                  cpu: "10"
                requests:
                  memory: "100Mi"
                  cpu: "10"
            - name: ctnr2
              image: registry.access.redhat.com/rhel:latest
              imagePullPolicy: IfNotPresent
              command: ["/bin/sh", "-c"]
              args: [ "while true; do sleep 1h; done;" ]
              resources:
                limits:
                  memory: "100Mi"
                  cpu: "8"
                requests:
                  memory: "100Mi"
                  cpu: "8"
      Copy to Clipboard Toggle word wrap
      1
      schedulerName은 클러스터에 배포된 NUMA 인식 스케줄러의 이름과 일치해야 합니다(예: topo-aware-scheduler ) .
    2. 다음 명령을 실행하여 배포 CR을 만듭니다.

      $ oc create -f nro-deployment.yaml
      Copy to Clipboard Toggle word wrap

검증

  1. 배포가 성공했는지 확인하세요.

    $ oc get pods -n openshift-numaresources
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                READY   STATUS    RESTARTS   AGE
    numa-deployment-1-6c4f5bdb84-wgn6g                  2/2     Running   0          5m2s
    numaresources-controller-manager-7d9d84c58d-4v65j   1/1     Running   0          18m
    numaresourcesoperator-worker-7d96r                  2/2     Running   4          43m
    numaresourcesoperator-worker-crsht                  2/2     Running   2          43m
    numaresourcesoperator-worker-jp9mw                  2/2     Running   2          43m
    secondary-scheduler-847cb74f84-fpncj                1/1     Running   0          18m
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 topo-aware-scheduler가 배포된 Pod를 예약하는지 확인하세요.

    $ oc describe pod numa-deployment-1-6c4f5bdb84-wgn6g -n openshift-numaresources
    Copy to Clipboard Toggle word wrap

    출력 예

    Events:
      Type    Reason          Age    From                  Message
      ----    ------          ----   ----                  -------
      Normal  Scheduled       4m45s  topo-aware-scheduler  Successfully assigned openshift-numaresources/numa-deployment-1-6c4f5bdb84-wgn6g to worker-1
    Copy to Clipboard Toggle word wrap

    참고

    스케줄링에 사용할 수 있는 리소스보다 많은 리소스를 요청하는 배포는 MinimumReplicasUnavailable 오류로 인해 실패합니다. 필요한 리소스를 사용할 수 있게 되면 배포가 성공합니다. 필요한 리소스가 제공될 때까지 Pod는 보류 상태로 유지됩니다.

  3. 노드에 대해 예상 할당 리소스가 나열되어 있는지 확인합니다.

    1. 다음 명령을 실행하여 배포 포드를 실행하는 노드를 식별합니다.

      $ oc get pods -n openshift-numaresources -o wide
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME                                 READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
      numa-deployment-1-6c4f5bdb84-wgn6g   0/2     Running   0          82m   10.128.2.50   worker-1   <none>  <none>
      Copy to Clipboard Toggle word wrap

    2. 배포 포드를 실행 중인 노드의 이름으로 다음 명령을 실행합니다.

      $ oc describe noderesourcetopologies.topology.node.k8s.io worker-1
      Copy to Clipboard Toggle word wrap

      출력 예

      ...
      
      Zones:
        Costs:
          Name:   node-0
          Value:  10
          Name:   node-1
          Value:  21
        Name:     node-0
        Resources:
          Allocatable:  39
          Available:    21 
      1
      
          Capacity:     40
          Name:         cpu
          Allocatable:  6442450944
          Available:    6442450944
          Capacity:     6442450944
          Name:         hugepages-1Gi
          Allocatable:  134217728
          Available:    134217728
          Capacity:     134217728
          Name:         hugepages-2Mi
          Allocatable:  262415904768
          Available:    262206189568
          Capacity:     270146007040
          Name:         memory
        Type:           Node
      Copy to Clipboard Toggle word wrap

      1
      보장된 포드에 할당된 리소스로 인해 사용 가능한 용량이 감소합니다.

      보장된 포드에서 사용되는 리소스는 noderesourcetopologies.topology.node.k8s.io 에 나열된 사용 가능한 노드 리소스에서 빼집니다.

  4. Best-effort 또는 Burstable 서비스 품질( qosClass )을 갖춘 포드에 대한 리소스 할당은 noderesourcetopologies.topology.node.k8s.io 아래의 NUMA 노드 리소스에 반영되지 않습니다. Pod의 소모된 리소스가 노드 리소스 계산에 반영되지 않는 경우 Pod에 보장된 qosClass가 있고 CPU 요청이 십진수 값이 아닌 정수 값인지 확인합니다. 다음 명령을 실행하여 Pod의 qosClassGuaranteed 인지 확인할 수 있습니다.

    $ oc get pod numa-deployment-1-6c4f5bdb84-wgn6g -n openshift-numaresources -o jsonpath="{ .status.qosClass }"
    Copy to Clipboard Toggle word wrap

    출력 예

    Guaranteed
    Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat