轩辕镜像 官方专业版
轩辕镜像
专业版
轩辕镜像 官方专业版
轩辕镜像
专业版
首页个人中心搜索镜像
交易
充值流量¥8起我的订单
文档
工具
提交工单页面收录
ghcr.io/run-ai/fake-gpu-operator/kwok-gpu-device-plugin

ghcr.io/run-ai/fake-gpu-operator/kwok-gpu-device-plugin:0.0.0-41918df

ghcr.iolinux/amd640.0.0-41918df大小: 69.31 MB更新于 2026年10月7日
让 AI 帮你使用轩辕镜像? · 展开查看说明 · 点击收起说明

如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。

只需在 AI 对话中先发送下面这段话即可:

请先阅读并遵守:https://xuanyuan.cloud/agents.md

未读文档前不要生成 pull 命令或排错方案。

查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。

Fake GPU Operator

🎮 无需实际硬件,即可在 Kubernetes 中模拟 NVIDIA GPU

[!NOTE] 容器镜像与 Helm Chart 现已托管在 ghcr.io/run-ai/fake-gpu-operator。

ghcr.io/run-ai/fake-gpu-operator

🚀 概览

Fake GPU Operator 是一款轻量工具,可在 Kubernetes 集群中无需物理硬件即可模拟 NVIDIA GPU。它为开发者和测试人员提供以下核心能力:

  • 在仅搭载 CPU 的节点上模拟虚拟 GPU
  • 支持基础特性发现与 NVIDIA MIG 功能
  • 生成用于 GPU 监控的 Prometheus 指标
  • 降低测试环境的硬件成本

适用场景包括:

  • 测试 GPU 依赖型应用
  • CI/CD 流水线测试
  • 开发环境搭建
  • 学习与实验

✨ 特性

  • 基础 GPU 拓扑模拟
  • 发布 NUMA 拓扑信息(NodeResourceTopology),支持 NUMA 亲和调度 NodeResourceTopology
  • 生成 Prometheus 指标
  • 基础 NVIDIA MIG 资源调度(暂不支持指标监控)
  • 可配置 GPU 型号与显存
  • 基础 nvidia-smi 模拟
  • 可选的模拟 GPU 池 GPU 分片就绪能力

🏃 快速开始

前置条件

  • 未部署 NVIDIA GPU Operator 的 Kubernetes 集群
  • Helm 3.x
  • kubectl CLI 工具

1. 为节点添加标签

kubectl label node run.ai/simulated-gpu-node-pool=default

2. 安装 Operator

helm upgrade -i gpu-operator oci://ghcr.io/run-ai/fake-gpu-operator/fake-gpu-operator --namespace gpu-operator --create-namespace --version

3. 部署测试工作负载

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
  - name: gpu-container
    image: nvidia/cuda-vector-add:v0.1
    resources:
      limits:
        nvidia.com/gpu: 1

🛠️ 配置

GPU 拓扑

在 values.yaml 中自定义 GPU 配置:

values.yaml

topology:
  nodePools:
    default:
      gpuProduct: Tesla-K80
      gpuCount: 2
      gpuMemory: 11441

GPU 利用率控制

通过 Pod 注解控制 GPU 利用率指标:

metadata:
  annotations:
    run.ai/simulated-gpu-utilization: "10-30" # 模拟 10-30% 的 GPU 使用率

Knative 推理工作负载集成

该 Operator 针对基于 Knative 的推理工作负载提供特殊处理:GPU 利用率不再采用静态赋值,而是根据实际请求流量动态计算。

工作原理

当 Pod 被识别为推理工作负载(通过 workloadKind: "InferenceWorkload" 标签或 PodGroup 的 priorityClassName: "inference" 标识)时,Operator 将执行以下操作:

workloadKind: "InferenceWorkload" priorityClassName: "inference"

  • 使用 revision_app_request_count 指标从 Prometheus 查询实时请求数据 revision_app_request_count
  • 基于请求速率计算利用率:rate(revision_app_request_count[1m]) rate(revision_app_request_count[1m])
  • 更新 GPU 指标以反映真实推理负载

该机制可生成与推理流量模式高度匹配的高仿真 GPU 利用率指标。

配置

在 Helm Values 中配置 Prometheus 连接地址:

prometheus:
  url: http://prometheus-operated.runai:9090 # 默认地址

如需配合端口转发进行本地开发,可使用以下配置:

prometheus:
  url: http://localhost:9090

示例

apiVersion: v1
kind: Pod
metadata:
  name: inference-pod
  labels:
    workloadKind: "InferenceWorkload" # 启用 Knative 动态利用率统计
