18장. 단일 노드 OpenShift의 워크로드 분할
단일 노드 OpenShift 배포와 같은 리소스 제한 환경에서 자체 워크로드에 대한 대부분의 CPU 리소스를 예약하고 호스트 내의 고정된 CPU에서 실행되도록 OpenShift Container Platform을 구성하는 것이 좋습니다. 이러한 환경에서는 컨트롤 플레인을 포함한 관리 워크로드를 일반 클러스터에서 기본적으로 사용할 수 있는 것보다 적은 리소스를 사용하도록 구성해야 합니다. 예약된 CPU 세트에서 실행할 OpenShift Container Platform 서비스, 클러스터 관리 워크로드 및 인프라 Pod를 분리할 수 있습니다.
워크로드 파티셔닝을 사용하면 OpenShift Container Platform에서 클러스터 관리에 사용하는 CPU 리소스가 단일 노드 클러스터에서 분할된 CPU 리소스 세트로 격리됩니다. 이 파티션은 클러스터 관리 기능을 정의된 수의 CPU로 격리합니다. 모든 클러스터 관리 기능은 해당 cpuset
구성에서만 작동합니다.
단일 노드 클러스터의 관리 파티션에 필요한 예약된 CPU의 최소 수는 4개의 CPU 하이퍼 스레드(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. 워크로드 파티션 활성화
단일 노드 OpenShift 설치의 일부로 활성화하는 주요 기능은 워크로드 파티셔닝입니다. 이렇게 하면 플랫폼 서비스를 실행할 수 있는 코어가 제한되어 애플리케이션 페이로드에 대한 CPU 코어를 최대화합니다. 클러스터 설치 시 워크로드 파티셔닝을 구성해야 합니다.
클러스터 설치 중에 워크로드 파티셔닝만 활성화할 수 있습니다. 설치 후 워크로드 분할을 비활성화할 수 없습니다. 그러나 성능 프로필에 정의된 cpu
값과 MachineConfig
사용자 정의 리소스(CR)의 관련 cpuset
값에 업데이트하여 워크로드 파티션을 재구성할 수 있습니다.
절차
아래 base64로 인코딩된 콘텐츠에는 관리 워크로드가 제한된 CPU 세트가 포함되어 있습니다. 이 콘텐츠는
performanceprofile
에 지정된 세트와 일치하도록 조정해야 하며 클러스터의 코어 수에 맞게 정확해야 합니다.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,W2NyaW8ucnVudGltZS53b3JrbG9hZHMubWFuYWdlbWVudF0KYWN0aXZhdGlvbl9hbm5vdGF0aW9uID0gInRhcmdldC53b3JrbG9hZC5vcGVuc2hpZnQuaW8vbWFuYWdlbWVudCIKYW5ub3RhdGlvbl9wcmVmaXggPSAicmVzb3VyY2VzLndvcmtsb2FkLm9wZW5zaGlmdC5pbyIKW2NyaW8ucnVudGltZS53b3JrbG9hZHMubWFuYWdlbWVudC5yZXNvdXJjZXNdCmNwdXNoYXJlcyA9IDAKQ1BVcyA9ICIwLTEsIDUyLTUzIgo= 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와 일치해야 합니다.
Hyper-Threading이 활성화된 경우 각 코어의 두 스레드를 지정합니다. CPU
값은 성능 프로필에 지정된 예약된 CPU 세트와 일치해야 합니다.
이 콘텐츠는 위의 매니페스트에서 01-workload-partitioning-content
에 인코딩되고 제공되어야 합니다.
/etc/kubernetes/openshift-workload-pinning
의 내용은 다음과 같아야 합니다.{ "management": { "cpuset": "0-1,52-53" 1 } }
- 1
cpuset
는/etc/crio/crio.conf.d/01-workload-partitioning
의cpuset
값과 일치해야 합니다.