15.7. 인프라 및 애플리케이션 컨테이너의 CPU 제한

일반 하우스키핑 및 워크로드 작업은 대기 시간에 민감한 프로세스에 영향을 미칠 수 있는 방식으로 CPU를 사용합니다. 기본적으로 컨테이너 런타임은 모든 온라인 CPU를 사용하여 모든 컨테이너를 함께 실행하여 컨텍스트 스위치와 대기 시간이 급증할 수 있습니다. CPU를 분할하면 noisy 프로세스가 서로 분리되어 대기 시간에 민감한 프로세스를 방해할 수 없습니다. 다음 표에서는 Performance Addon Operator를 사용하여 노드를 튜닝한 후 CPU에서 프로세스가 실행되는 방법을 설명합니다.

표 15.1. 프로세스의 CPU 할당

프로세스 유형세부 정보

BurstableBestEffort Pod

대기 시간이 짧은 워크로드가 실행 중인 위치를 제외하고 모든 CPU에서 실행

인프라 Pod

대기 시간이 짧은 워크로드가 실행 중인 위치를 제외하고 모든 CPU에서 실행

인터럽트

예약된 CPU로 리디렉션(OpenShift Container Platform 4.6 이상에서 선택 사항)

커널 프로세스

예약된 CPU에 고정

대기 시간에 민감한 워크로드 Pod

분리된 풀에서 특정 전용 CPU 세트에 고정

OS 프로세스/systemd 서비스

예약된 CPU에 고정

모든 QoS 프로세스 유형, Burstable,BestEffort 또는 Guaranteed 의 Pod에 대해 노드에 있는 코어의 할당 가능 용량은 격리된 풀의 용량과 동일합니다. 예약된 풀의 용량은 클러스터 및 운영 체제 하우스키핑 작업에서 사용할 노드의 총 코어 용량에서 제거됩니다.

예시 1

노드에는 100개의 코어 용량이 있습니다. 클러스터 관리자는 성능 프로필을 사용하여 분리된 풀에 50개의 코어를 할당하고 예약된 풀에 50개의 코어를 할당합니다. 클러스터 관리자는 BestEffort 또는 Burstable Pod에 대해 QoS가 보장된 Pod 및 25개의 코어를 25개에 할당합니다. 이는 격리된 풀의 용량과 일치합니다.

예시 2

노드에는 100개의 코어 용량이 있습니다. 클러스터 관리자는 성능 프로필을 사용하여 분리된 풀에 50개의 코어를 할당하고 예약된 풀에 50개의 코어를 할당합니다. 클러스터 관리자는 QoS가 보장된 Pod에 50개의 코어를 할당하고 BestEffort 또는 Burstable Pod의 코어 1개를 할당합니다. 이는 하나의 코어로 격리된 풀의 용량을 초과합니다. CPU 용량이 부족하여 Pod 예약에 실패합니다.

사용할 정확한 파티션 패턴은 하드웨어, 워크로드 특성 및 예상되는 시스템 로드와 같은 여러 요인에 따라 달라집니다. 일부 샘플 사용 사례는 다음과 같습니다.

  • 대기 시간에 민감한 워크로드에서 NIC(네트워크 인터페이스 카드)와 같은 특정 하드웨어를 사용하는 경우 분리된 풀의 CPU가 이 하드웨어에 최대한 가깝게 있어야 합니다. 최소한 동일한 NUMA(Non-Uniform Memory Access) 노드에 워크로드를 배치해야 합니다.
  • 예약된 풀은 모든 인터럽트를 처리하는 데 사용됩니다. 시스템 네트워킹에 따른 경우 충분한 크기의 예약 풀을 할당하여 들어오는 모든 패킷 인터럽트를 처리합니다. 4.6 이상 버전에서 워크로드는 선택적으로 중요로 레이블을 지정할 수 있습니다. 예약 및 분리된 파티션에 사용할 특정 CPU에 대한 결정에는 자세한 분석과 측정이 필요합니다. 장치 및 메모리의 NUMA 선호도와 같은 요인은 역할을 합니다. 선택 사항은 워크로드 아키텍처 및 특정 사용 사례에 따라 달라집니다.
중요

예약 및 격리된 CPU 풀이 겹치지 않아야 하며 작업자 노드에서 사용 가능한 모든 코어에 걸쳐 있어야 합니다.

하우스키핑 작업 및 워크로드가 서로 간섭하지 않도록 성능 프로파일의 spec 섹션에 두 개의 CPU 그룹을 지정합니다.

  • isolated - 애플리케이션 컨테이너 워크로드의 CPU를 지정합니다. 이러한 CPU에서 실행되는 워크로드는 짧은 대기 시간과 제로 중단을 경험하고 예를 들어 높은 제로 패킷 손실 대역폭에 도달할 수 있습니다.
  • reserved - 클러스터 및 운영 체제 하우스키핑 작업의 CPU를 지정합니다. 예약 그룹의 스레드는 종종 사용 중입니다. 예약된 그룹에서 대기 시간에 민감한 애플리케이션을 실행하지 마십시오. 대기 시간에 민감한 애플리케이션은 격리된 그룹에서 실행됩니다. .Procedure

    1. 환경 하드웨어 및 토폴로지에 적합한 성능 프로필을 생성합니다.
    2. 인프라 및 애플리케이션 컨테이너에 대해 reservedisolated하려는 CPU와 함께 예약 및 격리된 매개변수를 추가합니다.

      apiVersion: performance.openshift.io/v2
      kind: PerformanceProfile
      metadata:
        name: infra-cpus
      spec:
        cpu:
          reserved: "0-4,9" 1
          isolated: "5-8" 2
        nodeSelector: 3
          node-role.kubernetes.io/worker: ""
      1
      클러스터 및 운영 체제 하우스키핑 작업을 수행하기 위해 인프라 컨테이너의 CPU를 지정합니다.
      2
      애플리케이션 컨테이너가 워크로드를 실행하는 CPU를 지정합니다.
      3
      성능 프로필을 특정 노드에 적용하려면 노드 선택기를 지정합니다.