7.3. 제한 범위를 사용하여 리소스 사용 제한

기본적으로 컨테이너는 OpenShift Container Platform 클러스터에서 바인딩되지 않은 컴퓨팅 리소스와 함께 실행됩니다. 제한 범위를 사용하면 프로젝트에서 특정 오브젝트에 대한 리소스 사용을 제한할 수 있습니다.

  • Pod 및 컨테이너: Pod 및 해당 컨테이너의 CPU 및 메모리에 대한 최소 및 최대 요구 사항을 설정할 수 있습니다.
  • 이미지 스트림: ImageStream 오브젝트에서 이미지 및 태그 수에 대한 제한을 설정할 수 있습니다.
  • 이미지: 내부 레지스트리로 내보낼 수 있는 이미지 크기를 제한할 수 있습니다.
  • PVC(영구 볼륨 클레임): 요청할 수 있는 PVC의 크기를 제한할 수 있습니다.

Pod가 제한 범위에 따라 적용된 제약 조건을 충족하지 않는 경우에는 네임스페이스에 Pod를 생성할 수 없습니다.

7.3.1. 제한 범위 정보

LimitRange 오브젝트에서 정의하는 제한 범위는 프로젝트의 리소스 사용을 제한합니다. 프로젝트에서는 Pod, 컨테이너, 이미지 스트림 또는 PVC(영구 볼륨 클레임)에 대한 특정 리소스 제한을 설정할 수 있습니다.

리소스 생성 및 수정을 위한 모든 요청은 프로젝트의 각 LimitRange 오브젝트에 대해 평가됩니다. 리소스가 열거된 제약 조건을 위반하는 경우 해당 리소스는 거부됩니다.

다음은 모든 구성 요소의 제한 범위 오브젝트(Pod, 컨테이너, 이미지, 이미지 스트림 또는 PVC)를 보여줍니다. 동일한 오브젝트에서 이러한 구성 요소의 일부 또는 모두에 대한 제한을 구성할 수 있습니다. 리소스를 제어하려는 각 프로젝트에 대해 서로 다른 제한 범위 오브젝트를 생성합니다.

컨테이너의 제한 범위 오브젝트 샘플

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits"
spec:
  limits:
    - type: "Container"
      max:
        cpu: "2"
        memory: "1Gi"
      min:
        cpu: "100m"
        memory: "4Mi"
      default:
        cpu: "300m"
        memory: "200Mi"
      defaultRequest:
        cpu: "200m"
        memory: "100Mi"
      maxLimitRequestRatio:
        cpu: "10"

7.3.1.1. 구성 요소 제한 정보

다음 예제에서는 각 구성 요소에 대한 제한 범위 매개변수를 보여줍니다. 해당 예제는 명확성을 위해 분류되어 있습니다. 필요에 따라 일부 또는 모든 구성 요소에 대해 단일 LimitRange 오브젝트를 생성할 수 있습니다.

7.3.1.1.1. 컨테이너 제한

제한 범위를 사용하면 Pod의 각 컨테이너에서 특정 프로젝트에 대해 요청할 수 있는 최소 및 최대 CPU 및 메모리를 지정할 수 있습니다. 프로젝트에서 컨테이너가 생성되면 Pod 사양의 컨테이너 CPU 및 메모리 요청이 LimitRange 오브젝트에 설정된 값을 준수해야 합니다. 그러지 않으면 Pod가 생성되지 않습니다.

  • 컨테이너 CPU 또는 메모리에 대한 요청 및 제한이 LimitRange 오브젝트에 지정된 컨테이너의 min 리소스 제약 조건보다 크거나 같아야 합니다.
  • 컨테이너 CPU 또는 메모리 요청 및 제한이 LimitRange 오브젝트에 지정된 컨테이너의 max 리소스 제약 조건보다 작거나 같아야 합니다.

    LimitRange 오브젝트에서 max CPU를 정의하는 경우 Pod 사양에 CPU request 값을 정의할 필요가 없습니다. 그러나 제한 범위에 지정된 최대 CPU 제약 조건을 충족하는 CPU limit 값은 지정해야 합니다.

  • 요청에 대한 컨테이너 제한 비율은 LimitRange 오브젝트에 지정된 컨테이너의 maxLimitRequestRatio 값보다 작거나 같아야 합니다.

    LimitRange 오브젝트에서 maxLimitRequestRatio 제약 조건을 정의하는 경우 새 컨테이너에 requestlimit 값이 모두 있어야 합니다. OpenShift Container Platform은 limit 값을 request 값으로 나눠 제한 대 요청 비율을 계산합니다. 이 값은 음수가 아닌 1보다 큰 정수여야 합니다.

    예를 들어 컨테이너에 cpu가 있는 경우: 제한 값의 500 및 cpu: 100 요청 값에서 cpu 의 제한 대 요청 비율은 5 입니다. 이 비율은 maxLimitRequestRatio보다 작거나 같아야 합니다.

