8장. 할당량 및 제한 범위 사용
ResourceQuota 오브젝트로 정의하는 리소스 할당량은 프로젝트당 집계 리소스 사용을 제한하는 제약 조건을 제공합니다. 이를 통해 프로젝트에서 생성할 수 있는 오브젝트의 수량을 유형별로 제한하고 해당 프로젝트의 리소스에서 사용할 수 있는 컴퓨팅 리소스 및 스토리지의 총량도 제한할 수 있습니다.
클러스터 관리자는 할당량 및 제한 범위를 사용하여 프로젝트에 사용되는 오브젝트 수 또는 컴퓨팅 리소스 양을 제한하는 제약 조건을 설정할 수 있습니다. 이렇게 하면 클러스터 관리자가 모든 프로젝트에서 리소스를 보다 효과적으로 관리하고 할당하며 클러스터 크기에 적합한 프로젝트가 없는지 확인할 수 있습니다.
할당량은 클러스터 관리자가 설정하고 지정된 프로젝트로 범위가 지정됩니다. OpenShift Container Platform 프로젝트 소유자는 프로젝트의 할당량을 변경할 수 있지만 범위를 제한할 수는 없습니다. OpenShift Container Platform 사용자는 할당량 또는 제한 범위를 수정할 수 없습니다.
다음 섹션에서는 할당량 및 제한 범위 설정, 제한할 수 있는 작업 종류 및 자체 Pod 및 컨테이너에서 컴퓨팅 리소스를 요청하거나 제한하는 방법을 확인하는 방법을 설명합니다.
8.1. 할당량으로 관리하는 리소스 링크 복사링크가 클립보드에 복사되었습니다!
ResourceQuota 오브젝트로 정의하는 리소스 할당량은 프로젝트당 집계 리소스 사용을 제한하는 제약 조건을 제공합니다. 이를 통해 프로젝트에서 생성할 수 있는 오브젝트의 수량을 유형별로 제한하고 해당 프로젝트의 리소스에서 사용할 수 있는 컴퓨팅 리소스 및 스토리지의 총량도 제한할 수 있습니다.
다음 내용에서는 할당량으로 관리할 수 있는 컴퓨팅 리소스 및 오브젝트 유형 세트를 설명합니다.
status.phase 이 Failed 또는 Succeeded 인 경우 Pod는 터미널 상태에 있습니다.
| 리소스 이름 | 설명 |
|---|---|
|
|
터미널이 아닌 상태에서 모든 Pod의 CPU 요청 합계는 이 값을 초과할 수 없습니다. |
|
|
터미널이 아닌 상태에서 모든 Pod의 메모리 요청 합계는 이 값을 초과할 수 없습니다. |
|
|
터미널이 아닌 상태에서 모든 Pod의 로컬 임시 스토리지 요청 합계는 이 값을 초과할 수 없습니다. |
|
|
터미널이 아닌 상태에서 모든 Pod의 CPU 요청 합계는 이 값을 초과할 수 없습니다. |
|
|
터미널이 아닌 상태에서 모든 Pod의 메모리 요청 합계는 이 값을 초과할 수 없습니다. |
|
|
터미널이 아닌 상태에서 모든 Pod의 임시 스토리지 요청 합계는 이 값을 초과할 수 없습니다. |
|
| 터미널이 아닌 상태에서 모든 Pod의 CPU 제한 합계는 이 값을 초과할 수 없습니다. |
|
| 터미널이 아닌 상태에서 모든 Pod의 메모리 제한 합계는 이 값을 초과할 수 없습니다. |
|
| 터미널이 아닌 상태에서 모든 Pod의 임시 스토리지 제한 합계는 이 값을 초과할 수 없습니다. 이 리소스는 임시 스토리지 기술 프리뷰를 활성화한 경우에만 사용할 수 있습니다. 이 기능은 기본적으로 비활성화되어 있습니다. |
| 리소스 이름 | 설명 |
|---|---|
|
| 상태와 관계없이 모든 영구 볼륨 클레임의 스토리지 요청 합계는 이 값을 초과할 수 없습니다. |
|
| 프로젝트에 존재할 수 있는 총 영구 볼륨 클레임 수입니다. |
|
| 상태와 관계없이 일치하는 스토리지 클래스가 있는 모든 영구 볼륨 클레임의 스토리지 요청 합계는 이 값을 초과할 수 없습니다. |
|
| 프로젝트에 존재할 수 있는, 일치하는 스토리지 클래스가 있는 총 영구 볼륨 클레임 수입니다. |
| 리소스 이름 | 설명 |
|---|---|
|
| 프로젝트에 존재할 수 있는 터미널이 아닌 상태의 총 Pod 수입니다. |
|
| 프로젝트에 존재할 수 있는 총 복제 컨트롤러 수입니다. |
|
| 프로젝트에 존재할 수 있는 총 리소스 할당량 수입니다. |
|
| 프로젝트에 존재할 수 있는 총 서비스 수입니다. |
|
| 프로젝트에 존재할 수 있는 총 시크릿 수입니다. |
|
|
프로젝트에 존재할 수 있는 총 |
|
| 프로젝트에 존재할 수 있는 총 영구 볼륨 클레임 수입니다. |
|
| 프로젝트에 존재할 수 있는 총 이미지 스트림 수입니다. |
count/<resource>.<group> 구문을 사용하여 이러한 표준 네임스페이스 리소스 유형에 대한 개체 수 할당량을 구성할 수 있습니다.
oc create quota <name> --hard=count/<resource>.<group>=<quota>
$ oc create quota <name> --hard=count/<resource>.<group>=<quota>
- 1
<resource>는 리소스 이름이고<group>은 API 그룹입니다(해당하는 경우).kubectl api-resources명령을 사용하면 리소스 목록과 관련 API 그룹을 볼 수 있습니다.
8.1.1. 확장 리소스에 대한 리소스 할당량 설정 링크 복사링크가 클립보드에 복사되었습니다!
확장 리소스에는 리소스 과다 할당이 허용되지 않으므로 할당량의 해당 확장 리소스에 requests 및 limits를 지정해야 합니다. 현재는 requests. 라는 접두사가 붙은 할당량 항목만 확장 리소스에 허용됩니다. 다음은 GPU 리소스 nvidia.com/gpu에 대한 리소스 할당량을 설정하는 방법에 대한 예제 시나리오입니다.
프로세스
클러스터의 노드에서 사용 가능한 GPU 수를 확인하려면 다음 명령을 사용하세요.
oc describe node ip-172-31-27-209.us-west-2.compute.internal | egrep 'Capacity|Allocatable|gpu'
$ oc describe node ip-172-31-27-209.us-west-2.compute.internal | egrep 'Capacity|Allocatable|gpu'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서는 GPU 2개를 사용할 수 있습니다.
이 명령을 사용하여
nvidia네임스페이스에 할당량을 설정합니다. 이 예에서 할당량은1입니다.cat gpu-quota.yaml
$ cat gpu-quota.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령으로 할당량을 생성합니다.
oc create -f gpu-quota.yaml
$ oc create -f gpu-quota.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
resourcequota/gpu-quota created
resourcequota/gpu-quota createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여 네임스페이스에 올바른 할당량 집합이 있는지 확인하세요.
oc describe quota gpu-quota -n nvidia
$ oc describe quota gpu-quota -n nvidiaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 0 1
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 0 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여 단일 GPU를 요청하는 Pod를 실행합니다.
oc create pod gpu-pod.yaml
$ oc create pod gpu-pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여 포드가 실행 중인지 확인하세요.
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME READY STATUS RESTARTS AGE gpu-pod-s46h7 1/1 Running 0 1m
NAME READY STATUS RESTARTS AGE gpu-pod-s46h7 1/1 Running 0 1mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
사용된할당량 카운터가 올바른지 확인하세요.oc describe quota gpu-quota -n nvidia
$ oc describe quota gpu-quota -n nvidiaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 1 1
Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 1 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여
nvidia네임스페이스에 두 번째 GPU 포드를 만들어 보세요. 노드에 GPU가 2개 있으므로 기술적으로 가능합니다.oc create -f gpu-pod.yaml
$ oc create -f gpu-pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Error from server (Forbidden): error when creating "gpu-pod.yaml": pods "gpu-pod-f7z2w" is forbidden: exceeded quota: gpu-quota, requested: requests.nvidia.com/gpu=1, used: requests.nvidia.com/gpu=1, limited: requests.nvidia.com/gpu=1
Error from server (Forbidden): error when creating "gpu-pod.yaml": pods "gpu-pod-f7z2w" is forbidden: exceeded quota: gpu-quota, requested: requests.nvidia.com/gpu=1, used: requests.nvidia.com/gpu=1, limited: requests.nvidia.com/gpu=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이
금지오류 메시지는 GPU 할당량이 1개이고 이 포드가 할당량을 초과하는 두 번째 GPU를 할당하려고 했기 때문에 발생합니다.
8.1.2. 할당량 범위 링크 복사링크가 클립보드에 복사되었습니다!
각 할당량에는 일련의 관련 범위가 있을 수 있습니다. 특정 할당량은 열거된 범위의 교집합과 일치하는 경우에만 리소스 사용량을 측정합니다.
할당량에 범위를 추가하면 할당량을 적용할 수 있는 리소스 세트가 제한됩니다. 허용된 설정을 벗어난 리소스를 지정하면 검증 오류가 발생합니다.
| 범위 | 설명 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
BestEffort 범위는 할당량을 제한하여 다음 리소스를 제한합니다.
-
pods
Terminating, NotTerminating, NotBestEffort 범위는 할당량을 제한하여 다음 리소스를 추적합니다.
-
pods -
memory -
requests.memory -
limits.memory -
cpu -
requests.cpu -
limits.cpu -
ephemeral-storage -
requests.ephemeral-storage -
limits.ephemeral-storage
임시 저장소 요청 및 제한은 임시 저장소 기술 미리 보기를 활성화한 경우에만 적용됩니다. 이 기능은 기본적으로 비활성화되어 있습니다.
추가 리소스
컴퓨팅 리소스에 대한 자세한 내용은 할당량으로 관리되는 리소스를 참조하세요.
컴퓨팅 리소스 커밋에 대한 자세한 내용은 서비스 품질 클래스를 참조하세요.