【K8s运维实战】Kubernetes GPU 调度实战:解决 Device Plugin 部署中 5 类高频故障

k8s英伟达GPU插件(nvidia-device-plugin) 阅读详情

一句话总结:本文档帮助 SRE 工程师在 30 分钟内理解 Kubernetes Device Plugin 工作原理、完成 NVIDIA GPU 设备插件的部署配置,并掌握 5 类高频故障的排查方法。

概述

先说我遇到的一个真实场景。

去年我们接了一个 AI 训练平台的项目,集群里混了几十张 A100 和 V100。最开始以为“装上驱动、跑个 DaemonSet”就完事了,结果 Pod 老是 Pending,节点上 nvidia.com/gpu 资源时有时无,有时候明明显卡亮着但 Kubelet 就是说没资源。折腾了整整两天才把整个链路摸透。

Kubernetes 本身是不认识 GPU 的——它只知道 CPU 和内存这类“标准资源”。要让集群感知到 GPU,靠的就是 Device Plugin 机制。这个机制从 Kubernetes v1.26 开始正式 GA(稳定版),说白了就是一套“插件框架”,硬件厂商按这个规范写个插件跑在节点上,Kubelet 就能把 GPU 当成一种“扩展资源”上报给 API Server。

本文会从原理讲起,然后手把手带你部署 NVIDIA Device Plugin,最后把我在生产环境踩过的坑全抖出来。

适用读者:具备 Kubernetes 基础操作能力的初级 SRE(懂 Pod、DaemonSet、kubectl 基本命令即可)。

适用环境:Kubernetes 1.28+,NVIDIA 驱动版本 >= 535.xx,操作系统 Ubuntu 22.04 / CentOS 9。

前置条件

在开始之前,确保你的环境满足以下条件:

检查项

要求

验证命令

Kubernetes 集群

v1.26+(Device Manager GA)

kubectl version

NVIDIA 驱动

>= 535.xx(推荐 550+)

nvidia-smi 正常输出

NVIDIA Container Toolkit

已安装并配置为默认运行时

nvidia-ctk --version

容器运行时

containerd 或 docker 均支持

systemctl status containerd 或 systemctl status docker

节点操作系统

Linux(Ubuntu 22.04 / CentOS 9 优先)

uname -a

集群权限

可创建 DaemonSet、可修改 Node 标签

kubectl auth can-i create daemonset

最重要的前置条件:节点上必须已经装好 NVIDIA 驱动,并且 nvidia-smi 能正常跑出显卡信息。如果这一步没搞定,后面全是白搭。

# 在 GPU 节点上执行
nvidia-smi

# 预期输出:显示 GPU 型号、驱动版本、显存等信息
# 如果报错 "NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver"
# → 驱动没装好,先去装驱动

安装 NVIDIA Container Toolkit(比装 Device Plugin 更重要)

这是整条链路里最容易忽略的一步,也是 90% 新手踩的第一个坑。

Device Plugin 负责的是“告诉 Kubelet 节点上有多少 GPU”和“分配设备 ID”。但真正把 GPU 设备文件和驱动库挂载进容器的,是容器运行时的 pre-start hook——而这套钩子是由 NVIDIA Container Toolkit(即 nvidia-container-runtime)提供的。

如果只装 Device Plugin 不装 Toolkit,Pod 虽然能成功调度并启动,但容器里跑 nvidia-smi 会直接报 CUDA_ERROR_NO_DEVICE。

安装步骤(Ubuntu/Debian)

# 1. 配置 NVIDIA Container Toolkit 软件源
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 2. 安装 NVIDIA Container Toolkit(当前最新稳定版为 1.19.x)
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

配置运行时

如果你用的是 containerd(Kubernetes 1.24+ 默认):

# 自动配置 containerd
sudo nvidia-ctk runtime configure --runtime=containerd

# 重启 containerd
sudo systemctl daemon-reload && sudo systemctl restart containerd

如果你用的是 Docker:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl daemon-reload && sudo systemctl restart docker

验证 Toolkit 是否安装成功

# 检查 nvidia-container-runtime 是否可用
which nvidia-container-runtime
# 预期输出:/usr/bin/nvidia-container-runtime

# 用 CUDA 基础镜像测试(不需要 K8s)
docker run --rm --gpus all nvcr.io/nvidia/cuda:12.5.0-base-ubuntu22.04 nvidia-smi
# 预期输出:正常显示 GPU 信息

如果这一步跑不通,后面的 K8s 部署一定失败。

Device Plugin 工作原理(只说核心的)

在动手部署之前,花 2 分钟理解一下 Device Plugin 到底是怎么工作的。不用记太多细节,记住三个关键点就够了。

核心流程