Pod 사양에서 컨테이너 리소스 메모리 또는 제한을 지정하지 않으면 제한 범위 오브젝트에 지정된 컨테이너의 default 또는 defaultRequest CPU 및 메모리 값이 컨테이너에 할당됩니다.

컨테이너 LimitRange 오브젝트 정의

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 1
spec:
  limits:
    - type: "Container"
      max:
        cpu: "2" 2
        memory: "1Gi" 3
      min:
        cpu: "100m" 4
        memory: "4Mi" 5
      default:
        cpu: "300m" 6
        memory: "200Mi" 7
      defaultRequest:
        cpu: "200m" 8
        memory: "100Mi" 9
      maxLimitRequestRatio:
        cpu: "10" 10

1
LimitRange 오브젝트의 이름입니다.
2
Pod의 단일 컨테이너에서 요청할 수 있는 최대 CPU 양입니다.
3
Pod의 단일 컨테이너에서 요청할 수 있는 최대 메모리 양입니다.
4
Pod의 단일 컨테이너에서 요청할 수 있는 최소 CPU 양입니다.
5
Pod의 단일 컨테이너에서 요청할 수 있는 최소 메모리 양입니다.
6
Pod 사양에 지정되지 않은 경우 컨테이너에서 사용할 수 있는 기본 CPU 양입니다.
7
Pod 사양에 지정되지 않은 경우 컨테이너에서 사용할 수 있는 기본 메모리 양입니다.
8
Pod 사양에 지정되지 않은 경우 컨테이너에서 요청할 수 있는 기본 CPU 양입니다.
9
Pod 사양에 지정되지 않은 경우 컨테이너에서 요청할 수 있는 기본 메모리 양입니다.
10
컨테이너에 대한 최대 제한 대 요청 비율입니다.
7.3.1.1.2. Pod 제한

제한 범위를 사용하면 지정된 프로젝트의 Pod에서 모든 컨테이너에 대해 최소 및 최대 CPU 및 메모리 제한을 지정할 수 있습니다. 프로젝트에서 컨테이너를 생성하려면 Pod 사양의 컨테이너 CPU 및 메모리 요청이 LimitRange 오브젝트에 설정된 값을 준수해야 합니다. 그러지 않으면 Pod가 생성되지 않습니다.

Pod 사양에서 컨테이너 리소스 메모리 또는 제한을 지정하지 않으면 제한 범위 오브젝트에 지정된 컨테이너의 default 또는 defaultRequest CPU 및 메모리 값이 컨테이너에 할당됩니다.

Pod의 모든 컨테이너에서 다음 사항이 충족되어야 합니다.

  • 컨테이너 CPU 또는 메모리에 대한 요청 및 제한이 LimitRange 오브젝트에 지정된 Pod의 min 리소스 제약 조건보다 크거나 같아야 합니다.
  • 컨테이너 CPU 또는 메모리에 대한 요청 및 제한이 LimitRange 오브젝트에 지정된 Pod의 max 리소스 제약 조건보다 작거나 같아야 합니다.
  • 요청에 대한 컨테이너 제한 대 요청 비율이 LimitRange 오브젝트에 지정된 maxLimitRequestRatio 제약 조건보다 작거나 같아야 합니다.

Pod LimitRange 오브젝트 정의

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 1
spec:
  limits:
    - type: "Pod"
      max:
        cpu: "2" 2
        memory: "1Gi" 3
      min:
        cpu: "200m" 4
        memory: "6Mi" 5
      maxLimitRequestRatio:
        cpu: "10" 6

1
제한 범위 오브젝트의 이름입니다.
2
Pod에서 모든 컨테이너에 요청할 수 있는 최대 CPU 양입니다.
3
Pod에서 모든 컨테이너에 요청할 수 있는 최대 메모리 양입니다.
4
Pod에서 모든 컨테이너에 요청할 수 있는 최소 CPU 양입니다.
5
Pod에서 모든 컨테이너에 요청할 수 있는 최소 메모리 양입니다.
6
컨테이너에 대한 최대 제한 대 요청 비율입니다.
7.3.1.1.3. 이미지 제한

LimitRange 오브젝트를 사용하면 내부 레지스트리로 내보낼 수 있는 이미지의 최대 크기를 지정할 수 있습니다.

