Resource Quota
参考官方 Kubernetes 文档:Resource Quotas
目录
理解资源请求与限制
用于限制特定命名空间可用的资源。该命名空间中所有 Pod 的总资源使用量(不包括处于 Terminating
状态的 Pod)不得超过配额。
资源请求(Resource Requests):定义容器所需的最小资源(如 CPU、内存),指导 Kubernetes 调度器将 Pod 安排到具有足够容量的节点上。
资源限制(Resource Limits):定义容器可消耗的最大资源,防止资源耗尽,确保集群稳定。
配额
资源配额
如果某资源标记为 Unlimited
,则不强制执行显式配额,但使用量不得超过集群的可用容量。
资源配额用于跟踪命名空间内的累计资源消耗(例如容器限制、新建 Pod 或 PVC)。
支持的配额类型
字段 | 描述 |
---|
资源请求 | 命名空间内所有 Pod 的总请求资源: |
资源限制 | 命名空间内所有 Pod 的总限制资源: |
Pod 数量 | 命名空间允许的最大 Pod 数量。 |
注意:
- 命名空间配额来源于项目分配的集群资源。如果任何资源的可用配额为 0,则命名空间创建将失败。请联系管理员。
Unlimited
表示该命名空间可使用项目剩余的该资源类型的集群资源。
YAML 文件示例
# example-resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
namespace: <example>
spec:
hard:
limits.cpu: "20"
limits.memory: 20Gi
pods: "500"
requests.cpu: "2"
requests.memory: 2Gi
使用 CLI 创建资源配额
通过 YAML 文件创建
kubectl apply -f example-resourcequota.yaml
直接通过命令行创建
kubectl create resourcequota example-resourcequota --namespace=<example> --hard=limits.cpu=20,limits.memory=20Gi,pods=500
存储配额
配额类型:
- 全部:命名空间内 PVC 的总存储容量。
- 存储类:特定存储类的 PVC 总存储容量。
注意:确保存储类已预先分配给包含该命名空间的项目。
硬件加速器资源配额
前提条件
操作步骤
扩展资源配额通过 ConfigMap 定义。如果缺少 ConfigMap,则该资源类别不会出现。
添加自定义设备 ConfigMap 后,创建如下示例的资源配额资源。
YAML 文件示例
# example-resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
namespace: <example>
spec:
hard:
requests.nvidia.com/gpu: "4" #this is your Hardware accelerator ConfigMap Resource Key
其他配额
自定义配额名称格式必须符合以下规范:
- 如果自定义配额名称不包含斜杠(/):必须以字母或数字开头和结尾,可包含字母、数字、连字符(-)、下划线(_)或点(.),形成最长 63 字符的合格名称。
- 如果自定义配额名称包含斜杠(/):名称分为两部分:前缀和名称,格式为 prefix/name。前缀必须是有效的 DNS 子域名,名称必须符合合格名称的规则。
- DNS 子域名:
- 标签:必须以小写字母或数字开头和结尾,可包含连字符(-),但不能全部由连字符组成,最长 63 字符。
- 子域名:扩展标签规则,允许多个标签通过点(.)连接形成子域名,最长 253 字符。