spec:
  containers:
  - name: model-server
    image: my-inference-server:latest
    resources:
      limits:
        nvidia.com/gpu: 1

当请求流入该推理 Pod 时,GPU 利用率指标将自动同步 Knative 上报的实际请求速率。

支持的 Knative 工作负载类型:

  • workloadKind: "InferenceWorkload" - 单节点推理,对接 Knative 指标 workloadKind: "InferenceWorkload"
  • workloadKind: "DistributedWorkload" - 分布式推理,对接 Knative 指标 workloadKind: "DistributedWorkload"

Mock 后端(真实 NVML 接口)

绝大多数节点池使用 fake 后端,由 Fake GPU Operator 自带的 device-plugin 对外通告虚拟的 nvidia.com/gpu 资源。

fake nvidia.com/gpu

将节点池切换至 mock 后端可实现:

mock

  • 在模拟 GPU 上运行上游官方 NVIDIA gpu-operator 组件
  • 兼容直接调用 NVML 的应用,例如 nvidia-smi 或 CUDA 设备发现逻辑 nvidia-smi

该模式会在节点池的所有节点上安装 NVIDIA 官方 nvml-mock 组件,以特权 Pod 形式运行并向主机 /var/lib/nvml-mock 路径写入配置文件,需按节点池单独手动开启:

nvml-mock /var/lib/nvml-mock

topology:
  nodePools:
    my-mock-pool:
      gpu:
        backend: mock
        profile: a100 # 可选 h100、b200、gb200、l40s、t4
      gpuOperator: { enabled: true } # 启用 device-plugin 路径;需同时配置 gpu-operator.toolkit.enabled
      # nvidiaDraDriver: { enabled: true } # 可改用该更轻量的纯 DRA 路径

更多预置 Profile 说明、注意事项(例如 ClusterPolicy 会显示非核心的 NotReady 状态)与清理指引请参考 docs/mock-backend.md。

ClusterPolicy NotReady

NUMA 拓扑(NodeResourceTopology)

NUMA 亲和调度器(例如 KAI-Scheduler)会读取每个节点对应的 NodeResourceTopology(NRT)对象,完成跨 NUMA 区域的 GPU 工作负载放置。Fake GPU Operator 无需真实多插槽硬件即可发布该类对象:默认功能处于关闭状态,需全局开启后再为各节点池配置 numa 字段:

NodeResourceTopology numa

statusUpdater:
  nodeResourceTopology:
    enabled: true # 默认关闭
    # installCRD: false # 若集群中已存在 NRT CRD(例如由 NFD/KAI 安装)则设置为 false

topology:
  nodePools:
    default:
      gpu: { backend: fake, profile: a100 }
      numa:
        zones: 2 # 节点池中的 GPU 将被拆分到 node-0/node-1 两个 NUMA 区域
        distances: { self: 10, remote: 21 }

开启后,Helm Chart 将自动部署 NRT CRD(集群中已有该 CRD 时设置 installCRD: false 即可),并为状态更新组件授予所需 RBAC 权限。完整配置参考、发布资源说明与注意事项(可用资源静态定义、可能与 NFD topology-updater 冲突)请查看 docs/fake-nrt.md。

installCRD: false available

模拟 GPU 分片就绪能力

状态更新组件会在 legacy nvidia.com/gpu 资源变为可分配状态后,为 fake 后端节点池的节点打上 gpu-fractioning.nvidia.com/Ready 条件标识;若该资源被移除,该标识也会同步自动清除。该条件不会在 NVML mock 节点池上生成,同时 Operator 不会修改其他控制器写入的同类条件。DRA 资源分配流程不依赖该条件:该标识仅用于表示模拟调度就绪,并不提供实际的 GPU 分片资源强制隔离能力。

gpu-fractioning.nvidia.com/Ready fake nvidia.com/gpu mock

🔌 动态资源分配(DRA)

面向 Kubernetes 1.31+ 版本,你可以使用 DRA 插件替代传统 legacy device plugin。

前置条件

按需在集群中开启 DynamicResourceAllocation 特性门控与 resource.k8s.io/v1 API。

在 Helm Chart 中启用 DRA 插件

# values.yaml
draPlugin:
  enabled: true
devicePlugin:
  enabled: false # 禁用 legacy device plugin

通过 DRA 部署

apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: gpu-claim
spec:
  spec:
    devices:
      requests:
      - name: gpu
        exactly:
          deviceClassName: gpu.nvidia.com
---
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
  - name: main
    image: ubuntu:22.04
    resources:
      claims:
      - name: gpu
        resourceClaims:
        - name: gpu
          resourceClaimTemplateName: gpu-claim

