6.12. OpenShift Container Platform 클러스터의 노드에 리소스 할당


기본적으로 노드가 OpenShift Container Platform을 시작하면 kubeletkube-proxy 와 같은 기본 노드 구성 요소에서 사용할 CPU 및 메모리 리소스의 일부를 자동으로 계산하고 나머지 시스템 구성 요소(예: sshdNetworkManager )를 예약합니다. 이 섹션의 정보를 검토하여 이러한 자동 설정이 클러스터에 적합한지 확인합니다.

Kubelet Config CR을 생성하여 필요에 따라 이러한 노드 및 시스템 구성 요소의 CPU 및 메모리 리소스를 수정할 수 있습니다.

중요

4.21 이전 버전에서 클러스터를 업데이트한 경우 시스템 리소스의 자동 할당은 기본적으로 비활성화되어 있습니다. 기능을 활성화하려면 50-worker-auto-sizing-disabled 머신 구성을 삭제합니다.

6.12.1. 노드에 리소스가 할당되는 방법 이해

OpenShift Container Platform은 스크립트를 사용하여 노드의 노드 및 시스템 구성 요소에 대한 최적의 CPU 및 메모리 리소스를 결정합니다. 또는 필요에 따라 이러한 값을 수동으로 설정할 수 있습니다. 이러한 서비스에 적절한 리소스를 확보하면 클러스터가 효율적으로 작동하는지 확인할 수 있습니다.

이러한 리소스 계산은 각 노드에 설치된 CPU 및 메모리 용량을 기반으로 하고 노드 시작 시 할당됩니다. 이러한 리소스는 CRI-O 및 kubelet과 같은 systemd system.slice cgroup의 노드 및 시스템 구성 요소를 위해 예약되어 있습니다. 기본적으로 스크립트가 실행되기 전에 OpenShift Container Platform은 CPU에 대해 500m, 노드 및 시스템 구성 요소에 대해 1Gi의 메모리를 예약합니다.

참고

OpenShift Container Platform에서는 Kubernetes kubeReserved 매개변수가 지원되지 않습니다.

이 스크립트는 기본적으로 다음 계산을 사용합니다.

메모리 예약

메모리 예약의 가중치가 지정되어 있습니다. 소규모 노드의 경우 OpenShift Container Platform은 더 많은 양의 메모리를 예약합니다. 대규모 노드의 경우 OpenShift Container Platform은 나머지 용량의 백분율을 더 적게 예약합니다.

OpenShift Container Platform에서는 다음 계산을 사용하여 노드 및 시스템 구성 요소에 예약할 메모리 양을 결정합니다.

  • 메모리의 처음 4GiB의 25%
  • 다음 4GiB 메모리의 20%(최대 8GiB)
  • 다음 8GiB 메모리의 10%(최대 16GiB)
  • 다음 112GiB 메모리의 6%(최대 128GiB)
  • 128GiB 이상의 메모리의 2%

예를 들어 메모리가 16GiB인 노드에서 OpenShift Container Platform은 노드 및 시스템 구성 요소에 대해 2.6GiB를 예약하고 워크로드에 대해 약 13.4GiB를 유지합니다.

CPU 예약

OpenShift Container Platform은 다음 논리를 사용하여 노드 및 시스템 구성 요소에 예약할 CPU 양을 결정합니다.

  • OpenShift Container Platform은 코어의 분당 1개의 CPU에 대한 기본 할당으로 시작합니다(60밀리코어 = 0.06 CPU 코어).
  • 그런 다음 첫 번째 코어를 초과하는 모든 추가 코어에 대해 12밀리코어(0.012 CPU)를 늘립니다.
  • 결과는 최소 0.5 CPU와 비교됩니다. 계산된 값이 0.5 미만이면 시스템은 0.5 CPU 예약을 적용합니다.

예를 들어 4코어 노드에서 0.5 vCPU는 노드 및 시스템 구성 요소를 위해 예약되어 워크로드에 대해 3.5 vCPU를 유지합니다. 1000밀리코어는 1CPU/vCPU와 같습니다.

참고

KubeletConfig 오브젝트에서 reservedSystemCPUs 매개변수를 사용하여 특별히 예약한 CPU는 system-reserved 를 사용하여 할당할 수 없습니다.

"노드에 대한 리소스 할당"에 설명된 대로 KubeletConfig 오브젝트에서 system-reserved 매개변수를 구성하여 노드 및 시스템 구성 요소의 CPU 및 메모리 예약을 수동으로 관리할 수 있습니다.

6.12.1.1. OpenShift Container Platform에서 할당된 리소스를 계산하는 방법

할당된 리소스 양은 다음 공식에 따라 계산됩니다.

[Allocatable] = [Node Capacity] - [system-reserved] - [Hard-Eviction-Thresholds]
참고

Allocatable에서 Hard-Eviction-Thresholds를 보류하면 Allocatable 값이 노드 수준에서 Pod에 적용되므로 시스템 신뢰도가 향상됩니다.

