配额与命名空间管理¶
gpuctl 通过 Kubernetes ResourceQuota 机制,为每个命名空间(团队/用户)设置 CPU、内存、GPU 资源上限,防止资源滥用,实现多租户隔离。
核心概念¶
- 命名空间(Namespace):K8s 的逻辑隔离单元,每个团队/用户分配一个独立命名空间
- 配额(Quota):限制命名空间内可使用的最大资源量(CPU/内存/GPU/Pod 数)
- 自动创建:通过
gpuctl create -f quota.yaml会自动创建命名空间 + 资源配额
创建配额¶
配额 YAML 格式¶
team-quota.yaml
kind: quota
version: v0.1
quota:
name: team-resource-quota
description: "各团队资源配额配置"
namespace:
team-alice: # 命名空间名称(自动创建)
cpu: 16 # CPU 核数上限
memory: 64Gi # 内存上限
gpu: 8 # GPU 数量上限
team-bob:
cpu: 8
memory: 32Gi
gpu: 4
team-charlie:
cpu: 4
memory: 16Gi
gpu: 2
平台会自动:
1. 创建 team-alice、team-bob、team-charlie 三个命名空间
2. 在每个命名空间内创建对应的 ResourceQuota
3. 标记命名空间为 gpuctl 管理(label runwhere.ai/namespace=true)
查询配额¶
输出示例:
NAMESPACE CPU (USED/TOTAL) MEMORY (USED/TOTAL) GPU (USED/TOTAL) STATUS
team-alice 4/16 12Gi/64Gi 2/8 Active
team-bob 2/8 8Gi/32Gi 1/4 Active
team-charlie 0/4 0/16Gi 0/2 Active
default - - - Active
在指定命名空间提交任务¶
配额创建后,团队成员在提交任务时通过 -n 指定命名空间:
# Alice 团队提交训练任务
gpuctl create -f training-job.yaml -n team-alice
# 查看 Alice 团队的任务
gpuctl get jobs -n team-alice
查询命名空间¶
输出示例:
输出示例:
Name: team-alice
Status: Active
Age: 5d
Labels:
runwhere.ai/namespace: true
Quota:
CPU: 4/16
Memory: 12Gi/64Gi
GPU: 2/8
删除配额¶
# 通过 YAML 文件删除(批量删除 YAML 中定义的所有配额)
gpuctl delete -f team-quota.yaml
# 删除指定命名空间的配额
gpuctl delete quota team-charlie
# 删除命名空间(同时删除其中所有资源)
gpuctl delete ns team-charlie
# 强制删除(跳过确认提示)
gpuctl delete ns team-charlie --force
删除命名空间
删除命名空间会删除该命名空间内的所有资源(包括正在运行的任务、Service 等),此操作不可逆。请先确认已备份重要数据。
只能管理 gpuctl 创建的命名空间
gpuctl 只管理带有 runwhere.ai/namespace=true 标签的命名空间(由 gpuctl 创建),以及 default 命名空间。kube-system 等系统命名空间不在管理范围内。