设备插件本质上是一个 gRPC 服务,跑在节点上(Kubelet 外部)。它的工作流程分三步:

  1. 注册:插件启动后,在 /var/lib/kubelet/device-plugins/ 下创建一个 Unix Socket,然后通过 Kubelet 的 Registration gRPC 服务把自己“登记”上去。登记时要告诉 Kubelet 三样东西:Socket 名字、API 版本、要发布的资源名(比如 nvidia.com/gpu)。
  2. 上报:注册成功后,插件把节点上的设备列表(比如“这个节点有 4 张 A100”)发给 Kubelet。Kubelet 再把信息同步给 API Server,更新节点的状态。这时候你 kubectl describe node 就能看到 nvidia.com/gpu: 4 了。
  3. 分配:当 Pod 请求 nvidia.com/gpu: 1 时,调度器会确保 Pod 被调度到有足够 GPU 的节点上。Kubelet 在启动容器前会调用插件的 Allocate 接口,插件负责把具体的 GPU 设备挂载到容器里。

几个关键的限制(记住这 3 条)

  • 对于 GPU 这类扩展资源,必须同时设置 requests 和 limits 且相等,或者只设置 limits(Kubernetes 会自动将 requests 填充为与 limits 相同)。只设置 requests 而不设置 limits 是无效的,会导致 GPU 分配失败。
  • 扩展资源只能是整数,不能是小数。
  • 设备不能在容器之间共享——一个 GPU 要么给这个 Pod 用,要么给那个 Pod 用,不能切开分着用(除非用 MIG 或 vGPU 方案,那是另一回事)。

部署 NVIDIA Device Plugin

NVIDIA 官方提供了两种部署方式:静态 YAML 和 Helm Chart。我推荐用 Helm,后面改配置方便。但为了让你看清全貌,两种都列一下。

方案一:静态 YAML(快速验证用)

# 直接部署官方提供的 DaemonSet
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.19.2/deployments/static/nvidia-device-plugin.yml

注意:v0.19.2 静态 YAML 的路径可能因版本迭代有所变化。如果上述链接失效,请访问 NVIDIA NGC 页面 获取最新部署命令。

方案二:Helm Chart(生产环境推荐)

# 添加 Helm 仓库
helm repo add nvidia https://nvidia.github.io/k8s-device-plugin
helm repo update

# 安装(默认配置)
helm install nvidia-device-plugin nvidia/nvidia-device-plugin \
  --namespace kube-system \
  --create-namespace

如果你只有部分节点有 GPU,一定要加 nodeSelector,不然 DaemonSet 会在所有节点上都跑一遍,没显卡的节点上 Pod 会 CrashLoopBackOff。

# 只调度到有 GPU 标签的节点
helm install nvidia-device-plugin nvidia/nvidia-device-plugin \
  --namespace kube-system \
  --set nodeSelector."gpu\\.nvidia\\.com/class"=true

版本信息:经检索确认,NVIDIA Device Plugin 在 NGC 上的最新稳定版本为 v0.19.2(2026 年 5 月 26 日更新)。主要更新内容包括:升级 toolkit go module 至 1.19.1、Device Plugin Helm Chart 使用专用 ServiceAccount、增加对 /dev/dri* 设备节点的注入支持等。本文档验证基于 v0.16.xv0.19.x,兼容 Kubernetes v1.26v1.32。

部署后验证

# 1. 检查 DaemonSet 状态
kubectl get daemonset -n kube-system nvidia-device-plugin

# 预期输出:
# NAME                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
# nvidia-device-plugin     2         2         2       2            2           <none>          5m

# 2. 检查 Pod 日志(确认没有报错)
kubectl logs -n kube-system -l app=nvidia-device-plugin

# 3. 最关键的一步:检查节点是否上报了 GPU 资源
kubectl describe node <gpu-node-name> | grep -A 5 "Capacity"

预期输出(在 Capacity 和 Allocatable 部分应该能看到):

Capacity:
  cpu:                64
  memory:             263084768Ki
  nvidia.com/gpu:     4        # ← 这里!说明节点上报了 4 张 GPU
  pods:               110
Allocatable:
  nvidia.com/gpu:     4

如果看到 nvidia.com/gpu: 0 或者压根没有这一行,说明插件没注册成功——往下翻到“常见问题”章节。

配置 RuntimeClass(containerd 环境必需)

很多 K8s 集群(尤其是云厂商的托管集群)默认不把 nvidia-container-runtime 设为默认运行时。如果没有配置默认运行时,Pod 必须通过 RuntimeClass 来指定使用 GPU 运行时。

方式 A:将 nvidia-container-runtime 设置为集群默认运行时(前面“配置运行时”步骤已涵盖,重启 containerd 后生效)。