Allocatable이 음수인 경우 0으로 설정됩니다.

각 노드는 컨테이너 런타임 및 kubelet에서 사용하는 시스템 리소스를 보고합니다. system-reserved 매개변수 구성을 단순화하려면 Node Summary API를 사용하여 노드의 리소스 사용량을 확인합니다. 노드 요약은 /api/v1/nodes/<node>/proxy/stats/summary에 제공됩니다. 자세한 내용은 추가 리소스 섹션에서 "노드 지표 데이터" 링크를 사용하십시오.

6.12.1.2. OpenShift Container Platform에서 system-reserved CPU를 적용하는 방법

기본적으로 OpenShift Container Platform은 시스템 프로세스에 대해 예약해야 하는 CPU 양을 계산하고 cgroup 제어를 사용하여 CPU가 구성된 가중치 및 제한에 따라 배포되도록 합니다.

이 적용은 노드 내의 CPU 경합 시 적용됩니다. 노드가 CPU 부족 상태에 있지 않은 경우 시스템 프로세스에서 사용되지 않는 CPU를 사용할 수 있는 경우 예약된 공유보다 많은 것을 사용할 수 있습니다.

OpenShift Container Platform은 systemReservedCgroup 을 사용하고 kubelet 구성에서 NodeAllocatable 매개변수를 적용하여 이 CPU 적용을 수행합니다.

기본적으로 systemReservedCgroup 매개변수는 /system.slice 로 설정되어 있으며, 이 매개변수는 kubelet, CRI-O 및 기타 시스템 서비스를 포함하는 systemd system.slice cgroup에 CPU 제한을 적용합니다. enforceNodeAllocatable 매개변수는 podsystem-reserved-compressible 으로 설정되어 Pod와 system-reserved 리소스 모두에 노드 할당 가능 제한을 적용합니다.

이 적용의 예로, 0.5 CPU가 4코어 노드의 시스템 데몬용으로 예약된 경우 systemd system.slice cgroup은 경합 중에 많은 CPU가 나머지 3.5 CPU의 예상 공유를 수신하게 됩니다. 시스템 데몬이 CPU 제한에 도달하면 OpenShift Container Platform 제한은 제한되지만 데몬은 종료되지 않습니다. OpenShift Container Platform은 system.slice cgroup의 프로세스에 할당된 CPU 시간을 줄여 더 오랜 기간 동안 작업을 분산시킵니다.

중요

다른 systemd 슬라이스가 CPU 집약적인 워크로드를 실행 중인 경우 system.slice 이외의 슬라이스의 경합이 여전히 전체 CPU 할당에 영향을 미칠 수 있습니다.

그러나 kubelet은 성능 프로필에서 사용하는 systemReservedCgroup 설정과 reservedSystemCPUs 설정을 동시에 적용할 수 없습니다. reservedSystemCPUs 로 구성된 성능 프로필을 적용하는 경우 OpenShift Container Platform은 다음 작업을 수행합니다.

  • systemReservedCgroup 설정이 자동으로 지워집니다.
  • enforceNodeAllocatable 매개변수는 Pod 로만 설정됩니다.
  • 기존 성능 프로필 동작은 변경할 필요 없이 유지됩니다.

KubeletConfig 오브젝트를 사용하여 특정 머신 구성 풀의 노드에 대한 기본 적용 동작을 비활성화할 수 있습니다. 다음과 같은 이유로 기능을 비활성화할 수 있습니다.

  • 특정 시스템 데몬 리소스 관리 요구 사항이 있습니다.
  • 시스템 데몬이 예기치 않게 제한되는 경우 문제 해결을 수행하려고 합니다.

다음 kubelet 구성은 CPU 예약 적용을 비활성화합니다.

apiVersion: machineconfiguration.openshift.io/v1
kind: KubeletConfig
metadata:
  name: 80-custom-system-reserved
spec:
  machineConfigPoolSelector:
    matchLabels:
      pools.operator.machineconfiguration.openshift.io/worker: ""
  kubeletConfig:
    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    systemReservedCgroup: ""
    enforceNodeAllocatable:
      - "pods"

다음과 같습니다.

metadata.name
kubelet 구성의 이름을 지정합니다. 높은 숫자 접두사를 사용하여 마지막으로 병합되는지 확인합니다.
spec.machineConfigPoolSelector.matchLabels
수정할 머신 구성 풀의 레이블을 지정합니다.
spec.kubeletConfig.systemReservedCgroup
"" 로 설정하면 cgroup 시행이 비활성화됨을 지정합니다.
spec.kubeletConfig.enforceNodeAllocatable
"pods" 만 설정하면 노드가 할당 가능한 적용이 system-reserved 리소스뿐만 아니라 Pod에만 적용되도록 지정합니다.

6.12.1.3. 노드에서 리소스 제약 조건을 적용하는 방법