更多示例请参见 test/e2e/fixtures/manifests/ 目录。

🔐 计算域 DRA(安全工作负载隔离)

Fake GPU Operator 支持模拟 NVIDIA 计算域,无需真实 NVIDIA 硬件即可实现安全的工作负载隔离。计算域提供 IMEX 通道模拟,适用于多节点 GPU 工作负载场景。

前置条件

  • 已启用 DynamicResourceAllocation 特性门控的 Kubernetes 1.31+ 集群
  • Fake GPU Operator 中已启用 DRA 插件

在 Helm Chart 中启用计算域功能

# values.yaml
computeDomainController:
  enabled: true
computeDomainDraPlugin:
  enabled: true
draPlugin:
  enabled: true
devicePlugin:
  enabled: false # 使用 DRA 时需禁用旧版插件

部署启用计算域的实例

首先创建一个 ComputeDomain 资源:

apiVersion: resource.nvidia.com/v1beta1
kind: ComputeDomain
metadata:
  name: my-compute-domain
  namespace: default
spec:
  numNodes: 1
  channel:
    allocationMode: Single # 设为 "All" 则分配所有通道
  resourceClaimTemplate:
    name: my-compute-domain

compute-domain-controller 会自动为该 ComputeDomain 创建对应的 ResourceClaimTemplate。

接下来部署使用计算域的 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: compute-domain-pod
  namespace: default
spec:
  containers:
  - name: main
    image: ubuntu:22.04
    command: ["sleep", "infinity"]
    resources:
      claims:
      - name: compute-domain
        resourceClaims:
        - name: compute-domain
          resourceClaimTemplateName: my-compute-domain

验证计算域状态

# 查看 ComputeDomain 状态
kubectl get computedomain my-compute-domain -o yaml

# 确认状态显示为 Ready 且已分配节点
# status:
#   status: Ready
#   nodes:
#   - name:
#     status: Ready

🎭 KWOK 集成(模拟节点)

KWOK(Kubernetes WithOut Kubelet)是一套工具集,无需运行真实 kubelet 进程即可模拟数千个 Kubernetes 节点。与 Fake GPU Operator 结合使用时,可完全不依赖硬件搭建大规模 GPU 集群模拟环境,非常适合在规模化场景下测试调度器、自动扩缩容组件与资源管理机制。

为什么选择 KWOK + Fake GPU Operator 组合?

  • 规模测试:模拟数百个 GPU 节点,验证调度器运行行为
  • 成本优化:无需云服务器或物理硬件投入
  • 快速迭代:数秒内即可完成模拟集群的启动/销毁
  • 适配 CI/CD:基于真实集群拓扑运行端到端测试

前置条件

在集群中安装 KWOK 控制器:

KWOK_VERSION=v0.7.0
kubectl apply -f "https://github.com/kubernetes-sigs/kwok/releases/download/${KWOK_VERSION}/kwok.yaml"
kubectl apply -f "https://github.com/kubernetes-sigs/kwok/releases/download/${KWOK_VERSION}/stage-fast.yaml"

在 Helm values 配置中启用 kwok-dra-plugin:

# values.yaml
kwokDraPlugin:
  enabled: true
draPlugin:
  enabled: true

创建模拟 GPU 节点

apiVersion: v1
kind: Node
metadata:
  annotations:
    kwok.x-k8s.io/node: fake
  labels:
    type: kwok
    run.ai/simulated-gpu-node-pool: default
  name: kwok-gpu-node-1
spec:
  taints:
  - effect: NoSchedule
    key: kwok.x-k8s.io/node
    value: fake
status:
  allocatable:
    cpu: "32"
    memory: 128Gi
    pods: "110"
  capacity:
    cpu: "32"
    memory: 128Gi
    pods: "110"

status-updater 会自动为该节点创建拓扑 ConfigMap,kwok-dra-plugin 会生成包含已配置 GPU 资源的 ResourceSlice。

在 KWOK 节点上调度 GPU Pod

apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: gpu-claim
spec:
  spec:
    devices:
      requests:
      - name: gpu
        exactly:
          deviceClassName: gpu.nvidia.com
---
apiVersion: v1
kind: Pod
metadata:
  name: kwok-gpu-pod
spec:
  nodeSelector:
    type: kwok
  tolerations:
  - key: kwok.x-k8s.io/node
    operator: Equal
    value: fake
    effect: NoSchedule
  containers:
  - name: main
    image: ubuntu:22.04
    command: ["sleep", "infinity"]
    resources:
      claims:
      - name: gpu
        resourceClaims:
        - name: gpu
          resourceClaimTemplateName: gpu-claim