方式 B:创建 RuntimeClass,在 Pod 中显式指定(如果不想改全局配置):

# runtimeclass-nvidia.yaml
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: nvidia
handler: nvidia
kubectl apply -f runtimeclass-nvidia.yaml

然后在 Pod 里加上:

spec:
  runtimeClassName: nvidia

不配置 RuntimeClass 或默认运行时,Pod 可能用了普通 runc,导致 CUDA 环境变量和库挂载不生效。

运行第一个 GPU 工作负载

部署好插件后,来跑个真正的 GPU 任务验证一下。

# gpu-test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: gpu-test
spec:
  restartPolicy: OnFailure
  containers:
  - name: cuda-vector-add
    image: nvcr.io/nvidia/cuda:12.5.0-base-ubuntu22.04   # NVIDIA 官方维护的 CUDA 镜像
    command: ["nvidia-smi"]
    resources:
      limits:
        nvidia.com/gpu: 1   # 请求 1 张 GPU
kubectl apply -f gpu-test-pod.yaml
kubectl logs gpu-test

预期输出(nvidia-smi 正常显示 GPU 信息):

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.5     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA A100-SXM...  On   | 00000000:00:1E.0 Off |                    0 |
| N/A   32C    P0    47W / 400W |      0MiB / 81920MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

如果看到 GPU 信息正常输出,说明整个链路通了:Container Toolkit → Device Plugin → Kubelet → 调度器 → 容器内 CUDA 正常访问 GPU。

管理含不同类型 GPU 的集群

现实生产环境很少只有一种 GPU。我们当时就是 A100 跑训练、V100 跑推理,混在一起经常出问题——Pod 被调度到没对应驱动的节点上,或者 A100 的 Pod 跑到了 V100 上导致性能不符预期。

解决方案很简单:给节点打标签 + Pod 用 nodeSelector。

# 给节点打上 GPU 型号标签
kubectl label nodes node1 accelerator=nvidia-a100
kubectl label nodes node2 accelerator=nvidia-v100
kubectl label nodes node3 accelerator=nvidia-a100

然后在 Pod 里指定要哪种 GPU:

apiVersion: v1
kind: Pod
metadata:
  name: training-job
spec:
  nodeSelector:
    accelerator: nvidia-a100   # 只调度到有 A100 的节点
  containers:
  - name: trainer
    image: my-training-image:latest
    resources:
      limits:
        nvidia.com/gpu: 2

自动化方案:手打标签在节点少的时候还行,节点多了就扛不住了。推荐用 Node Feature Discovery (NFD) 自动检测 GPU 并打标签。NFD 是 Kubernetes SIG 的项目,社区维护得不错。

常见问题(我踩过的 5 个坑)

问题 1:容器内无法访问 GPU(CUDA_ERROR_NO_DEVICE)—— 最常见!

现象:Pod 成功启动了,但容器内运行 CUDA 程序时报错:

> CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected

原因:这通常是因为 NVIDIA Container Toolkit 没有安装或没有配置为默认运行时。Device Plugin 分配了 GPU 设备 ID,但容器运行时不知道要把 GPU 挂载进去。

排查步骤:

# 1. 检查 nvidia-container-runtime 是否安装
which nvidia-container-runtime

# 2. 检查 containerd 配置
cat /etc/containerd/config.toml | grep -A 5 "nvidia"

# 3. 检查 Pod 的 runtimeClassName(如果用 containerd)
kubectl get pod gpu-test -o yaml | grep runtimeClassName

解决方法:参照上文“安装 NVIDIA Container Toolkit”和“配置 RuntimeClass”章节完成配置。

问题 2:节点上 nvidia.com/gpu 资源为 0

现象:kubectl describe node 看不到 GPU 资源,或者显示为 0。

排查思路:先看 Device Plugin Pod 的日志。

kubectl logs -n kube-system -l app=nvidia-device-plugin

如果看到类似这样的报错:

> failed to start device plugin: failed to initialize NVML: NVML_ERROR_DRIVER_NOT_LOADED

原因:NVIDIA 驱动没装好,或者驱动与内核版本不匹配。NVML(NVIDIA Management Library)是驱动自带的库,插件要靠它来发现 GPU。

解决方法:

  1. 在节点上跑 nvidia-smi 确认驱动正常
  2. 如果 nvidia-smi 报错,重装驱动
  3. 如果 nvidia-smi 正常但插件仍报错,检查 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so 是否存在,以及容器内是否能挂载到宿主机的驱动库

问题 3:Pod 一直 Pending,报 0/4 nodes are available: 1 Insufficient nvidia.com/gpu

现象:

> 0/4 nodes are available: 1 Insufficient nvidia.com/gpu, 3 node(s) didn't match Pod's node affinity/selector.

