검색

7.3. NUMA 인식 워크로드 예약

download PDF

대기 시간에 민감한 워크로드를 실행하는 클러스터는 일반적으로 워크로드 대기 시간을 최소화하고 성능을 최적화하는 데 도움이 되는 성능 프로필을 제공합니다. NUMA 인식 스케줄러는 노드에 적용된 성능 프로필 설정과 관련하여 사용 가능한 노드 NUMA 리소스를 기반으로 워크로드를 배포합니다. NUMA 인식 배포와 워크로드의 성능 프로파일이 조합되면 성능을 극대화하는 방식으로 워크로드가 예약됩니다.

NUMA Resources Operator가 완전히 작동하려면 NUMAResourcesOperator 사용자 정의 리소스 및 NUMA 인식 보조 Pod 스케줄러를 배포해야 합니다.

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

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

사전 요구 사항

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

프로세스

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

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

      apiVersion: nodetopology.openshift.io/v1
      kind: NUMAResourcesOperator
      metadata:
        name: numaresourcesoperator
      spec:
        nodeGroups:
        - machineConfigPoolSelector:
            matchLabels:
              pools.operator.machineconfiguration.openshift.io/worker: "" 1
      1
      NUMA Resources Operator를 구성하려는 MachineConfigPool 과 일치해야 합니다. 예를 들어 통신 워크로드를 실행하는 데 예상되는 노드 집합을 지정하는 worker-cnf 라는 MachineConfigPool 을 생성할 수 있습니다.
    2. 다음 명령을 실행하여 NUMAResourcesOperator CR을 만듭니다.

      $ oc create -f nrop.yaml
      참고

      NUMAResourcesOperator 를 생성하면 해당 머신 구성 풀 및 영향을 받는 노드에서 재부팅이 트리거됩니다.

검증

  1. 다음 명령을 실행하여 NUMA Resources Operator가 성공적으로 배포되었는지 확인합니다.

    $ oc get numaresourcesoperators.nodetopology.openshift.io

    출력 예

    NAME                    AGE
    numaresourcesoperator   27s

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

    $ oc get all -n openshift-numaresources

    출력 예

    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

7.3.2. NUMA 인식 보조 Pod 스케줄러 배포

NUMA Resources Operator를 설치한 후 다음을 수행하여 NUMA 인식 보조 Pod 스케줄러를 배포합니다.

프로세스

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

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

      apiVersion: nodetopology.openshift.io/v1
      kind: NUMAResourcesScheduler
      metadata:
        name: numaresourcesscheduler
      spec:
        imageSpec: "registry.redhat.io/openshift4/noderesourcetopology-scheduler-rhel9:v4.15"
    2. 다음 명령을 실행하여 NUMAResourcesScheduler CR을 만듭니다.

      $ oc create -f nro-scheduler.yaml
  2. 몇 초 후에 다음 명령을 실행하여 필요한 리소스가 성공적으로 배포되었는지 확인합니다.

    $ oc get all -n openshift-numaresources

    출력 예

    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

7.3.3. 단일 NUMA 노드 정책 구성

NUMA Resources Operator는 클러스터에 단일 NUMA 노드 정책을 구성해야 합니다. 성능 프로필을 생성 및 적용하거나 KubeletConfig를 구성하면 두 가지 방법으로 이 작업을 수행할 수 있습니다.

참고

단일 NUMA 노드 정책을 구성하는 기본 방법은 성능 프로필을 적용하는 것입니다. PPC(Performance Profile Creator) 툴을 사용하여 성능 프로필을 생성할 수 있습니다. 클러스터에서 성능 프로필이 생성되면 KubeletConfigtuned 프로필과 같은 다른 튜닝 구성 요소가 자동으로 생성됩니다.

성능 프로필 생성에 대한 자세한 내용은 "추가 리소스" 섹션의 "성능 프로필 Creator 정보"를 참조하십시오.

7.3.4. 성능 프로파일의 예

이 예제 YAML은 PPC(Performance profile creator) 툴을 사용하여 생성된 성능 프로필을 보여줍니다.

apiVersion: performance.openshift.io/v2
kind: PerformanceProfile
metadata:
  name: performance
spec:
  cpu:
    isolated: "3"
    reserved: 0-2
  machineConfigPoolSelector:
    pools.operator.machineconfiguration.openshift.io/worker: "" 1
  nodeSelector:
    node-role.kubernetes.io/worker: ""
  numa:
    topologyPolicy: single-numa-node 2
  realTimeKernel:
    enabled: true
  workloadHints:
    highPowerConsumption: true
    perPodPowerManagement: false
    realTime: true
