18장. 단일 노드 OpenShift에서 워크로드 파티셔닝
단일 노드 OpenShift 배포와 같이 리소스가 제한적인 환경에서는 대부분의 CPU 리소스를 자체 워크로드에 예약하고 OpenShift Container Platform을 구성하여 호스트 내의 고정된 수에서 실행되도록 하는 것이 좋습니다. 이러한 환경에서는 컨트롤 플레인을 포함한 관리 워크로드를 일반 클러스터에서 기본적으로 사용할 수 있는 것보다 적은 리소스를 사용하도록 구성해야 합니다. 예약된 CPU 세트에서 실행할 OpenShift Container Platform 서비스, 클러스터 관리 워크로드 및 인프라 Pod를 분리할 수 있습니다.
워크로드 파티션을 사용하면 OpenShift Container Platform에서 클러스터 관리를 위해 사용하는 CPU 리소스가 단일 노드 클러스터에서 분할된 CPU 리소스 세트로 격리됩니다. 이 파티션은 클러스터 관리 기능을 정의된 수의 CPU로 격리합니다. 모든 클러스터 관리 기능은 해당 cpuset
구성에서만 작동합니다.
단일 노드 클러스터의 관리 파티션에 필요한 최소 예약된 CPU 수는 4개의 CPU Hyper 스레드(HT)입니다. 기본 OpenShift Container Platform 설치와 일반적인 애드온 Operator 세트를 구성하는 Pod 세트에는 관리 워크로드 파티션에 포함하기 위해 주석이 추가됩니다. 이러한 Pod는 최소 크기 cpuset
구성 내에서 정상적으로 작동합니다. 허용되는 관리 Pod 세트 외부에 Operator 또는 워크로드를 포함하려면 추가 CPU HT를 해당 파티션에 추가해야 합니다.
워크로드 파티셔닝은 Kubernetes의 일반 스케줄링 기능을 사용하여 플랫폼 워크로드에서 사용자 워크로드를 분리하여 해당 코어에 배치할 수 있는 Pod 수를 관리하고 클러스터 관리 워크로드와 사용자 워크로드를 혼합하지 않도록 합니다.
워크로드 파티셔닝을 사용하는 경우 Performance Addon Operator를 설치하고 성능 프로필을 적용해야 합니다.
-
워크로드 파티셔닝은 OpenShift Container Platform 인프라 Pod를 정의된
cpuset
구성에 고정합니다. -
Performance Addon Operator 성능 프로필은 systemd 서비스를 정의된
cpuset
구성에 고정합니다. -
이
cpuset
구성이 일치해야 합니다.
워크로드 분할에는 < workload-type>.workload.openshift.io/cores
가 정의된 각 CPU 풀 또는 workload-type의 새로운 확장 리소스가 도입되었습니다. kubelet은 풀에 할당된 Pod에서 이러한 새 리소스 및 CPU 요청을 알리는 것은 일반적인 cpu
리소스 대신 해당 리소스 내에서 고려됩니다. 워크로드 분할이 활성화되면 < workload-type>.workload.openshift.io/cores
리소스를 사용하면 기본 CPU 풀이 아닌 호스트의 CPU 용량에 액세스할 수 있습니다.
18.1. 워크로드 파티셔닝을 사용하여 CPU 할당 극대화
단일 노드 OpenShift 클러스터 설치 중에 워크로드 파티셔닝을 활성화해야 합니다. 이렇게 하면 플랫폼 서비스를 실행할 수 있는 코어가 제한되어 애플리케이션 페이로드에 대한 CPU 코어를 최대화합니다.
클러스터 설치 중에만 워크로드 파티셔닝을 활성화할 수 있습니다. 설치 후 워크로드 파티셔닝을 비활성화할 수 없습니다. 그러나 성능 프로필에 정의된 cpu
값과 MachineConfig
사용자 정의 리소스(CR)의 관련 cpuset
값에 업데이트하여 워크로드 파티션을 재구성할 수 있습니다.
워크로드 파티셔닝을 가능하게 하는 base64로 인코딩된 CR에는 관리 워크로드가 제한된 CPU 세트가 포함됩니다.
crio.conf
및kubelet.conf
의 호스트별 값을 base64로 인코딩합니다. 이 콘텐츠는 클러스터 성능 프로필에 지정된 CPU 세트와 일치하도록 조정해야 하며 클러스터 호스트의 코어 수에 대해 정확해야 합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 02-master-workload-partitioning spec: config: ignition: version: 3.2.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,W2NyaW8ucnVudGltZS53b3JrbG9hZHMubWFuYWdlbWVudF0KYWN0aXZhdGlvbl9hbm5vdGF0aW9uID0gInRhcmdldC53b3JrbG9hZC5vcGVuc2hpZnQuaW8vbWFuYWdlbWVudCIKYW5ub3RhdGlvbl9wcmVmaXggPSAicmVzb3VyY2VzLndvcmtsb2FkLm9wZW5zaGlmdC5pbyIKcmVzb3VyY2VzID0geyAiY3B1c2hhcmVzIiA9IDAsICJjcHVzZXQiID0gIjAtMSw1Mi01MyIgfQo= mode: 420 overwrite: true path: /etc/crio/crio.conf.d/01-workload-partitioning user: name: root - contents: source: data:text/plain;charset=utf-8;base64,ewogICJtYW5hZ2VtZW50IjogewogICAgImNwdXNldCI6ICIwLTEsNTItNTMiCiAgfQp9Cg== mode: 420 overwrite: true path: /etc/kubernetes/openshift-workload-pinning user: name: root
클러스터 호스트에 구성하면
/etc/crio/crio.conf.d/01-workload-partitioning
의 내용은 다음과 같아야 합니다.[crio.runtime.workloads.management] activation_annotation = "target.workload.openshift.io/management" annotation_prefix = "resources.workload.openshift.io" [crio.runtime.workloads.management.resources] cpushares = 0 cpuset = "0-1, 52-53" 1
- 1
cpuset
값은 설치에 따라 다릅니다.
Hyper-Threading이 활성화된 경우 각 코어에 대해 두 스레드를 모두 지정합니다.
cpuset
값은 성능 프로필의spec.cpu.reserved
필드에 정의된 예약된 CPU와 일치해야 합니다.클러스터에서 구성하면
/etc/kubernetes/openshift-workload-pinning
의 내용은 다음과 같아야 합니다.{ "management": { "cpuset": "0-1,52-53" 1 } }
- 1
cpuset
는/etc/crio/crio.conf.d/01-workload-partitioning
의cpuset
값과 일치해야 합니다.