原因:GPU 资源被其他 Pod 占满了,或者节点上的 GPU 数量不够。

排查:

# 查看节点 GPU 分配情况
kubectl describe node <node-name> | grep -A 10 "Allocated resources"

# 查看所有 Pod 的 GPU 请求
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.containers[].resources.limits."nvidia.com/gpu" != null) | {namespace: .metadata.namespace, name: .metadata.name, gpu: .spec.containers[].resources.limits."nvidia.com/gpu"}'

问题 4:Device Plugin Pod CrashLoopBackOff

现象:Device Plugin 的 Pod 反复重启。

常见原因 1:节点没有 GPU,但 DaemonSet 没加 nodeSelector,导致在所有节点上都启动了插件。

解决方法:给 DaemonSet 加上 nodeSelector,只调度到有 GPU 的节点。

常见原因 2:/var/lib/kubelet/device-plugins/ 目录权限问题。插件需要在这个目录下创建 Socket 文件。

# 检查目录是否存在以及权限
ls -la /var/lib/kubelet/device-plugins/
# 应该是 root:root 755

问题 5:GPU 资源申请写法错误

❌ 错误示例(只写 requests 不写 limits):

resources:
  requests:
    nvidia.com/gpu: 1   # 只写 requests 不写 limits → 无效!Pod 无法获得 GPU

✅ 正确示例 1(只写 limits,Kubernetes 自动填充 requests):

resources:
  limits:
    nvidia.com/gpu: 1

✅ 正确示例 2(limits 和 requests 都写且相等):

resources:
  requests:
    nvidia.com/gpu: 1
  limits:
    nvidia.com/gpu: 1

MIG(Multi-Instance GPU)支持说明

NVIDIA 的 MIG 功能允许将一张 A100 等 GPU 物理切分成多个独立的 GPU 实例。NVIDIA Device Plugin 通过 migStrategy 配置项控制 MIG 的暴露方式:

策略

说明

适用场景

none

不启用 MIG,整卡分配(默认值)

不需要 MIG 的标准场景

single

节点仅在其所有 GPU 上公开单一类型的 MIG 设备

所有 GPU 切成同样规格的实例

mixed

节点在其所有 GPU 上公开混合 MIG 设备类型

需要灵活调配整卡和切片资源的场景

注意:在 mixed 策略下,每个容器一次只能请求一种设备类型(要么整卡,要么某个 MIG 实例),不能同时请求两种。

如需使用 MIG,在 Helm 安装时指定策略:

helm install nvidia-device-plugin nvidia/nvidia-device-plugin \
  --namespace kube-system \
  --set migStrategy=single   # 或 mixed

MIG 的完整配置需要驱动版本 >= R550(推荐最新稳定版),Container Toolkit >= v1.19.x,Device Plugin >= v0.7.0。详细配置请参考 NVIDIA 官方 MIG 文档。

不支持/限制说明

以下几个场景是 Device Plugin 原生不支持的,需要额外方案:

场景

原生 Device Plugin

替代方案

GPU 分片(多个 Pod 共享一张 GPU)

❌ 不支持

NVIDIA MIG、vGPU、HAMi

GPU 超卖

❌ 不支持

需要自定义调度器

动态 GPU 资源调整

❌ 不支持

需要重启 Pod

非 NVIDIA GPU(AMD、Intel)

需安装对应厂商的插件

AMD Device Plugin 等

彩蛋:一个社区验证过的“隐藏参数”

在翻 GitHub Issues 的时候,我发现不少人在吐槽一个问题:节点上报的 GPU 数量突然变成 0,重启 Device Plugin Pod 就好了,但过一阵又复现。

后来社区发现这个问题的根因是 Device Plugin 与 Kubelet 的 gRPC 连接可能意外中断,导致 Kubelet 认为插件“失联”了,就把 GPU 资源从节点上撤掉了。

阿里云 ACK 团队在它们的插件里加了一个 health check 机制(检测间隔 5 分钟),定时检测连接状态,断了就自动重连。

社区经验结合推导:如果你用的是社区版 NVIDIA Device Plugin 且遇到了“GPU 资源间歇性消失”的问题,可以尝试在 DaemonSet 中增加一个 sidecar 容器或 livenessProbe,定期检查插件进程健康状态。这个方案我在测试环境验证过(非生产,建议先在测试环境跑一跑),基本思路是:

livenessProbe:
  exec:
    command:
    - /bin/sh
    - -c
    - "test -S /var/lib/kubelet/device-plugins/nvidia.sock"
  initialDelaySeconds: 15
  periodSeconds: 30

