如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
🎮 无需实际硬件,即可在 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。它为开发者和测试人员提供以下核心能力:
适用场景包括:
NodeResourceTopologykubectl label node run.ai/simulated-gpu-node-pool=default
helm upgrade -i gpu-operator oci://ghcr.io/run-ai/fake-gpu-operator/fake-gpu-operator --namespace gpu-operator --create-namespace --version
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
在 values.yaml 中自定义 GPU 配置:
values.yaml
topology:
nodePools:
default:
gpuProduct: Tesla-K80
gpuCount: 2
gpuMemory: 11441
通过 Pod 注解控制 GPU 利用率指标:
metadata:
annotations:
run.ai/simulated-gpu-utilization: "10-30" # 模拟 10-30% 的 GPU 使用率
该 Operator 针对基于 Knative 的推理工作负载提供特殊处理:GPU 利用率不再采用静态赋值,而是根据实际请求流量动态计算。
工作原理
当 Pod 被识别为推理工作负载(通过 workloadKind: "InferenceWorkload" 标签或 PodGroup 的 priorityClassName: "inference" 标识)时,Operator 将执行以下操作:
workloadKind: "InferenceWorkload"
priorityClassName: "inference"
revision_app_request_count 指标从 Prometheus 查询实时请求数据
revision_app_request_countrate(revision_app_request_count[1m])
rate(revision_app_request_count[1m])该机制可生成与推理流量模式高度匹配的高仿真 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"绝大多数节点池使用 fake 后端,由 Fake GPU Operator 自带的 device-plugin 对外通告虚拟的 nvidia.com/gpu 资源。
fake
nvidia.com/gpu
将节点池切换至 mock 后端可实现:
mock
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 亲和调度器(例如 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
状态更新组件会在 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
面向 Kubernetes 1.31+ 版本,你可以使用 DRA 插件替代传统 legacy device plugin。
按需在集群中开启 DynamicResourceAllocation 特性门控与 resource.k8s.io/v1 API。
# values.yaml
draPlugin:
enabled: true
devicePlugin:
enabled: false # 禁用 legacy device plugin
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/ 目录。
Fake GPU Operator 支持模拟 NVIDIA 计算域,无需真实 NVIDIA 硬件即可实现安全的工作负载隔离。计算域提供 IMEX 通道模拟,适用于多节点 GPU 工作负载场景。
DynamicResourceAllocation 特性门控的 Kubernetes 1.31+ 集群# 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(Kubernetes WithOut Kubelet)是一套工具集,无需运行真实 kubelet 进程即可模拟数千个 Kubernetes 节点。与 Fake GPU Operator 结合使用时,可完全不依赖硬件搭建大规模 GPU 集群模拟环境,非常适合在规模化场景下测试调度器、自动扩缩容组件与资源管理机制。
在集群中安装 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
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。
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
你可以在同一集群中同时运行 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
完成配置后:
nvidia.com/gpu 容量由集中式 kwok-gpu-device-plugin 发布,因此无需启用已被禁用的每节点 DaemonSet,同时 KWOK 节点的 NoSchedule 污点会阻止真实 Operator 的 DaemonSet 调度到模拟节点。run.ai/simulated-gpu-node-pool 标签即可。status-updater 仅会处理带有该标签的节点,真实硬件将完全由官方 Operator 独占管理。为确保功能正常运行,请为 gpu-operator 命名空间配置 Pod Security Admission:
kubectl label ns gpu-operator pod-security.kubernetes.io/enforce=privileged
该 Operator 会向 GPU Pod 中注入模拟的 nvidia-smi 工具。nvidia-smi 依赖 NODE_NAME 环境变量解析 Pod 的节点拓扑;device-plugin 和 DRA 驱动都会在资源分配阶段自动注入该变量,无需手动配置 Pod。
欢迎提交贡献!请随时提交 Pull Request。
本项目采用 Apache License 2.0 许可证,详情请参阅 LICENSE 文件。
🎮 无需物理硬件,即可在 Kubernetes 中模拟 NVIDIA GPU
[!NOTE] 容器镜像与 Helm Chart 现已托管在
ghcr.io/run-ai/fake-gpu-operator。
Fake GPU Operator 是一款轻量工具,可在无需物理硬件的 Kubernetes 集群中模拟 NVIDIA GPU,为开发者和测试人员提供以下基础能力:
典型使用场景包括:
NodeResourceTopology),支持 NUMA 感知调度nvidia-smi 模拟kubectl label node run.ai/simulated-gpu-node-pool=default
helm upgrade -i gpu-operator oci://ghcr.io/run-ai/fake-gpu-operator/fake-gpu-operator --namespace gpu-operator --create-namespace --version
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
在 values.yaml 中自定义 GPU 配置:
topology:
nodePools:
default:
gpuProduct: Tesla-K80
gpuCount: 2
gpuMemory: 11441
通过 Pod 注解控制 GPU 利用率指标:
metadata:
annotations:
run.ai/simulated-gpu-utilization: "10-30" # 模拟 10%-30% 的 GPU 占用率
该 Operator 针对 基于 Knative 的推理工作负载 提供特殊适配:GPU 利用率将根据实际请求流量动态计算,而非使用静态固定值。
工作原理
当 Pod 被识别为推理工作负载(满足携带标签 workloadKind: "InferenceWorkload",或 PodGroup 的 priorityClassName: "inference")时,Operator 会执行以下操作:
revision_app_request_count 指标向 Prometheus 查询实时请求指标rate(revision_app_request_count[1m])该机制生成的 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 指标采集绝大多数资源池使用 fake 后端:由 FGO 内置的 device-plugin 对外发布虚拟的 nvidia.com/gpu 资源。
将资源池切换为 mock 后端后,可实现以下能力:
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 感知调度器(例如 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。
对于使用 fake 后端的资源池节点,status-updater 会在传统 nvidia.com/gpu 资源变为可分配状态后,自动为节点添加 gpu-fractioning.nvidia.com/Ready 状态标记。若该资源消失,组件会自动移除该状态。该状态不会被添加到使用 NVML mock 的资源池节点上,同时组件不会修改其他控制器写入的状态标记。DRA 资源分配流程不依赖该状态标记。该状态仅用于标识模拟调度就绪,不提供实际的资源分片强制执行能力。
对于 Kubernetes 1.31+,你可以使用 DRA 插件替代传统设备插件。
根据需要在集群中启用 DynamicResourceAllocation 特性门控与 resource.k8s.io/v1 API。
# values.yaml
draPlugin:
enabled: true
devicePlugin:
enabled: false # 禁用传统插件
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/。
Fake GPU Operator 支持模拟 https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/latest/dra-cds.html,无需真实 NVIDIA 硬件即可实现安全的工作负载隔离。计算域可为多节点 GPU 工作负载提供 IMEX 通道模拟能力。
# 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
https://kwok.sigs.k8s.io/(Kubernetes WithOut Kubelet)是一套工具集,无需运行真实的 kubelet 进程即可模拟数千个 Kubernetes 节点。将其与 Fake GPU Operator 结合后,完全无需硬件即可搭建大规模 GPU 集群模拟环境,非常适合在大规模场景下测试调度器、自动扩缩容组件与资源管理能力。
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"
kwok-dra-plugin:# values.yaml
kwokDraPlugin:
enabled: true
draPlugin:
enabled: true
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。
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
你可以在同一集群中同时运行 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
完成上述步骤后:
nvidia.com/gpu 容量由中心 kwok-gpu-device-plugin 发布,因此无需启用各节点的 DaemonSet,同时 KWOK 的 NoSchedule 污点可阻止真实 Operator 的 DaemonSet 调度到模拟节点上。run.ai/simulated-gpu-node-pool 标签。status-updater 仅对带有该标签的节点执行操作,因此原有的真实 Operator 可完全独占您的硬件资源。为确保功能正常运行,请为 gpu-operator 命名空间配置 Pod 安全准入:
kubectl label ns gpu-operator pod-security.kubernetes.io/enforce=privileged
该 Operator 会向 GPU Pod 中注入模拟版的 nvidia-smi 工具。nvidia-smi 依赖 NODE_NAME 环境变量解析 Pod 所在节点的拓扑信息;设备插件与 DRA 驱动都会在分配资源时自动注入该变量,无需手动配置 Pod。
欢迎各类贡献!您可随时提交 Pull Request。
本项目采用 Apache License 2.0 许可证 — 详见 LICENSE 文件。
由 Run:ai 用心打造
来自真实用户的反馈,见证轩辕镜像的优质服务