이미지를 내부 레지스트리로 내보내는 경우 다음 사항이 충족되어야 합니다.

  • 이미지 크기가 LimitRange 오브젝트에 지정된 이미지의 max 크기보다 작거나 같아야 합니다.

이미지 LimitRange 오브젝트 정의

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 1
spec:
  limits:
    - type: openshift.io/Image
      max:
        storage: 1Gi 2

1
LimitRange 오브젝트의 이름입니다.
2
내부 레지스트리로 내보낼 수 있는 이미지의 최대 크기입니다.
참고

제한을 초과하는 Blob이 레지스트리에 업로드되지 않도록 하려면 할당량을 적용하도록 레지스트리를 구성해야 합니다.

주의

업로드된 이미지의 매니페스트에서 이미지 크기를 항상 사용할 수 있는 것은 아닙니다. 특히 Docker 1.10 이상으로 빌드하여 v2 레지스트리로 내보낸 이미지의 경우 그러합니다. 이전 Docker 데몬을 사용하여 이러한 이미지를 가져오면 레지스트리에서 이미지 매니페스트를 모든 크기 정보가 없는 스키마 v1로 변환합니다. 이미지에 스토리지 제한이 설정되어 있지 않아 업로드할 수 없습니다.

문제가 처리되고 있습니다.

7.3.1.1.4. 이미지 스트림 제한

LimitRange 오브젝트를 사용하면 이미지 스트림에 대한 제한을 지정할 수 있습니다.

각 이미지 스트림에서 다음 사항이 충족되어야 합니다.

  • ImageStream 사양의 이미지 태그 수가 LimitRange 오브젝트의 openshift.io/image-tags 제약 조건보다 작거나 같아야 합니다.
  • ImageStream 사양의 이미지에 대한 고유 참조 수가 제한 범위 오브젝트의 openshift.io/images 제약 조건보다 작거나 같아야 합니다.

이미지 스트림 LimitRange 오브젝트 정의

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 1
spec:
  limits:
    - type: openshift.io/ImageStream
      max:
        openshift.io/image-tags: 20 2
        openshift.io/images: 30 3

1
LimitRange 오브젝트의 이름입니다.
2
imagestream 사양의 imagestream.spec.tags 매개변수에 있는 최대 고유 이미지 태그 수입니다.
3
imagestream 사양의 imagestream.status.tags 매개변수에 있는 최대 고유 이미지 참조 수입니다.

openshift.io/image-tags 리소스는 고유 이미지 참조를 나타냅니다. 사용 가능한 참조는 ImageStreamTag, ImageStreamImage, DockerImage입니다. 태그는 oc tagoc import-image 명령을 사용하여 생성할 수 있습니다. 내부 참조와 외부 참조는 구분되지 않습니다. 그러나 ImageStream 사양에 태그된 각각의 고유 참조는 한 번만 계산됩니다. 내부 컨테이너 이미지 레지스트리에 대한 내보내기는 어떤 방식으로든 제한하지 않지만 태그 제한에 유용합니다.

openshift.io/images 리소스는 이미지 스트림 상태에 기록된 고유 이미지 이름을 나타냅니다. 내부 레지스트리로 내보낼 수 있는 이미지 수를 제한할 수 있습니다. 내부 및 외부 참조는 구분되지 않습니다.

7.3.1.1.5. 영구 볼륨 클레임 제한

LimitRange 오브젝트를 사용하여 PVC(영구 볼륨 클레임)에 요청된 스토리지를 제한할 수 있습니다.

프로젝트의 모든 영구 볼륨 클레임에서 다음 사항이 충족되어야 합니다.

  • PVC(영구 볼륨 클레임)의 리소스 요청이 LimitRange 오브젝트에 지정된 PVC의 min 제약 조건보다 크거나 같아야 합니다.
  • PVC(영구 볼륨 클레임)의 리소스 요청이 LimitRange 오브젝트에 지정된 PVC의 max 제약 조건보다 작거나 같아야 합니다.

PVC LimitRange 오브젝트 정의

apiVersion: "v1"
kind: "LimitRange"
metadata:
  name: "resource-limits" 1
spec:
  limits:
    - type: "PersistentVolumeClaim"
      min:
        storage: "2Gi" 2
      max:
        storage: "50Gi" 3

1
LimitRange 오브젝트의 이름입니다.
2
영구 볼륨 클레임에서 요청할 수 있는 최소 스토리지 양입니다.
3
영구 볼륨 클레임에서 요청할 수 있는 최대 스토리지 양입니다.