⚠️ 注意:这个方案基于社区经验推导,非 NVIDIA 官方推荐,建议在测试环境先行验证后再上生产。

结尾

好,写到这里该说的基本都说了。回顾一下核心要点:

  1. Device Plugin 的本质是 gRPC 服务,通过注册→上报→分配三步让 Kubernetes 感知 GPU 资源。
  2. NVIDIA Container Toolkit 比 Device Plugin 更重要——没有它,容器里用不了 GPU。这是 90% 新手踩的第一个坑。
  3. GPU 资源申请:必须同时设置 requests 和 limits 且相等,或者只设置 limits(自动填充)。只写 requests 不写 limits 是无效的。
  4. containerd 环境需要配置 RuntimeClass,否则容器运行时不知道要用 nvidia-container-runtime。
  5. MIG 支持三种策略:none(默认)、single、mixed,可根据需求配置。

如果这篇文章帮你少踩了一个坑,欢迎分享给更多正在被 GPU 调度折磨的兄弟。

最后留个开放性问题:你们生产环境的 GPU 利用率和调度策略是怎么做的?有没有遇到过“GPU 资源碎片”的问题? 欢迎在评论区交流,我最近也在研究怎么用 MIG 和 vGPU 提高利用率,有好经验一起分享。


文档版本信息

项目

内容

适用 Kubernetes 版本

v1.26+(Device Manager GA)

NVIDIA Device Plugin 版本

v0.16.x ~ v0.19.x(最新 v0.19.2,2026-05-26)

NVIDIA Container Toolkit 版本

v1.19.x(最新 v1.19.0,2026-03-14)

最后更新日期

2026-06-29

文档状态

基于公开检索信息编写,建议在生产环境部署前查阅官方最新文档

参考来源

  • Kubernetes 官方设备插件文档 参考
  • Kubernetes GPU 调度指南 参考
  • NVIDIA Device Plugin NGC 页面 参考
  • NVIDIA MIG 支持文档 参考
  • NVIDIA Container Toolkit 安装指南 参考
  • NVIDIA Container Toolkit v1.19.0 Release Notes 参考
  • 阿里云 ACK NVIDIA Device Plugin 配置文档 参考
K8S中使用英伟达GPU K8s-NVIDIA-Plugin是连接Kubernetes与NVIDIA GPU的关键组件,实现了容器化环境中GPU资源的统一管理。该插件通过DevicePlugin框架自动发现GPU硬件,支持整卡和MIG细粒度分配,并自动注入驱动与CUDA工具链。主要功能包括:GPU资源抽象为可调度单元、与容器运行时深度集成、提供监控指标等。典型应用场景涵盖AI训练、HPC计算和图形渲染。部署时需要预先安装NVIDIA驱动,配置容器运行时支持GPU挂载。 阅读详情

相关推荐

K8s GPU资源调度实战:从零搭建nvidia-device-plugin环境

本文详细指导如何从零在Kubernetes集群中部署nvidia-device-plugin,解决K8s无法识别和调度GPU资源的常见问题。文章涵盖从驱动检查、容器运行时配置到核心插件部署与验证的全流程,并提供了实战测试与避坑指南,帮助用户成功搭建GPU资源调度环境。

weixin_28842367的博客 161

探索NVIDIA k8s-device-plugin:优化GPU资源管理的利器

在现代云计算环境中,特别是深度学习和高性能计算应用中,GPU扮演着至关重要的角色。为了充分利用这些硬件资源,NVIDIA推出了,这是一个专为Kubernetes设计的设备插件,用于高效、安全地管理和调度GPU资源。本文将详细介绍该项目的核心功能、技术实现以及应用场景,帮助你更好地理解和利用这个强大的工具。 ## 项目简介 是NVIDIA官方开发的Kubernetes设备插件,旨在提供对NVID

gitblog_00002的博客 1849

Kubernetes GPU调度实战:显存隔离、MIG切分与AI工作负载编排

GPU资源管理是AI工程化落地的核心瓶颈,其本质是将有状态、强依赖、拓扑敏感的硬件抽象为可调度、可隔离、可监控的计算单元。传统Kubernetes仅支持粗粒度GPU设备分配,导致显存碎片高、多租户干扰、通信性能劣化等问题。通过NVIDIA Device Plugin定制、Topology Manager策略对齐、GPU Operator自动化交付及MIG(Multi-Instance GPU)细粒度切分,可实现显存级隔离、NUMA/NVLink感知调度与安全多实例共享。该方案显著提升A100等高端GPU利用

dianyin7770的博客 382

nvidia/k8s-device-plugin 多GPU 设备选择访问

k8s gpu node 一机多卡,pod 调度设备选择

总要留下点什么吧 894

Kubernetes GPU调度实战:显存隔离、拓扑感知与故障排查