1
NUMA Resources Operator를 구성하려는 MachineConfigPool 과 일치해야 합니다. 예를 들어 통신 워크로드를 실행하는 노드 집합을 지정하는 worker-cnf 라는 MachineConfigPool 을 생성할 수 있습니다.
2
topologyPolicysingle-numa-node 로 설정해야 합니다. PPC 툴을 실행할 때 topology-manager-policy 인수를 single-numa-node 로 설정하여 이 문제가 있는지 확인합니다.

7.3.5. KubeletConfig CRD 생성

단일 NUMA 노드 정책을 구성하는 권장 방법은 성능 프로필을 적용하는 것입니다. 또 다른 방법은 다음 절차에 표시된 대로 KubeletConfig CR(사용자 정의 리소스)을 생성하고 적용하는 것입니다.

프로세스

  1. 머신 프로필에 대한 Pod 승인 정책을 구성하는 KubeletConfig CR(사용자 정의 리소스)을 생성합니다.

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

      apiVersion: machineconfiguration.openshift.io/v1
      kind: KubeletConfig
      metadata:
        name: worker-tuning
      spec:
        machineConfigPoolSelector:
          matchLabels:
            pools.operator.machineconfiguration.openshift.io/worker: "" 1
        kubeletConfig:
          cpuManagerPolicy: "static" 2
          cpuManagerReconcilePeriod: "5s"
          reservedSystemCPUs: "0,1" 3
          memoryManagerPolicy: "Static" 4
          evictionHard:
            memory.available: "100Mi"
          kubeReserved:
            memory: "512Mi"
          reservedMemory:
            - numaNode: 0
              limits:
                memory: "1124Mi"
          systemReserved:
            memory: "512Mi"
          topologyManagerPolicy: "single-numa-node" 5
      1
      NUMAResourcesOperator CR의 machineConfigPoolSelector 와 일치하도록 이 레이블을 조정합니다.
      2
      cpuManagerPolicy 의 경우static 은 소문자 s 를 사용해야 합니다.
      3
      노드의 CPU에 따라 이를 조정합니다.
      4
      memoryManagerPolicy 의 경우정적 은 대문자 S 를 사용해야 합니다.
      5
      topologyManagerPolicysingle-numa-node 로 설정해야 합니다.
    2. 다음 명령을 실행하여 KubeletConfig CR을 생성합니다.

      $ oc create -f nro-kubeletconfig.yaml
      참고

      성능 프로필 또는 KubeletConfig 를 적용하면 노드 재부팅이 자동으로 트리거됩니다. 재부팅이 트리거되지 않은 경우 노드 그룹을 처리하는 KubeletConfig 의 레이블을 확인하여 문제를 해결할 수 있습니다.

7.3.6. 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'

    출력 예

    "topo-aware-scheduler"

  2. 스케줄러 이름이 topo-aware-schedulerDeployment 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"
      1
      schedulerName 은 클러스터에 배포된 NUMA 인식 스케줄러의 이름(예: topo-aware-scheduler )과 일치해야 합니다.
    2. 다음 명령을 실행하여 Deployment CR을 생성합니다.

      $ oc create -f nro-deployment.yaml

검증

  1. 배포에 성공했는지 확인합니다.

    $ oc get pods -n openshift-numaresources

    출력 예

    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

  2. topo-aware-scheduler 에서 다음 명령을 실행하여 배포된 Pod를 예약하는지 확인합니다.

    $ oc describe pod numa-deployment-1-6c4f5bdb84-wgn6g -n openshift-numaresources

    출력 예

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

    참고

    예약에 사용할 수 있는 것보다 많은 리소스를 요청하는 배포는 MinimumReplicasUnavailable 오류와 함께 실패합니다. 필요한 리소스를 사용할 수 있게 되면 배포가 성공합니다. Pod는 필요한 리소스를 사용할 수 있을 때까지 Pending 상태로 유지됩니다.

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

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

      $ oc get pods -n openshift-numaresources -o wide

      출력 예

      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>

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

      $ oc describe noderesourcetopologies.topology.node.k8s.io worker-1

      출력 예

      ...
      
      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

      1
      보장된 pod에 할당된 리소스 때문에 사용 가능한 용량이 줄어듭니다.

      보장된 Pod에서 사용하는 리소스는 noderesourcetopologies.topology.node.k8s.io 아래에 나열된 사용 가능한 노드 리소스에서 차감됩니다.

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

    $ oc get pod numa-deployment-1-6c4f5bdb84-wgn6g -n openshift-numaresources -o jsonpath="{ .status.qosClass }"

    출력 예

    Guaranteed

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.