Pod 将被“调度”到 KWOK 节点上并显示为 Running 状态(由 KWOK 模拟完整 Pod 生命周期),对应的 ResourceClaim 会从模拟 GPU 的 ResourceSlice 中完成资源分配。

验证部署结果

# 检查 KWOK 节点状态是否为 Ready
kubectl get nodes -l type=kwok

# 检查 ResourceSlice 是否已成功创建
kubectl get resourceslices | grep kwok

# 确认 Pod 已在 KWOK 节点上运行
kubectl get pod kwok-gpu-pod -o wide

🔀 真实 GPU 节点与模拟 GPU 节点混合部署

你可以在同一集群中同时运行 Fake GPU Operator 和真实的 NVIDIA GPU Operator:真实 GPU 节点完全由官方 Operator 管理,新增模拟 GPU 节点用于规模测试与调度逻辑验证。

Fake GPU Operator 默认可作为官方 Operator 的直接替代方案,若要实现二者共存,必须满足以下两点:(1)将 Fake GPU Operator 安装在独立的命名空间下(不能使用 gpu-operator 命名空间);(2)禁用会与官方 Operator 的节点选择器/集群级资源发生冲突的组件:

# mixed-mode-values.yaml — 与真实 NVIDIA GPU Operator 共存配置
devicePlugin: { enabled: false } # 节点选择器会与真实 GPU 节点上的 device-plugin 冲突
statusExporter: { enabled: false } # 节点选择器会与真实 GPU 节点上的 dcgm-exporter 冲突
runtimeClass: { enabled: false } # 集群级 RuntimeClass/nvidia 资源已被官方 Operator 占用

在专属命名空间中安装 Fake GPU Operator:

helm upgrade -i fake-gpu-operator oci://ghcr.io/run-ai/fake-gpu-operator/fake-gpu-operator \
--namespace fake-gpu-operator --create-namespace \
--version <版本号> -f mixed-mode-values.yaml

完成配置后:

  • 模拟 GPU 运行在 KWOK 节点上(详见上方 KWOK 集成章节)。它们的 nvidia.com/gpu 容量由集中式 kwok-gpu-device-plugin 发布,因此无需启用已被禁用的每节点 DaemonSet,同时 KWOK 节点的 NoSchedule 污点会阻止真实 Operator 的 DaemonSet 调度到模拟节点。
  • 真实 GPU 节点不会受到任何影响 — 只需避免为它们添加 run.ai/simulated-gpu-node-pool 标签即可。status-updater 仅会处理带有该标签的节点,真实硬件将完全由官方 Operator 独占管理。

🔍 故障排查

Pod 安全准入

为确保功能正常运行,请为 gpu-operator 命名空间配置 Pod Security Admission:

kubectl label ns gpu-operator pod-security.kubernetes.io/enforce=privileged

nvidia-smi 支持

该 Operator 会向 GPU Pod 中注入模拟的 nvidia-smi 工具。nvidia-smi 依赖 NODE_NAME 环境变量解析 Pod 的节点拓扑;device-plugin 和 DRA 驱动都会在资源分配阶段自动注入该变量,无需手动配置 Pod。

🤝 参与贡献

欢迎提交贡献!请随时提交 Pull Request。

📝 许可证

本项目采用 Apache License 2.0 许可证,详情请参阅 LICENSE 文件。

🙋 技术支持

  • 🐛 问题追踪器

项目仓库 README(补充)

Fake GPU Operator

🎮 无需物理硬件,即可在 Kubernetes 中模拟 NVIDIA GPU

[!NOTE] 容器镜像与 Helm Chart 现已托管在 ghcr.io/run-ai/fake-gpu-operator。

🚀 产品概述

Fake GPU Operator 是一款轻量工具,可在无需物理硬件的 Kubernetes 集群中模拟 NVIDIA GPU,为开发者和测试人员提供以下基础能力:

  • 在仅搭载 CPU 的节点上模拟虚拟 GPU
  • 支持基础特性发现与 NVIDIA MIG 功能模拟
  • 生成用于 GPU 监控的 Prometheus 指标
  • 降低测试环境的硬件采购成本

典型使用场景包括:

  • 测试 GPU 依赖型应用
  • CI/CD 流水线验证
  • 开发环境搭建
  • 技术学习与实验验证

✨ 功能特性

  • 基础 GPU 拓扑模拟
  • 发布 NUMA 拓扑信息(NodeResourceTopology),支持 NUMA 感知调度
  • 生成 Prometheus 监控指标
  • 基础 NVIDIA MIG 资源调度(暂不支持指标监控)
  • 支持自定义配置 GPU 型号与显存
  • 基础 nvidia-smi 模拟
  • 可选的模拟 GPU 分片就绪态能力,用于构建虚拟 GPU 资源池