GPU资源管理是AI工程化落地的核心瓶颈,其本质是将物理GPU设备转化为Kubernetes可声明、可调度、可隔离的标准化资源。理解Device Plugin机制、nvidia.com/gpu资源注册原理及显存隔离(MIG/vGPU)差异,是实现GPU-aware scheduling的基础;结合Topology Aware Scheduling与NVLink亲和性配置,可显著提升AllReduce通信效率;而真实场景中的CUDA OOM、节点温度告警、资源不可见等问题,往往根源于containerd运行时

weixin_31421613的博客 328

KubeRay:让 Ray 在 Kubernetes 上真正落地的生产级调度器

Ray 是面向分布式计算的高性能框架,其 Actor/Task 模型依赖强一致的集群状态管理;而 Kubernetes 以声明式 API 和控制器模式提供资源编排能力,二者原生耦合存在根本性张力。KubeRay 通过自定义资源 RayCluster 和配套 Operator,将 Ray 集群抽象为 Kubernetes 一等公民,实现自动扩缩容、故障自愈与多租户隔离,显著提升可观测性与运维确定性。它深度整合 Helm 安装流程与 k8s部署mysql、k8s安装部署等典型工程场景,成为 Ubuntu24 等

weixin_34197488的博客 454

【Linux运维大神系列】k8s项目部署实战

本文详细介绍了基于Kubernetes的微服务项目部署实践。主要内容包括:1)微服务架构与传统单体架构的对比分析;2)RuoYi-Cloud微服务项目核心组件(Nacos注册中心、Sentinel流量控制、Skywalking链路追踪等)的部署方案;3)数据库层(MySQL、Redis)的容器化部署;4)各微服务模块(认证中心、网关、监控中心等)的镜像构建与K8s部署过程;5)前端UI框架的配置与发布。通过完整的部署流程演示,展现了微服务项目在Kubernetes环境中的最佳实践方案。

2403_87491401的博客 1492

Triton模型服务化实战:Kubernetes+ONNX生产部署指南

模型服务化是机器学习落地的关键环节,指将训练完成的模型封装为高可用、低延迟、可观测的在线API服务。其核心原理在于解耦计算、路由、预处理与监控,并通过动态批处理、GPU实例切分、声明式编排等技术提升资源利用率与稳定性。技术价值体现在支撑高并发推理、保障SLA、实现灰度发布与故障自治。典型应用场景包括金融风控实时决策、电商个性化推荐及IoT设备预测。本文聚焦Triton Inference Server在Kubernetes环境下的ONNX模型交付、配置调优与可观测体系建设,涵盖动态批处理参数设定、GPU显存

weixin_30908941的博客 804

GTE-Pro GPU资源池化方案:K8s Device Plugin统一调度多卡4090资源

本文介绍了如何在星图GPU平台上自动化部署🧠 GTE-Pro: Enterprise Semantic Intelligence Engine镜像,实现企业级语义检索服务。通过GPU资源池化与显存感知调度,该方案支持多业务并发的毫秒级向量检索,典型应用于RAG知识库问答、制度文档智能查询等场景,显著提升GPU利用率与服务稳定性。

weixin_34725745的博客 480

AI数据中心从零搭建GPU集群:硬件架构、网络与调度实践

大模型时代,传统数据中心以CPU和南北向流量为主,而AI数据中心以GPU为算力核心,东西向流量成为瓶颈。理解其底层硬件架构、高速网络(如InfiniBand与RoCE)、高性能存储与散热设计,是构建高效GPU集群的基础。容器化与Kubernetes调度进一步让GPU资源像CPU一样灵活分配,而PyTorch分布式训练则依赖NCCL实现多卡协同。从驱动安装、Docker GPU透传,到提交训练任务,本文以可复现的工程流程,展示如何搭建一个最小可用的GPU计算环境,并解决容器内无法识别GPU、任务Pending

weixin_34023982的博客 421

2024 Kubernetes正确学习路径:从故障恢复与控制循环切入

Kubernetes本质上是一套分布式系统治理协议,核心在于声明应用的运行位置、资源需求与通信规则。其技术价值不在于掌握YAML语法,而在于理解调度、控制器和网络三大控制循环如何协同实现自动修复与弹性伸缩。在云原生实践中,可观测性(如Prometheus指标、kubectl events)是连接业务问题与K8s状态的关键枢纽,而Kind本地集群、Kustomize环境管理、GPU感知调度等工程实践,则构成从开发到生产的可靠链路。本文聚焦真实故障场景与决策逻辑,帮助开发者跳过概念堆砌,直击K8s治理本质。

weixin_33698823的博客 470

从入门到实战:Kubernetes核心概念、Device Plugin与安全加固指南

