资源配额

参考官方 Kubernetes 文档:资源配额

资源请求与资源限制

此功能用于限制 指定命名空间 可用的资源。命名空间内所有 Pods 的总资源使用情况(除非处于非终止状态的 Pods)不能超过此值。

  • 资源请求 定义容器所需的最小资源量(如 CPU、内存),以指导 Kubernetes 调度器将 Pod 安排到具有足够资源的节点上。
  • 资源限制 设置容器可以消耗的最大资源量,以防止资源耗尽并确保系统稳定性。

配额

资源配额

无限制意味着输入和使用没有限制,但实际使用量不能超过集群中相应资源的可用值。

每个在命名空间下指定的容器计算资源限制(limits),或每个新增的 Pod 或 PVC,将消耗在此处设置的配额。

包括以下资源配额

字段描述
资源请求指定资源请求的配额值。
  • CPU
  • 内存
资源限制指定资源限制的配额值。
  • CPU
  • 内存
Pod 数量指定 Pod 的配额数量。

注意:

  • 命名空间的资源配额来源于集群为项目分配的配额。对于任何给定资源,最大配额由项目中的未使用配额决定。如果任何资源的可用量为 0,则无法创建命名空间。请联系平台管理员以获取支持。
  • GPU 资源配额只能在集群中部署了 GPU(vGPU 或 pGPU)资源时进行配置。当使用 vGPU 资源时,vMemory 配额也可进行配置。 GPU 单位:100 个虚拟核心等于 1 个物理核心(1 pGPU = 1 core = 100 vGPU),pGPU 以整数单位分配。1 单位的内存等于 256 MiB,1024 MiB = 1 GiB。
  • 如果未为某一特定资源指定配额,则默认为无限制。这意味着命名空间可以根据需要使用分配给项目的集群中对应类型的可用资源,没有任何限制。

存储配额

配额类型

  • 全部:此命名空间中所有持久卷声明(PVC)的总请求存储容量不能超过该值。
  • 存储类:在此命名空间中,选择的存储类关联的所有持久卷声明(PVC)的总请求存储容量不能超过该值。

注意:请提前将存储类分配给命名空间所在的项目。

扩展资源配额

扩展资源中的 配额类型 从配置字典(ConfigMap)中获取,若不存在对应配置字典,则此分类不显示。

配置字典字段说明

字段描述
data.dataType指定值的类型。
data.defaultValue设置默认值。若该字段不存在或值为空,则表示无默认值。
data.descriptionEn英文提示信息,可单击值右侧图标进行查看。
data.descriptionZh中文提示信息,可单击值右侧的图标进行查看。
data.excludeResources互斥的资源。此字段用于添加不能同时配置的资源,多个资源间使用 , 进行分隔。
data.group组别
data.groupI18n组别的中英文名称,可在配额类型对应的下拉选项中进行查看和选择。适用于同一个资源存在一个或多个值的情况。
data.key指定键的值,一个配置字典只能描述一个 key。
data.labelEn/data.labelZh资源的英文/中文名称,可在配额类型对应的下拉选项中进行查看和选择。此字段和 data.groupI18n 字段的功能相同,但仅适用于同一个资源只有一个值的情况,可以兼容旧版配置字典(ConfigMap)。
data.limits是否为资源配置 limits 值。可填的值包括:disabled 表示禁用,即不可为资源配置 limits 值,required 表示必须输入,optional 表示可选输入。
data.requests是否为资源配置 requests 值。可填的值包括:disabled 表示禁用,即不可为资源配置 requests 值,required 表示必须输入,optional 表示可选输入,fromLimits 表示和 limits 一样使用相同配置。
data.relatedResources关联的资源。此字段为预留字段,目前不可使用。
data.resourceUnit资源的单位,需输入英文字母,暂不支持输入中文。
data.runtimeClassName需要的运行时类,默认为空, 可选值 nvidia。
metadata.labels
  • features.cpaas.io/type: CustomResourceLimitation,此 Label 为必填项,不可更改。
  • features.cpaas.io/group: <*groupName*>,此 Label 为必填项,需将 groupName 修改为对应组别。
  • features.cpaas.io/enabled: "true",此 Label 为必填项,表示是否启用,默认为 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 命名空间,不可更改。

配置字典示例

