资源配额

参考官方 Kubernetes 文档:Resource Quotas

目录

理解资源请求与限制

用于限制特定命名空间可用的资源。该命名空间内所有 Pod(不包括处于 Terminating 状态的 Pod)使用的资源总量不得超过配额。

资源请求(Resource Requests):定义容器所需的最小资源(如 CPU、内存),指导 Kubernetes 调度器将 Pod 安排到具有足够容量的节点上。

资源限制(Resource Limits):定义容器可使用的最大资源,防止资源耗尽,确保集群稳定。

配额

资源配额

如果某资源标记为 Unlimited,则不强制执行显式配额,但使用量不能超过集群的可用容量。

资源配额用于跟踪命名空间内资源的累计消耗(如容器限制、新建 Pod 或 PVC)。

支持的配额类型

字段描述
资源请求命名空间内所有 Pod 的总请求资源:
  • CPU
  • 内存
资源限制命名空间内所有 Pod 的总限制资源:
  • CPU
  • 内存
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 字段说明

字段描述
data.dataType数据类型(例如 vGPU)。
data.defaultValue默认值(为空表示无默认值)。
data.descriptionEn英文提示文本(鼠标悬停时显示)。
data.descriptionZh中文提示文本(鼠标悬停时显示)。
data.excludeResources互斥资源(逗号分隔)。
data.group资源组(例如 MPS)。
data.groupI18nUI 下拉菜单中显示的英文/中文组名。
data.key指定键的值。一个配置字典只能描述一个键。
data.labelEn/data.labelZh资源的英文/中文名称,可在对应配额类型的下拉选项中查看和选择。该字段功能与 data.groupI18n 相同,但仅适用于同一资源只有单一值的情况,确保兼容旧版本配置字典(ConfigMap)。
data.limits是否配置资源限制。有效值包括:disabled 表示不能配置限制,required 表示必须输入,optional 表示可选输入。
data.requests是否配置资源请求。有效值包括:disabled 表示不能配置请求,required 表示必须输入,optional 表示可选输入,fromLimits 表示使用与限制相同的配置。
data.relatedResources关联资源。该字段预留,当前不可用。
data.resourceUnit资源单位(例如 coresGiB)。不支持中文输入。
data.runtimeClassName运行时类别(默认 GPU 为 nvidia)。
metadata.labels必填标签:
  • features.cpaas.io/type: CustomResourceLimitation
  • features.cpaas.io/group: <groupName>
  • features.cpaas.io/enabled: truefalse,该标签必填,表示是否启用,默认值为 true。
metadata.name格式为 cf-crl-<*groupName*>-<*name*>,其中
  • cf-crl 为固定字段,不可更改。
  • groupName 为对应资源组名称,如 gpu-manager、galaxy 等。
  • name 为资源名称:
    • 资源名称可以是标准资源类型名称,如 cpu、memory、pods 等。标准资源名称必须符合 Kubernetes 的合格名称规则,且必须存在于 Kubernetes 定义的标准资源类型中。
    • 资源名称也可以是以特定前缀开头的特殊资源类型,如:hugepages-requests.hugepages-
metadata.namespace必须为 kube-public

其他配额

自定义配额名称格式必须符合以下规范:

  • 如果自定义配额名称不包含斜杠(/):必须以字母或数字开头和结尾,中间可包含字母、数字、连字符(-)、下划线(_)或点(.),形成最长 63 字符的合格名称。
  • 如果自定义配额名称包含斜杠(/):名称分为前缀和名称两部分,格式为:prefix/name。前缀必须是有效的 DNS 子域名,名称必须符合合格名称规则。
  • DNS 子域名:
    • 标签:必须以小写字母或数字开头和结尾,可包含连字符(-),但不能全部由连字符组成,最长 63 字符。
    • 子域名:扩展标签规则,允许多个标签通过点(.)连接形成子域名,最长 253 字符。