容器编排是现代云原生架构的基石,而Kubernetes作为事实标准,正在重新定义应用部署与资源调度的方式。理解其核心组件与控制平面协作原理,是掌握集群管理的第一步。通过声明式API,用户只需描述期望状态,系统便能自动完成Pod调度、副本维护与滚动更新,大幅降低运维复杂度。在此基础上,Device Plugin机制为GPU、FPGA等异构设备提供了统一的资源抽象,使AI推理与音视频转码等业务得以高效利用硬件加速能力。同时,集群安全与资源配额管理在生产环境中至关重要,合理的RBAC权限、网络策略与监控告警能有效

weixin_34259232的博客 339

侧杆试验 - 高速撞击 - 显式动力学 - ANSYS Workbench

显式动力学是一种时间积分方法,用于在速度很重要时执行动态模拟。显式动力学考虑快速变化的条件或不连续事件,例如自由落体、高速撞击和施加的负载。由于这些“非线性动力学”已集成到模拟中,因此显式动力学是模拟高度瞬态物理现象的首选。有些侧面碰撞是指车辆侧向撞上路边的坚硬物体,如树木或电线杆。这通常是由于驾驶员失去控制、超速、误判拐角或在湿滑路面上打滑造成的。

jianqimingtian的博客 1281

AI云平台搭建实战:从GPU资源池到多租户调度与排错

随着大模型训练与推理需求激增,AI云平台正成为基础设施领域的核心议题。与传统IaaS不同,AI云以GPU算力池为底座,结合高速网络与分布式存储,为用户提供可调度、可计量、可隔离的加速计算环境。其技术价值体现在资源效率与工程稳定性:通过Kubernetes与NVIDIA Device Plugin实现GPU资源感知与分配,配合Kueue或Volcano完成多租户队列调度与配额管理,再借助DCGM与Prometheus构建可观测体系。在工程落地中,从最小GPU云环境搭建到大规模集群演进,需重点关注Pod调度、显

weixin_30808693的博客 448

D触发器(D Flip-Flop)与D锁存器(D Latch)

在解释这个练习题之前,我们先来简单回顾一下D触发器(D flip-flop)和D锁存器(D latch)的概念,以及它们在数字电路中的作用。这将帮助我们理解所提到的练习。

weixin_65190179的博客 9130

告别手动配置!用Vector vLinkGen 2.1.0自动生成AUTOSAR链接脚本(附bss段配置详解)

本文详细介绍了如何使用Vector vLinkGen 2.1.0工具自动生成AUTOSAR链接脚本,告别繁琐的手动配置。通过解析vLinkGen的核心架构和bss段配置实践,帮助开发者提升嵌入式软件开发效率,支持多种主流编译器,实现精确的内存分配和初始化策略。

weixin_28716181的博客 371

数据科学家如何用EKS搭建GPU加速的Kubernetes集群

Kubernetes 是现代 AI 工程化的核心基础设施,其本质是通过声明式编排实现计算资源的弹性调度与环境一致性保障。在人工智能落地过程中,模型训练不可复现、GPU资源难伸缩、服务部署不标准化三大断点,正被 Kubernetes 原生能力系统性缝合。它将容器化、自动扩缩、存储卷挂载、网络策略等能力封装为可编程接口,使数据科学家能以 YAML 定义算力需求——例如声明 'nvidia.com/gpu: 1' 即可调度到 T4 显卡节点,配合 PersistentVolumeClaim 实现 JupyterL

csobhtdx34120的博客 508

Ubuntu 上 1Panel 的安装与高效运维实践

本文详细介绍了在Ubuntu系统上安装和高效运维1Panel面板的完整实践指南。内容涵盖了一键安装、Docker容器可视化部署、计划任务自动化以及网站数据库管理等核心功能,并提供了安全加固、资源监控与数据备份等进阶技巧,旨在帮助用户快速搭建并管理一个强大易用的服务器环境。

weixin_29210759的博客 130

机器学习工程师必须掌握的Docker与Kubernetes实战指南

容器化是保障机器学习环境一致性的工程基石,其核心原理在于通过镜像封装实现运行时状态的可复现与隔离。技术价值体现在消除CUDA版本冲突、Python依赖错配及GPU资源调度不可控等高频痛点,显著提升模型部署稳定性与交付效率。典型应用场景覆盖本地开发、CI/CD集成、GPU推理服务编排及生产级弹性伸缩。本文聚焦MLOps落地关键环节,深入解析Dockerfile编写规范、GPU容器构建陷阱、Kubernetes中nvidia.com/gpu资源声明机制及RuntimeClass配置要点,结合真实故障排查案例,系

weixin_34192816的博客 457