🏃 快速开始

前置条件

  • 未部署 NVIDIA GPU Operator 的 Kubernetes 集群
  • Helm 3.x
  • kubectl 命令行工具

1. 为节点打标签

kubectl label node run.ai/simulated-gpu-node-pool=default

2. 安装 Operator

helm upgrade -i gpu-operator oci://ghcr.io/run-ai/fake-gpu-operator/fake-gpu-operator --namespace gpu-operator --create-namespace --version

3. 部署测试工作负载

apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
  - name: gpu-container
    image: nvidia/cuda-vector-add:v0.1
    resources:
      limits:
        nvidia.com/gpu: 1

🛠️ 配置说明

GPU 拓扑配置

在 values.yaml 中自定义 GPU 配置:

topology:
  nodePools:
    default:
      gpuProduct: Tesla-K80
      gpuCount: 2
      gpuMemory: 11441

GPU 利用率配置

通过 Pod 注解控制 GPU 利用率指标:

metadata:
  annotations:
    run.ai/simulated-gpu-utilization: "10-30" # 模拟 10%-30% 的 GPU 占用率

Knative 推理工作负载集成

该 Operator 针对 基于 Knative 的推理工作负载 提供特殊适配:GPU 利用率将根据实际请求流量动态计算,而非使用静态固定值。

工作原理

当 Pod 被识别为推理工作负载(满足携带标签 workloadKind: "InferenceWorkload",或 PodGroup 的 priorityClassName: "inference")时,Operator 会执行以下操作:

  1. 通过 revision_app_request_count 指标向 Prometheus 查询实时请求指标
  2. 基于请求速率计算利用率:计算规则为 rate(revision_app_request_count[1m])
  3. 更新 GPU 指标,还原真实的推理负载情况

该机制生成的 GPU 利用率指标完全贴合推理业务的流量变化特征。

配置方式

在 Helm Values 中配置 Prometheus 连接地址:

prometheus:
  url: http://prometheus-operated.runai:9090 # 默认地址

若通过端口转发进行本地开发,配置如下:

prometheus:
  url: http://localhost:9090

配置示例

apiVersion: v1
kind: Pod
metadata:
  name: inference-pod
  labels:
    workloadKind: "InferenceWorkload" # 启用 Knative 利用率动态计算
spec:
  containers:
  - name: model-server
    image: my-inference-server:latest
    resources:
      limits:
        nvidia.com/gpu: 1

当请求流量流入该推理 Pod 时,GPU 利用率指标将自动反映 Knative 上报的真实请求速率。

支持的 Knative 工作负载类型:

  • workloadKind: "InferenceWorkload" - 单节点推理,启用 Knative 指标采集
  • workloadKind: "DistributedWorkload" - 分布式推理,启用 Knative 指标采集

模拟后端(真实 NVML 接口)

绝大多数资源池使用 fake 后端:由 FGO 内置的 device-plugin 对外发布虚拟的 nvidia.com/gpu 资源。

将资源池切换为 mock 后端后,可实现以下能力:

  • 让官方上游 NVIDIA gpu-operator 组件基于模拟 GPU 运行
  • 兼容直接调用 NVML 的应用,例如 nvidia-smi 或 CUDA 设备发现流程

该模式会在资源池的节点上部署 NVIDIA 开源的 https://github.com/NVIDIA/k8s-test-infra/tree/main/deployments/nvml-mock 组件。组件需要运行特权 Pod 并向节点本地的 /var/lib/nvml-mock 路径写入文件,因此需按资源池单独开启:

topology:
  nodePools:
    my-mock-pool:
      gpu:
        backend: mock
        profile: a100 # 可选项:h100、b200、gb200、l40s、t4
      gpuOperator: { enabled: true } # 基于 device-plugin 路径部署;需同时设置 gpu-operator.toolkit.enabled
      # nvidiaDraDriver: { enabled: true } # 可替换为该轻量 DRA 专属路径

关于设备支持型号、已知问题(如非核心的 ClusterPolicy NotReady 状态提示)与清理说明,请参阅 docs/mock-backend.md。

NUMA 拓扑(NodeResourceTopology)

NUMA 感知调度器(例如 KAI-Scheduler)通过读取每个节点的 NodeResourceTopology(NRT)资源,实现 GPU 工作负载在 NUMA 节点间的调度。fake-gpu-operator 无需真实的多 Socket 硬件即可发布该拓扑信息——该功能默认关闭;安装时需单独开启,并为每个资源池添加 numa 配置块:

statusUpdater:
  nodeResourceTopology:
    enabled: true # 默认关闭
    # installCRD: false # 若集群已通过 NFD/KAI 部署 NRT CRD,可设置为该值

topology:
  nodePools:
    default:
      gpu: { backend: fake, profile: a100 }
      numa:
        zones: 2 # 该资源池的 GPU 将跨 node-0/node-1 两个 NUMA 节点分配
        distances: { self: 10, remote: 21 }

启用后,Helm Chart 会自动安装 NRT CRD(若集群已存在该 CRD,可将 installCRD 设为 false),并为 status-updater 组件分配对应 RBAC 权限。完整配置参考、发布资源详情与已知限制(静态 available 字段、与 NFD topology-updater 的潜在冲突)请参阅 docs/fake-nrt.md。

模拟 GPU 分片就绪态能力

对于使用 fake 后端的资源池节点,status-updater 会在传统 nvidia.com/gpu 资源变为可分配状态后,自动为节点添加 gpu-fractioning.nvidia.com/Ready 状态标记。若该资源消失,组件会自动移除该状态。该状态不会被添加到使用 NVML mock 的资源池节点上,同时组件不会修改其他控制器写入的状态标记。DRA 资源分配流程不依赖该状态标记。该状态仅用于标识模拟调度就绪,不提供实际的资源分片强制执行能力。

🔌 动态资源分配(DRA)

对于 Kubernetes 1.31+,你可以使用 DRA 插件替代传统设备插件。

前置条件

根据需要在集群中启用 DynamicResourceAllocation 特性门控与 resource.k8s.io/v1 API。

在 Helm Chart 中启用 DRA 插件

# values.yaml
draPlugin:
  enabled: true
devicePlugin:
  enabled: false # 禁用传统插件

使用 DRA 完成部署

apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: gpu-claim
spec:
  spec:
    devices:
      requests:
      - name: gpu
        exactly:
          deviceClassName: gpu.nvidia.com
---
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  containers:
  - name: main
    image: ubuntu:22.04
    resources:
      claims:
      - name: gpu
        resourceClaims:
        - name: gpu
          resourceClaimTemplateName: gpu-claim

更多示例请参考 test/e2e/fixtures/manifests/。

🔐 计算域 DRA(安全工作负载隔离)

Fake GPU Operator 支持模拟 https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/dra-cds.html,无需真实 NVIDIA 硬件即可实现安全的工作负载隔离。计算域可为多节点 GPU 工作负载提供 IMEX 通道模拟能力。

前置条件

  • 运行 Kubernetes 1.31+ 且已启用 DynamicResourceAllocation 特性门控
  • 已在 Fake GPU Operator 中启用 DRA 插件

在 Helm Chart 中启用计算域

# values.yaml
computeDomainController:
  enabled: true
computeDomainDraPlugin:
  enabled: true
draPlugin:
  enabled: true
devicePlugin:
  enabled: false # 使用 DRA 时需禁用传统插件

使用计算域完成部署

首先创建 ComputeDomain 资源:

apiVersion: resource.nvidia.com/v1beta1
kind: ComputeDomain
metadata:
  name: my-compute-domain
  namespace: default
spec:
  numNodes: 1
  channel:
    allocationMode: Single # 也可设为 "All" 以使用全部通道
  resourceClaimTemplate:
    name: my-compute-domain

compute-domain-controller 将自动为该 ComputeDomain 创建对应的 ResourceClaimTemplate。

随后部署使用计算域的 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: compute-domain-pod
  namespace: default
spec:
  containers:
  - name: main
    image: ubuntu:22.04
    command: ["sleep", "infinity"]
    resources:
      claims:
      - name: compute-domain
        resourceClaims:
        - name: compute-domain
          resourceClaimTemplateName: my-compute-domain

验证计算域状态

# 查看 ComputeDomain 状态
kubectl get computedomain my-compute-domain -o yaml

# 确认状态显示 Ready 且已分配节点
# status:
#   status: Ready
#   nodes:
#   - name:
#     status: Ready

🎭 KWOK 集成(模拟节点)

https://kwok.sigs.k8s.io/(Kubernetes WithOut Kubelet)是一套工具集,无需运行真实的 kubelet 进程即可模拟数千个 Kubernetes 节点。将其与 Fake GPU Operator 结合后,完全无需硬件即可搭建大规模 GPU 集群模拟环境,非常适合在大规模场景下测试调度器、自动扩缩容组件与资源管理能力。

为什么选择 KWOK + Fake GPU Operator 方案?

  • 规模测试:模拟数百个 GPU 节点,验证调度器的运行行为
  • 成本高效:无需云服务器或物理硬件
  • 快速迭代:数秒内即可完成模拟集群的启停操作
  • 适配 CI/CD:可基于真实集群拓扑运行端到端测试

