6.10. 가비지 컬렉션을 사용하여 노드 리소스 해제


관리자는 OpenShift Container Platform에서 가비지 컬렉션을 통해 리소스를 확보함으로써 노드가 효율적으로 실행되도록 할 수 있습니다.

OpenShift Container Platform 노드는 두 가지 유형의 가비지 컬렉션을 수행합니다.

  • 컨테이너 가비지 컬렉션: 종료된 컨테이너를 제거합니다.
  • 이미지 가비지 컬렉션: 실행 중인 Pod에서 참조하지 않는 이미지를 제거합니다.

6.10.1. 가비지 컬렉션을 통해 종료된 컨테이너를 제거하는 방법 이해

컨테이너 가비지 컬렉션에서는 제거 임계 값을 사용하여 종료된 컨테이너를 제거합니다.

가비지 컬렉션에 제거 임계 값이 설정되어 있으면 노드는 API에서 액세스 가능한 모든 pod의 컨테이너를 유지하려고합니다. pod가 삭제된 경우 컨테이너도 삭제됩니다. pod가 삭제되지 않고 제거 임계 값에 도달하지 않는 한 컨테이너는 보존됩니다. 노드가 디스크 부족 (disk pressure) 상태가 되면 컨테이너가 삭제되고 oc logs를 사용하여 해당 로그에 더 이상 액세스할 수 없습니다.

  • eviction-soft - 소프트 제거 임계 값은 관리자가 지정한 필수 유예 기간이 있는 제거 임계 값과 일치합니다.
  • eviction-hard - 하드 제거 임계 값에 대한 유예 기간이 없으며 감지되는 경우 OpenShift Container Platform은 즉시 작업을 수행합니다.

다음 표에는 제거 임계 값이 나열되어 있습니다.

표 6.2. 컨테이너 가비지 컬렉션 구성을 위한 변수
노드 상태제거 신호설명

MemoryPressure

memory.available

노드에서 사용 가능한 메모리입니다.

DiskPressure

  • nodefs.available
  • nodefs.inodesFree
  • imagefs.available
  • imagefs.inodesFree

노드 루트 파일 시스템, nodefs 또는 이미지 파일 시스템 imagefs 에서 사용 가능한 디스크 공간 또는 inode입니다.

참고

evictionHard 의 경우 이러한 모든 매개변수를 지정해야 합니다. 모든 매개변수를 지정하지 않으면 지정된 매개변수만 적용되고 가비지 컬렉션이 제대로 작동하지 않습니다.

노드가 소프트 제거 임계 값 상한과 하한 사이에서 변동하고 연관된 유예 기간이 만료되지 않은 경우 해당 노드는 지속적으로 truefalse 사이에서 변동합니다. 결과적으로 스케줄러는 잘못된 스케줄링 결정을 내릴 수 있습니다.

이러한 변동을 방지하려면 eviction-pressure-transition-period 플래그를 사용하여 OpenShift Container Platform이 부족 상태에서 전환하기 전에 대기해야하는 시간을 제어합니다. OpenShift Container Platform은 false 상태로 전환되기 전에 지정된 기간에 지정된 부족 상태에 대해 제거 임계 값을 충족하도록 설정하지 않습니다.

6.10.2. 가비지 컬렉션을 통해 이미지가 제거되는 방법 이해

이미지 가비지 컬렉션에서는 실행 중인 Pod에서 참조하지 않는 이미지를 제거합니다.

OpenShift Container Platform은 cAdvisor 에서 보고하는 디스크 사용량을 기반으로 노드에서 삭제할 이미지를 결정합니다.

이미지 가비지 컬렉션 정책은 다음 두 가지 조건을 기반으로합니다.

  • 이미지 가비지 컬렉션을 트리거하는 디스크 사용량의 백분율 (정수로 표시)입니다. 기본값은 85입니다.
  • 이미지 가비지 컬렉션이 해제하려고 하는 디스크 사용량의 백분율 (정수로 표시)입니다. 기본값은 80입니다.

이미지 가비지 컬렉션의 경우 사용자 지정 리소스를 사용하여 다음 변수를 수정할 수 있습니다.

표 6.3. 이미지 가비지 컬렉션 구성을 위한 변수
설정설명

imageMinimumGCAge

가비지 컬렉션에 의해 이미지가 제거되기 전에 사용되지 않은 이미지의 최소 보존 기간입니다. 기본값은 2m입니다.

imageGCHighThresholdPercent

이미지 가비지 컬렉션을 트리거하는 정수로 표시되는 디스크 사용량의 백분율입니다. 기본값은 85입니다.

imageGCLowThresholdPercent

이미지 가비지 컬렉션이 해제하려고하는 디스크 사용량의 백분율 (정수로 표시)입니다. 기본값은 80입니다.

각 가비지 컬렉터 실행으로 두 개의 이미지 목록이 검색됩니다.

  1. 하나 이상의 Pod에서 현재 실행중인 이미지 목록입니다.
  2. 호스트에서 사용 가능한 이미지 목록입니다.

새로운 컨테이너가 실행되면 새로운 이미지가 나타납니다. 모든 이미지에는 타임 스탬프가 표시됩니다. 이미지가 실행 중이거나 (위의 첫 번째 목록) 새로 감지된 경우 (위의 두 번째 목록) 현재 시간으로 표시됩니다. 나머지 이미지는 이미 이전 실행에서 표시됩니다. 모든 이미지는 타임 스탬프별로 정렬됩니다.

컬렉션이 시작되면 중지 기준이 충족될 때까지 가장 오래된 이미지가 먼저 삭제됩니다.