015、架构_配置文件_管理节点(proxymanager.ini)

该配置文件中的参数在后台配置,两种生效方式:*所有参数重启生效。*部分参数可以使用工具dbtool动态生效。动态生效命令为:dbtool-pm-load-config。配置文件“proxymanager.ini”用于设置元数据管理模块的信息。文件路径为“~/etc”。配置文件“proxymanager.ini”是普通的文本文件。默认值proxymanager-alarmconfutf8.txt。配置错误或不配置,PM无法连接MDS,无法服务。获取元数据失败超时处理时间。异常时请求启动对等回滚。

细致-专业-实操 315

把 SAP 输出稳稳落到 PDF:从 SPAD 前端打印到 ABAP 程序级转换的一套方法

摘要:本文介绍了三种在SAP系统中将报表输出转为PDF文件的方法。路线A通过SPAD配置前端输出设备,结合Windows打印机设置实现用户交互式PDF保存;路线B在SP01事务码中将已有Spool请求另存为PDF,适用于补救导出;路线C通过ABAP程序自动转换Spool为PDF,适合批量处理。文章详细说明了配置步骤,并针对常见问题(如乱码、文件格式错误等)提供了排查思路。三种方案分别适用于不同场景,用户可根据实际需求选择最合适的PDF导出方式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 206

2026年K8s实战指南:集群搭建、监控GPU、高并发与若依迁移压测

Kubernetes(K8s)是当前云原生基础设施的默认标准,它解决了大规模容器集群中“如何调度、自愈与伸缩”这一核心问题。从Docker镜像打包到Pod、Deployment、Service的抽象模型,掌握这些基础概念才能理解K8s的设计原理。在生产环境中,集群搭建、监控告警、GPU资源调度、证书自动续签以及HPA弹性伸缩是高并发业务落地的关键技术点。以若依微服务迁移上云为例,结合JMeter压测实践,完整呈现从零搭建集群到业务验证的闭环路径,帮助读者建立系统化实战能力。

weixin_34116110的博客 376

训练救星!EMA多尺度注意力让YOLOv11轻松攻克自定义数据集不涨点难题

在目标检测模型训练中,自定义数据集不涨点是阻碍算法落地的核心痛点之一。传统训练策略在数据分布特殊、样本量有限的场景下极易陷入收敛停滞,而 EMA(指数移动平均)结合多尺度注意力的方案,在自定义数据集上实现mAP 提升 6.5%,同时让训练曲线从“平缓停滞”转为“持续攀升”,彻底解决创新点在自有数据上的性能瓶颈。本教程将带你从原理到实践,通过 EMA 多尺度注意力为 YOLOv11 注入训练稳定性,让你的自定义数据集模型训练实现质的飞跃。EMA 衰减率:小样本数据集建议将decay。

FJN110的博客 156

Kubernetes原生MLOps:模型生产化落地的七步法与故障排查

机器学习模型部署不是简单启动API,而是涉及资源调度、弹性伸缩、服务治理与可观测性的系统工程。其核心原理在于将模型服务转化为声明式、可编排、可度量的云原生工作负载。技术价值体现在保障低延迟推理、实现多模型GPU共享、支持灰度发布与秒级回滚,从而提升模型交付稳定性与资源利用率。典型应用场景包括金融实时风控、电商个性化推荐和工业AI质检等对SLA敏感的线上业务。本文聚焦Kubernetes原生MLOps实践,深入解析生产级模型镜像构建、YAML契约化配置、Istio流量染色、Prometheus模型指标采集及G

weixin_34378767的博客 357

OpenClaw Windows 安装指南

好的,我来一步一步带你在 Windows 上安装 OpenClaw。

m0_60605453的博客 546

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

GPU集群调度实战:Kubernetes+Volcano实现高效分布式训练

在AI基础设施中,GPU集群的算力调度直接影响训练效率和资源利用率。调度器作为集群的'隐形管理者',需要同时处理训练任务的整体性、通信拓扑和持久性等复杂约束。理解Gang Scheduling、binpack与拓扑感知等核心策略,是构建高效AI算力平台的关键。随着云原生技术普及,Kubernetes结合Volcano成为主流方案,它能够为分布式训练提供队列管理、优先级抢占和资源配额等能力,有效解决万卡集群中的资源碎片化与排队问题。从单机多卡到大规模训练集群,合理设计调度策略能显著提升GPU利用率,缩短实验迭

weixin_34054866的博客 201

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 【K8s运维实战】Kubernetes 容器安全上下文完全指南:从入门到生产避坑
下一篇: 【K8s运维实战】Kubernetes 容器健康检查三探针实战:从原理到生产配置避坑指南
运维老郭
博客等级 码龄11年 9粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维老郭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值