前置条件

  1. 在集群中安装 KWOK 控制器:
KWOK_VERSION=v0.7.0
kubectl apply -f "https://github.com/kubernetes-sigs/kwok/releases/download/${KWOK_VERSION}/kwok.yaml"
kubectl apply -f "https://github.com/kubernetes-sigs/kwok/releases/download/${KWOK_VERSION}/stage-fast.yaml"
  1. 在 Helm values 中启用 kwok-dra-plugin:
# values.yaml
kwokDraPlugin:
  enabled: true
draPlugin:
  enabled: true

创建模拟 GPU 节点

apiVersion: v1
kind: Node
metadata:
  annotations:
    kwok.x-k8s.io/node: fake
  labels:
    type: kwok
    run.ai/simulated-gpu-node-pool: default
  name: kwok-gpu-node-1
spec:
  taints:
  - effect: NoSchedule
    key: kwok.x-k8s.io/node
    value: fake
status:
  allocatable:
    cpu: "32"
    memory: 128Gi
    pods: "110"
  capacity:
    cpu: "32"
    memory: 128Gi
    pods: "110"

status-updater 会自动为该节点创建拓扑 ConfigMap,同时 kwok-dra-plugin 会生成包含已配置 GPU 的 ResourceSlice。

在 KWOK 节点上调度 GPU Pod

apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
  name: gpu-claim
spec:
  spec:
    devices:
      requests:
      - name: gpu
        exactly:
          deviceClassName: gpu.nvidia.com
---
apiVersion: v1
kind: Pod
metadata:
  name: kwok-gpu-pod
spec:
  nodeSelector:
    type: kwok
  tolerations:
  - key: kwok.x-k8s.io/node
    operator: Equal
    value: fake
    effect: NoSchedule
  containers:
  - name: main
    image: ubuntu:22.04
    command: ["sleep", "infinity"]
    resources:
      claims:
      - name: gpu
        resourceClaims:
        - name: gpu
          resourceClaimTemplateName: gpu-claim

Pod 将被“调度”到 KWOK 节点上并显示为 Running 状态(KWOK 会模拟完整的 Pod 生命周期),对应的 ResourceClaim 会从模拟 GPU 的 ResourceSlice 中完成分配。

验证部署结果

# 检查 KWOK 节点是否处于 Ready 状态
kubectl get nodes -l type=kwok

# 检查 ResourceSlice 是否已创建
kubectl get resourceslices | grep kwok

# 确认 Pod 运行在 KWOK 节点上
kubectl get pod kwok-gpu-pod -o wide

🔀 真实 GPU + 模拟 GPU 混合节点集群

你可以在同一集群中同时运行 Fake GPU Operator 和真实的 NVIDIA GPU Operator:真实 GPU 节点完全由原生 Operator 管理,同时新增模拟 GPU 节点用于规模验证与调度器测试。

Fake GPU Operator 默认是真实 NVIDIA GPU Operator 的直接替代方案,因此要实现二者共存,必须满足两个条件:(1)将其安装在独立命名空间中(不能使用 gpu-operator);(2)禁用所有会与原生 Operator 的节点选择器/集群级资源产生冲突的组件:

# mixed-mode-values.yaml — 与真实 NVIDIA GPU Operator 共存配置
devicePlugin: { enabled: false } # 该组件的选择器会与真实 GPU 节点上的 device-plugin 冲突
statusExporter: { enabled: false } # 该组件的选择器会与真实 GPU 节点上的 dcgm-exporter 冲突
runtimeClass: { enabled: false } # 集群级资源 RuntimeClass/nvidia 已被真实 Operator 占用

将其安装到专属命名空间:

helm upgrade -i fake-gpu-operator oci://ghcr.io/run-ai/fake-gpu-operator/fake-gpu-operator \
--namespace fake-gpu-operator --create-namespace \
--version <对应版本号> -f mixed-mode-values.yaml

完成上述步骤后:

  • Fake GPU 在 KWOK 节点上运行(参见上方 KWOK 集成 章节)。其 nvidia.com/gpu 容量由中心 kwok-gpu-device-plugin 发布,因此无需启用各节点的 DaemonSet,同时 KWOK 的 NoSchedule 污点可阻止真实 Operator 的 DaemonSet 调度到模拟节点上。
  • 真实 GPU 节点完全不受影响 — 只需注意不要为这些节点添加 run.ai/simulated-gpu-node-pool 标签。status-updater 仅对带有该标签的节点执行操作,因此原有的真实 Operator 可完全独占您的硬件资源。

🔍 故障排除