此文档仅提供了物理 GPU、GPU Manager 核心数及显存、MPS 核心数及显存的 YAML 配置示例,若需使用其他资源,请参考上述字段说明进行自定义。

  • 物理 GPU 配置示例

    apiVersion: v1
    data:
      dataType: integer
      defaultValue: "1"
      descriptionEn: GPU quantity
      descriptionZh: GPU 数量
      excludeResources: nvidia.com/mps-core,nvidia.com/mps-memory,tencent.com/vcuda-core,tencent.com/vcuda-memory
      group: nvidia-device-plugin
      groupI18n: '{"zh": "pGPU", "en": "pGPU"}'
      key: nvidia.com/gpu
      labelEn: GPU core
      labelZh: 物理 GPU
      limits: optional
      relatedResources: ""
      requests: disabled
      resourceUnit: count
      runtimeClassName: nvidia
    kind: ConfigMap
    metadata:
      labels:
        features.cpaas.io/enabled: "true"
        features.cpaas.io/group: nvidia-device-plugin
        features.cpaas.io/type: CustomResourceLimitation
      name: cf-crl-nvidia-device-plugin
      namespace: kube-public
    
  • GPU Manager 配置示例

    • GPU Manager 核心数:

      apiVersion: v1
      data:
        dataType: integer
        defaultValue: "20"
        descriptionEn: "GPU vcore count, 100 vcore equals 1 GPU core"
        descriptionZh: 虚拟 GPU 核心数,100个虚拟核心等于 1 个 GPU 物理核心
        excludeResources: nvidia.com/gpu,nvidia.com/mps-core,nvidia.com/mps-memory
        group: gpu-manager
        groupI18n: '{"zh": "GPU Manager", "en": "GPU Manager"}'
        key: tencent.com/vcuda-core
        labelEn: GPU vcore
        labelZh: 虚拟 GPU
        limits: optional
        relatedResources: tencent.com/vcuda-memory
        requests: disabled
        resourceUnit: vcore
        runtimeClassName: ""
      kind: ConfigMap
      metadata:
        labels:
          device-recource.cpaas.io/config: "true"
          features.cpaas.io/enabled: "true"
          features.cpaas.io/group: gpu-manager
          features.cpaas.io/type: CustomResourceLimitation
        name: demo-gpu-manager-core
        namespace: kube-public
      
    • GPU Manager 显存:

      apiVersion: v1
      data:
        dataType: integer
        defaultValue: "20"
        descriptionEn: GPU vmemory, 256 Mi physical memory per Unit
        descriptionZh: 虚拟 GPU 显存,每单位等于 256Mi 显存
        excludeResources: nvidia.com/gpu,nvidia.com/mps-core,nvidia.com/mps-memory
        group: gpu-manager
        groupI18n: '{"zh": "GPU Manager", "en": "GPU Manager"}'
        key: tencent.com/vcuda-memory
        labelEn: GPU vmemory
        labelZh: 显存
        limits: optional
        relatedResources: tencent.com/vcuda-core
        requests: disabled
        resourceUnit: unit
        runtimeClassName: ""
      kind: ConfigMap
      metadata:
        labels:
          device-recource.cpaas.io/config: "true"
          features.cpaas.io/enabled: "true"
          features.cpaas.io/group: gpu-manager
          features.cpaas.io/type: CustomResourceLimitation
        name: demo-gpu-manager-memory
        namespace: kube-public
      
  • MPS 配置示例

    • MPS 核心数:

      apiVersion: v1
      data:
        dataType: integer
        defaultValue: "20"
        descriptionEn: "MPS GPU core count, 100 MPS core equals 1 GPU core"
        descriptionZh: MPS GPU 核心数,100个 MPS 核心等于 1 个 GPU 物理核心
        excludeResources: nvidia.com/gpu,tencent.com/vcuda-core,tencent.com/vcuda-memory
        group: nvidia-mps-device-plugin
        groupI18n: '{"zh": "MPS", "en": "MPS"}'
        key: nvidia.com/mps-core
        labelEn: MPS GPU core
        labelZh: MPS GPU
        limits: optional
        relatedResources: nvidia.com/mps-memory
        requests: disabled
        resourceUnit: vcore
        runtimeClassName: nvidia
      kind: ConfigMap
      metadata:
        labels:
          features.cpaas.io/enabled: "true"
          features.cpaas.io/group: nvidia-mps-device-plugin
          features.cpaas.io/type: CustomResourceLimitation
        name: cf-crl-nvidia-mps-device-plugin-core
        namespace: kube-public
      
    • MPS 显存:

      apiVersion: v1
      data:
        dataType: integer
        defaultValue: "1"
        descriptionEn: MPS GPU memory, 1 Gi physical memory per Unit
        descriptionZh: MPS GPU 显存,每单位等于 1Gi 显存
        excludeResources: nvidia.com/gpu,tencent.com/vcuda-core,tencent.com/vcuda-memory
        group: nvidia-mps-device-plugin
        groupI18n: '{"zh": "MPS", "en": "MPS"}'
        key: nvidia.com/mps-memory
        labelEn: MPS GPU memory
        labelZh: MPS 显存
        limits: optional
        relatedResources: nvidia.com/mps-core
        requests: disabled
        resourceUnit: unit
        runtimeClassName: nvidia
      kind: ConfigMap
      metadata:
        labels:
          features.cpaas.io/enabled: "true"
          features.cpaas.io/group: nvidia-mps-device-plugin
          features.cpaas.io/type: CustomResourceLimitation
        name: cf-crl-nvidia-mps-device-plugin-memory
        namespace: kube-public
      

其他配额

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

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