노드는 구성된 할당 가능 값을 기반으로 Pod에서 사용할 수 있는 총 리소스 양을 제한할 수 있습니다. 이 기능을 사용하면 컨테이너 런타임 및 노드 에이전트와 같은 시스템 서비스에 필요한 CPU 및 메모리 리소스를 Pod에서 사용하지 못하도록 하여 노드의 안정성이 크게 향상됩니다. 관리자는 노드 안정성을 개선하기 위해 리소스 사용량 목표에 따라 리소스를 예약해야 합니다.

노드는 서비스 품질을 적용하는 새 cgroup 계층을 사용하여 리소스 제약 조건을 적용합니다. 모든 Pod는 시스템 데몬과는 별도의 전용 cgroup 계층에서 시작됩니다.

관리자는 서비스 품질이 보장된 Pod와 비슷한 시스템 데몬을 처리해야 합니다. 시스템 데몬은 바인딩 제어 그룹 내에서 버스트될 수 있으며 이 동작은 클러스터 배포의 일부로 관리해야 합니다. system-reserved에 CPU 및 메모리 리소스를 지정하여 시스템 데몬을 위한 CPU 및 메모리 리소스를 예약합니다.

참고

system-reserved 제한을 강제 적용하여 중요한 시스템 서비스에서 CPU 및 메모리 리소스를 수신하지 못하도록 할 수 있습니다. 그 결과 메모리 부족 종료자에서 중요한 시스템 서비스를 종료할 수 있습니다. 정확한 추정치를 결정하기 위해 노드를 철저히 프로파일링하고 메모리 부족 종료자에서 해당 그룹의 프로세스를 종료할 때 중요한 시스템 서비스를 복구할 수 있다고 확신하는 경우에만 system-reserved를 강제 적용하는 것이 좋습니다.

6.12.1.4. 제거 임계값 이해

노드가 메모리 부족 상태에 있는 경우 전체 노드와 해당 노드에서 실행 중인 모든 Pod에 영향을 미칠 수 있습니다. 예를 들어 시스템 데몬에서 예약된 메모리보다 많은 양을 사용하면 메모리 부족 이벤트가 트리거될 수 있습니다. 노드에서는 시스템 메모리 부족 이벤트를 방지하거나 줄이기 위해 리소스 부족 처리 기능을 제공합니다.

--eviction-hard 플래그를 사용하여 일부 메모리를 예약할 수 있습니다. 노드는 노드의 메모리 가용성이 이 절대값 또는 백분율 아래로 떨어지면 Pod를 제거하려고 합니다. 노드에 시스템 데몬이 없는 경우 Pod는 메모리 capacity - eviction-hard로 제한됩니다. 이로 인해 메모리 부족 상태에 도달하기 전에 제거할 버퍼로 따로 설정된 리소스를 Pod에 사용할 수 없습니다.

다음은 메모리에 할당 가능한 노드의 영향을 보여주는 예입니다.

  • 노드 용량이 32Gi입니다.
  • --system-reserved가 3Gi입니다.
  • --eviction-hard가 100Mi로 설정되어 있습니다.

이 노드의 경우 유효 노드 할당 가능 값은 28.9Gi입니다. 노드 및 시스템 구성 요소에서 예약된 용량을 모두 사용하는 경우 Pod에 사용 가능한 메모리는 28.9Gi이고 이 임계값을 초과하는 경우 Kubelet은 Pod를 제거합니다.

노드 할당 가능 28.9Gi를 최상위 cgroups와 함께 적용하면 Pod에서 28.9Gi를 초과하지 않습니다. 시스템 데몬의 메모리 사용량이 3.1Gi를 초과하면 제거 작업이 수행됩니다.

위 예에서 시스템 데몬이 예약된 용량을 모두 사용하지 않는 경우 노드 제거가 시작되기 전에 Pod의 바인딩 cgroup에서 memcg OOM이 종료됩니다. 이러한 상황에서 QoS를 더 잘 적용하기 위해 노드는 모든 Pod가 Node Allocatable + Eviction Hard Thresholds가 되도록 최상위 cgroup에 하드 제거 임계값을 적용합니다.

시스템 데몬에서 예약된 용량을 모두 사용하지 않는 경우 노드는 Pod의 메모리 사용량이 28.9Gi를 초과할 때마다 Pod를 제거합니다. 제거 작업이 제시간에 수행되지 않아 Pod에서 29Gi의 메모리를 사용하면 Pod가 OOM 종료됩니다.

6.12.1.5. 스케줄러에서 리소스 가용성을 결정하는 방법

스케줄러는 node.Status.Capacity가 아닌 node.Status.Allocatable의 값을 사용하여 노드가 Pod 예약 후보가 될지 결정합니다.

기본적으로 노드는 클러스터에서 전체 머신 용량을 예약할 수 있는 것으로 보고합니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

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

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

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

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동