Pod 安全准入

为确保功能正常运行,请为 gpu-operator 命名空间配置 Pod 安全准入:

kubectl label ns gpu-operator pod-security.kubernetes.io/enforce=privileged

nvidia-smi 支持

该 Operator 会向 GPU Pod 中注入模拟版的 nvidia-smi 工具。nvidia-smi 依赖 NODE_NAME 环境变量解析 Pod 所在节点的拓扑信息;设备插件与 DRA 驱动都会在分配资源时自动注入该变量,无需手动配置 Pod。

🤝 贡献

欢迎各类贡献!您可随时提交 Pull Request。

📝 许可证

本项目采用 Apache License 2.0 许可证 — 详见 LICENSE 文件。

🙋 支持

  • 🐛 https://github.com/run-ai/fake-gpu-operator/issues

由 Run:ai 用心打造

轩辕镜像配置手册

按平台快速找到配置文档

一键安装

一键安装 Docker

Linux Docker 一键安装

AI

用 AI 使用轩辕镜像

agents.md · AI 对话 · 提示词

Docker

登录仓库拉取

登录认证 · 私有仓库

专属域名拉取

免登录 · 高速拉取

Linux

Docker 镜像配置

Windows / Mac

Docker Desktop 配置

MacOS OrbStack

OrbStack 容器

Apple Container

macOS 原生容器

Docker Compose

Compose 项目配置

NAS

群晖

Synology 配置

飞牛

fnOS 镜像配置

绿联

绿联 NAS

威联通

QNAP 配置

极空间

极空间 NAS

Unraid

Unraid NAS

企业仓库

其他仓库

ghcr · Quay · nvcr

Harbor 镜像源

Proxy Repository 对接

Portainer 镜像源

Registries 配置

Nexus 镜像源

Docker Proxy 缓存

开发工具

Dev Containers

VS Code 开发容器

Podman

Podman 配置指南

Singularity / Apptainer

HPC 科学计算容器

Kubernetes

K8s Containerd

Kubernetes · Containerd

K3s

轻量级集群

面板 / 网络

爱快路由

爱快 4.0 · iKuai 镜像加速

宝塔面板

一键配置镜像源

需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单

镜像拉取常见问题

功能

版本功能对比

功能对比 · 版本选择

支持的镜像仓库

Docker Hub · GCR · GHCR

专属域名用法

专属域名 · 开启停用 · 多仓库

新手拉取配置

登录 · 专属域名 · 配置

docker search 限制

专属域名 · Hub 搜索

不支持 push

仅支持 pull · 不支持

拉取速度原因

带宽 · 缓存 · 冷热镜像

错误码

402 与流量用尽

402 · 流量包 · 充值

401 认证失败

401 · docker login

manifest unknown

标签错误 · 镜像不存在

410 Gone 排查

410 · Docker 升级

429 限流

免费版 · 专业版 · 企业版 · 请求频率

其他报错

DNS 超时

DNS 解析 · 网络超时

TLS 证书失败

no matching manifest(架构)

docker.sock / daemon

账号

失败是否计费

manifest · blob · 计费

申请开票(企业 / 个人)

开票 · 发票 · 工单

修改登录密码

网站 · 仓库 · 重置

注销账户

工单 · 数据 · 注销

原理

mirrors 不生效

daemon.json · 重启

去掉域名前缀

docker tag · 重命名

指定架构拉取

ARM64 · AMD64 · 多架构

latest 与「最新」

digest · 版本号 · 标签

查看全部问题→

用户好评

来自真实用户的反馈,见证轩辕镜像的优质服务

用户头像

oldzhang

运维工程师

Linux服务器

5

"Docker访问体验非常流畅,大镜像也能快速完成下载。"

轩辕镜像
镜像详情
...
ghcr.io/run-ai/fake-gpu-operator/kwok-gpu-device-plugin
定价查看流量套餐与价格
博客Docker 镜像公告与技术博客
官方技术交流群:|问题咨询请:提交工单
服务号:轩辕镜像|公众号:源码跳动|小程序:轩辕镜像|官方技术交流群:|问题咨询请:提交工单
专业版 · 高速稳定拉取镜像
高速镜像下载·在线技术支持·99.95% SLA 保障·付费会员免广告
50GB 仅 ¥8/年
专业版 · 高速稳定拉取镜像
50GB 仅 ¥8/年
高速镜像下载·在线技术支持·99.95% SLA 保障·付费会员免广告
用户协议·隐私政策·增值电信业务经营许可证:浙B2-20261007·©2024-2026 源码跳动©2024-2026 杭州源码跳动科技有限公司·商务合作:点击复制邮箱