17.2. 由配额管理的资源
下文描述了可能通过配额管理的计算资源和对象类型的集合。
如果 status.phase in (Failed, Succeeded)
为 true,则 Pod 处于终端状态。
资源名称 | 描述 |
---|---|
|
非终端状态的所有 Pod 的 CPU 请求总和不能超过这个值。 |
|
非终端状态的所有 Pod 的内存请求总和不能超过这个值。 |
|
非终端状态的所有 Pod 的本地临时存储请求总和不能超过这个值。 |
|
非终端状态的所有 Pod 的 CPU 请求总和不能超过这个值。 |
|
非终端状态的所有 Pod 的内存请求总和不能超过这个值。 |
|
非终端状态的所有 Pod 的临时存储请求总和不能超过这个值。 |
| 非终端状态的所有 Pod 的 CPU 限值总和不能超过这个值。 |
| 非终端状态的所有 Pod 的内存限值总和不能超过这个值。 |
| 非终端状态的所有 Pod 的临时存储限值总和不能超过这个值。只有在您启用了临时存储技术预览时,此资源才可用。此功能默认为禁用。 |
资源名称 | 描述 |
---|---|
| 处于任何状态的所有持久性卷声明的存储请求总和不能超过这个值。 |
| 项目中可以存在的持久性卷声明的总数。 |
| 在处于任何状态且具有匹配存储类的所有持久性卷声明中,存储请求总和不能超过这个值。 |
| 项目中可以存在的具有匹配存储类的持久性卷声明的总数。 |
资源名称 | 描述 |
---|---|
| 项目中可以存在的处于非终端状态的 Pod 总数。 |
| 项目中可以存在的复制控制器的总数。 |
| 项目中可以存在的资源配额总数。 |
| 项目中可以存在的服务总数。 |
| 项目中可以存在的 secret 的总数。 |
|
项目中可以存在的 |
| 项目中可以存在的持久性卷声明的总数。 |
| 项目中可以存在的镜像流的总数。 |
您可以在创建配额时使用 count/<resource>.<group>
语法为这些标准命名空间资源类型配置对象数配额。
$ oc create quota <name> --hard=count/<resource>.<group>=<quota> 1
- 1
<resource>
是资源名称,<group>
则是 API 组(若适用)。使用oc api-resources
命令可以列出资源及其关联的 API 组。
17.2.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' openshift.com/gpu-accelerator=true Capacity: nvidia.com/gpu: 2 Allocatable: nvidia.com/gpu: 2 nvidia.com/gpu 0 0
本例中有 2 个 GPU 可用。
在命名空间
nvidia
中设置配额。本例中配额为1
:# cat gpu-quota.yaml apiVersion: v1 kind: ResourceQuota metadata: name: gpu-quota namespace: nvidia spec: hard: requests.nvidia.com/gpu: 1
创建配额:
# oc create -f gpu-quota.yaml resourcequota/gpu-quota created
验证命名空间是否设置了正确的配额:
# oc describe quota gpu-quota -n nvidia Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 0 1
运行一个请求单个 GPU 的 Pod:
# oc create pod gpu-pod.yaml
apiVersion: v1 kind: Pod metadata: generateName: gpu-pod- namespace: nvidia spec: restartPolicy: OnFailure containers: - name: rhel7-gpu-pod image: rhel7 env: - name: NVIDIA_VISIBLE_DEVICES value: all - name: NVIDIA_DRIVER_CAPABILITIES value: "compute,utility" - name: NVIDIA_REQUIRE_CUDA value: "cuda>=5.0" command: ["sleep"] args: ["infinity"] resources: limits: nvidia.com/gpu: 1
验证 Pod 是否在运行:
# oc get pods NAME READY STATUS RESTARTS AGE gpu-pod-s46h7 1/1 Running 0 1m
验证配额计数器
Used
是否正确:# oc describe quota gpu-quota -n nvidia Name: gpu-quota Namespace: nvidia Resource Used Hard -------- ---- ---- requests.nvidia.com/gpu 1 1
尝试在
nvidia
命名空间中创建第二个 GPU Pod。从技术上讲,该节点支持 2 个 GPU,因为它有 2 个 GPU:# oc create -f gpu-pod.yaml 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
应该会显示此 Forbidden 错误消息,因为您有设为 1 个 GPU 的配额,但这一 Pod 试图分配第二个 GPU,而这超过了配额。