13.2. CPU 관리자 설정


CPU 관리자를 설정하려면 다음을 수행합니다.

  1. 선택적으로 노드에 레이블을 지정합니다.

    # oc label node perf-node.example.com cpumanager=true
  2. 대상 노드에서 CPU 관리자 지원을 활성화합니다.

    # oc edit configmap <name> -n openshift-node

    예를 들면 다음과 같습니다.

    # oc edit cm node-config-compute -n openshift-node

    출력 예

    ...
    kubeletArguments:
    ...
      feature-gates:
      - CPUManager=true
      cpu-manager-policy:
      - static
      cpu-manager-reconcile-period:
      - 5s
      system-reserved: 1
      - cpu=500m

    # systemctl restart atomic-openshift-node
    1
    system-reserved 는 필수 설정입니다. 환경에 따라 값을 조정해야 할 수 있습니다.
  3. 코어를 하나 이상 요청하는 Pod를 생성합니다. 제한 및 요청 둘 다 해당 CPU 값이 정수로 설정되어야 합니다. 해당 숫자는 이 Pod 전용으로 사용할 코어 수입니다.

    # cat cpumanager.yaml

    출력 예

    apiVersion: v1
    kind: Pod
    metadata:
      generateName: cpumanager-
    spec:
      containers:
      - name: cpumanager
        image: gcr.io/google_containers/pause-amd64:3.0
        resources:
          requests:
            cpu: 1
            memory: "1G"
          limits:
            cpu: 1
            memory: "1G"
      nodeSelector:
        cpumanager: "true"

  4. Pod를 생성합니다.

    # oc create -f cpumanager.yaml
  5. 레이블 지정한 노드에 Pod가 예약되어 있는지 검증합니다.

    # oc describe pod cpumanager

    출력 예

    Name:         cpumanager-4gdtn
    Namespace:    test
    Node:         perf-node.example.com/172.31.62.105
    ...
        Limits:
          cpu:     1
          memory:  1G
        Requests:
          cpu:        1
          memory:     1G
    ...
    QoS Class:       Guaranteed
    Node-Selectors:  cpumanager=true
                     region=primary

  6. cgroups가 올바르게 설정되었는지 검증합니다. pause 프로세스의 PID를 가져옵니다.

    # systemd-cgls -l

    출력 예

    ├─1 /usr/lib/systemd/systemd --system --deserialize 20
    ├─kubepods.slice
    │ ├─kubepods-pod0ec1ab8b_e1c4_11e7_bb22_027b30990a24.slice
    │ │ ├─docker-b24e29bc4021064057f941dc5f3538595c317d294f2c8e448b5e61a29c026d1c.scope
    │ │ │ └─44216 /pause

    QoS 계층 Guaranteed 의 Pod는 kubepods.slice 에 배치됩니다. 다른 QoS 계층의 Pod는 kubepods 의 하위 cgroups 에 있습니다.

    # cd /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-pod0ec1ab8b_e1c4_11e7_bb22_027b30990a24.slice/docker-b24e29bc4021064057f941dc5f3538595c317d294f2c8e448b5e61a29c026d1c.scope
    # for i in `ls cpuset.cpus tasks` ; do echo -n "$i "; cat $i ; done

    출력 예

    cpuset.cpus 2
    tasks 44216

  7. 작업에 허용되는 CPU 목록을 확인합니다.

    # grep ^Cpus_allowed_list /proc/44216/status

    출력 예

    Cpus_allowed_list:      2

  8. 시스템의 다른 Pod(이 경우 burstable QoS 계층의 Pod)가 Guaranteed Pod에 할당된 코어에서 실행할 수 없는지 확인합니다.

    # cat /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podbe76ff22_dead_11e7_b99e_027b30990a24.slice/docker-da621bea7569704fc39f84385a179923309ab9d832f6360cccbff102e73f9557.scope/cpuset.cpus
    0-1,3
    # oc describe node perf-node.example.com

    출력 예

    ...
    Capacity:
     cpu:     4
     memory:  16266720Ki
     pods:    40
    Allocatable:
     cpu:     3500m
     memory:  16164320Ki
     pods:    40
    ---
      Namespace                  Name                      CPU Requests  CPU Limits  Memory Requests  Memory Limits
      ---------                  ----                      ------------  ----------  ---------------  -------------
      test                        cpumanager-4gdtn          1 (28%)       1 (28%)     1G (6%)          1G (6%)
      test                        cpumanager-hczts          1 (28%)       1 (28%)     1G (6%)          1G (6%)
      test                        cpumanager-r9wrq          1 (28%)       1 (28%)     1G (6%)          1G (6%)
    ...
    Allocated resources:
      (Total limits may be over 100 percent, i.e., overcommitted.)
      CPU Requests  CPU Limits  Memory Requests  Memory Limits
      ------------  ----------  ---------------  -------------
      3 (85%)       3 (85%)     5437500k (32%)   9250M (55%)

    이 VM에는 4개의 CPU 코어가 있습니다. system-reserved 를 500밀리코어로 설정했습니다. 즉, Node Allocatable 수량에 도달할 노드의 총 용량에서 하나의 코어의 절반이 감산됩니다.

    Allocatable CPU 는 3500밀리코어임을 알 수 있습니다. 즉, 각 코어가 하나의 전체 코어를 사용하므로 세 개의 CPU 관리자 Pod를 실행할 수 있습니다. 전체 코어는 1000밀리코어에 해당합니다.

    네 번째 Pod를 예약하려는 경우 시스템은 Pod를 허용하지만 예약되지는 않습니다.

    # oc get pods --all-namespaces |grep test

    출력 예

    test              cpumanager-4gdtn               1/1       Running            0          8m
    test              cpumanager-hczts               1/1       Running            0          8m
    test              cpumanager-nb9d5               0/1       Pending            0          8m
    test              cpumanager-r9wrq               1/1       Running            0          8m

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.