6.10.3. 컨테이너 및 이미지의 가비지 컬렉션 구성

관리자는 각 machine config pool마다 kubeletConfig 오브젝트를 생성하여 OpenShift Container Platform이 가비지 컬렉션을 수행하는 방법을 구성할 수 있습니다.

참고

OpenShift Container Platform은 각 머신 구성 풀에 대해 하나의 kubeletConfig 오브젝트만 지원합니다.

다음 중 하나의 조합을 구성할 수 있습니다.

  • 소프트 컨테이너 제거
  • 하드 컨테이너 제거
  • 이미지 제거

컨테이너 가비지 컬렉션에서는 종료된 컨테이너를 제거합니다. 이미지 가비지 컬렉션에서는 실행 중인 Pod에서 참조하지 않는 이미지를 제거합니다.

사전 요구 사항

  1. 다음 명령을 입력하여 구성할 노드 유형의 정적 MachineConfigPool CRD와 연관된 라벨을 가져옵니다.

    $ oc edit machineconfigpool <name>

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

    $ oc edit machineconfigpool worker

    출력 예

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfigPool
    metadata:
      creationTimestamp: "2022-11-16T15:34:25Z"
      generation: 4
      labels:
        pools.operator.machineconfiguration.openshift.io/worker: "" 1
      name: worker
    #...

    1
    레이블이 Labels 아래에 표시됩니다.
    작은 정보

    라벨이 없으면 다음과 같은 키/값 쌍을 추가합니다.

    $ oc label machineconfigpool worker custom-kubelet=small-pods

절차

  1. 구성 변경을 위한 사용자 정의 리소스 (CR)를 만듭니다.

    중요

    파일 시스템이 한 개 있거나 /var/lib/kubelet/var/lib/containers/ 가 동일한 파일 시스템에 있는 경우 가장 높은 값이 있는 설정이 먼저 충족되므로 제거가 가장 많습니다. 파일 시스템에서 제거가 트리거됩니다.

    컨테이너 가비지 컬렉션 CR의 설정 예:

    apiVersion: machineconfiguration.openshift.io/v1
    kind: KubeletConfig
    metadata:
      name: worker-kubeconfig 1
    spec:
      machineConfigPoolSelector:
        matchLabels:
          pools.operator.machineconfiguration.openshift.io/worker: "" 2
      kubeletConfig:
        evictionSoft: 3
          memory.available: "500Mi" 4
          nodefs.available: "10%"
          nodefs.inodesFree: "5%"
          imagefs.available: "15%"
          imagefs.inodesFree: "10%"
        evictionSoftGracePeriod:  5
          memory.available: "1m30s"
          nodefs.available: "1m30s"
          nodefs.inodesFree: "1m30s"
          imagefs.available: "1m30s"
          imagefs.inodesFree: "1m30s"
        evictionHard: 6
          memory.available: "200Mi"
          nodefs.available: "5%"
          nodefs.inodesFree: "4%"
          imagefs.available: "10%"
          imagefs.inodesFree: "5%"
        evictionPressureTransitionPeriod: 0s 7
        imageMinimumGCAge: 5m 8
        imageGCHighThresholdPercent: 80 9
        imageGCLowThresholdPercent: 75 10
    #...

    1
    오브젝트의 이름입니다.
    2
    머신 구성 풀에서 라벨을 지정합니다.
    3
    컨테이너 가비지 컬렉션의 경우 eviction: evictionSoft 또는 evictionHard 입니다.
    4
    컨테이너 가비지 컬렉션의 경우: 특정 제거 트리거 신호를 기반으로 하는 제거 임계값입니다.
    5
    컨테이너 가비지 컬렉션의 경우: 소프트 제거에 대한 grace 기간입니다. 이 매개변수는 eviction-hard에는 적용되지 않습니다.
    6
    컨테이너 가비지 컬렉션의 경우: 특정 제거 트리거 신호를 기반으로 하는 제거 임계값입니다. evictionHard 의 경우 이러한 모든 매개변수를 지정해야 합니다. 모든 매개변수를 지정하지 않으면 지정된 매개변수만 적용되고 가비지 컬렉션이 제대로 작동하지 않습니다.
    7
    컨테이너 가비지 컬렉션의 경우: 제거 부족 상태에서 전환되기 전에 대기하는 시간입니다.
    8
    이미지 가비지 컬렉션의 경우 이미지 가비지 수집에 의해 이미지가 제거되기 전에 사용되지 않은 이미지의 최소 수명입니다.
    9
    이미지 가비지 컬렉션의 경우: 이미지 가비지 컬렉션을 트리거하는 디스크 사용량의 백분율(정수로 표시)입니다.
    10
    이미지 가비지 컬렉션의 경우 이미지 가비지 컬렉션이 해제하려고 하는 디스크 사용량의 백분율(정수로 표시)입니다.
  2. 다음 명령을 실행하여 CR을 생성합니다.

    $ oc create -f <file_name>.yaml

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

    $ oc create -f gc-container.yaml

    출력 예

    kubeletconfig.machineconfiguration.openshift.io/gc-container created

검증

  1. 다음 명령을 입력하여 가비지 컬렉션이 활성화되어 있는지 확인합니다. 사용자 지정 리소스에 지정한 Machine Config Pool은 변경 사항이 완전히 구현될 때까지 UPDATING과 함께 'true'로 표시됩니다.

    $ oc get machineconfigpool

    출력 예

    NAME     CONFIG                                   UPDATED   UPDATING
    master   rendered-master-546383f80705bd5aeaba93   True      False
    worker   rendered-worker-b4c51bb33ccaae6fc4a6a5   False     True

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.