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
사양에 CPUrequest
값을 정의할 필요가 없습니다. 그러나 제한 범위에 지정된 최대 CPU 제약 조건을 충족하는 CPUlimit
값은 지정해야 합니다.요청에 대한 컨테이너 제한 비율은
LimitRange
오브젝트에 지정된 컨테이너의maxLimitRequestRatio
값보다 작거나 같아야 합니다.LimitRange
오브젝트에서maxLimitRequestRatio
제약 조건을 정의하는 경우 새 컨테이너에request
및limit
값이 모두 있어야 합니다. 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
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
제한을 초과하는 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
openshift.io/image-tags
리소스는 고유 이미지 참조를 나타냅니다. 사용 가능한 참조는 ImageStreamTag
, ImageStreamImage
, DockerImage
입니다. 태그는 oc tag
및 oc 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