首页 > 架构设计 > 基础设施 > Kubernetes GPU 运维组件介绍
## 一、Kubernetes GPU 支持架构与核心组件 ### Device Plugin 框架 Device Plugin 框架是 Kubernetes 实现 GPU 等扩展资源管理的基础机制,其核心功能在于解决异构设备的发现、上报、调度与分配问题。该框架通过标准化的 gRPC 接口(包括 ListAndWatch、Allocate 等)实现设备插件与 kubelet 的通信,使节点级设备资源能够被 Kubernetes 集群感知和管理。以 GPU 为例,NVIDIA Device Plugin 以 DaemonSet 形式部署于每个 GPU 节点,通过 ListAndWatch API 持续向 kubelet 上报节点内 GPU 设备的 ID 列表及健康状态,kubelet 则通过双层缓存维护这些信息并同步至 API Server,最终使 GPU 资源以扩展资源形式(如 `nvidia.com/gpu`)呈现于 Node 对象的 `status.allocatable` 字段,为 Pod 调度提供数据基础[[1](https://blog.csdn.net/972301/article/details/149896299)][[2](http://m.toutiao.com/group/7523471154020712986/?upstream_biz=doubao)]。 NVIDIA 官方 Device Plugin(k8s-device-plugin)是 GPU 资源管理的主流实现,其功能覆盖资源暴露、健康监控与分配隔离三大核心环节。在资源暴露方面,插件通过 NVML 库扫描节点 GPU 设备,并以 `nvidia.com/gpu` 为资源名称向集群注册,Pod 可通过在 `resources.limits` 中声明 `nvidia.com/gpu: 1` 的方式申请资源[[1](https://blog.csdn.net/972301/article/details/149896299)][[3](https://blog.csdn.net/CBGCampus/article/details/144063000)]。部署该插件需满足多项前置条件:Kubernetes 版本需 ≥v1.11,节点需安装 NVIDIA 容器工具包(nvidia-container-toolkit)并配置容器运行时(如 containerd 或 CRI-O)为 nvidia-container-runtime,同时依赖 NVML 库(libnvidia-ml.so)实现 GPU 状态检测与资源信息采集[[4](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/kubevirt-gpu-device-plugin/tags)][[5](https://blog.gitcode.com/2371ef9335de70348e2ed16b45770a02.html)]。此外,插件通过定期调用 NVML 接口监控 GPU 健康状态,当检测到硬件故障时可自动剔除异常设备,保障资源分配的可靠性[[2](http://m.toutiao.com/group/7523471154020712986/?upstream_biz=doubao)]。 原生 Device Plugin 与第三方插件在功能定位与适用场景上存在显著差异。第三方插件如 Kubevirt GPU Device Plugin,专为虚拟化场景设计,可发现绑定 vfio-pci 驱动的 GPU 设备,并通过直通模式附加至 Kubevirt 虚拟机,但其功能局限于特定工作负载(如 VM)且依赖 vfio-pci 驱动配置[[4](https://catalog.ngc.nvidia.com/orgs/nvidia/containers/kubevirt-gpu-device-plugin/tags)]。相比之下,NVIDIA 官方插件具备更全面的通用性与稳定性:支持 GPU 独占/共享分配、动态资源隔离(通过 NVML 实现设备故障检测)、容器运行时兼容性(覆盖 containerd 与 CRI-O),且与 NVIDIA 生态工具(如 GPU Feature Discovery)深度集成,可满足生产环境中多样化的 GPU 调度需求[[2](http://m.toutiao.com/group/7523471154020712986/?upstream_biz=doubao)][[6](https://pkg.go.dev/github.com/NVIDIA/k8s-device-plugin)]。官方文档明确指出,仅推荐使用官方维护的插件版本,第三方分支或变体可能存在兼容性风险,进一步凸显其在稳定性与生态适配性上的优势[[6](https://pkg.go.dev/github.com/NVIDIA/k8s-device-plugin)]。 ### GPU Operator 从运维自动化角度来看,GPU Operator 通过整合并自动化管理 GPU 节点所需的全部 NVIDIA 软件组件(包括驱动、容器运行时、设备插件、自动节点标签及基于 DCGM 的监控等),有效解决了传统 GPU 节点配置中的核心痛点。传统方式下,GPU 节点部署常面临驱动版本不一致、组件依赖冲突等问题,而 GPU Operator 通过容器化部署驱动及相关组件,实现了软件栈的标准化交付,避免了节点级别的手动配置差异[[7](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/24.6.2/platform-support.html)][[8](https://catalog.ngc.nvidia.com/orgs/nvidia/helm-charts/gpu-operator)]。例如,其默认通过 Helm Chart 自动化部署节点特征发现(NFD)等依赖项,并支持灵活配置(如通过 `nfd.enabled` 控制 NFD 部署,`driver.enabled` 控制是否使用容器化驱动),减少了人工干预和配置错误风险[[9](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/22.9.1/installation.html)]。 在版本 v25.3.1 中,GPU Operator 进一步强化了容器化驱动的支持能力,通过“容器原生方法”实现驱动与节点操作系统的解耦。该特性允许 GPU 驱动、NVIDIA 容器工具包等组件以容器形式运行,无需在节点主机预安装驱动,显著简化了节点维护流程。例如,在 RHEL 或 Ubuntu 环境中,所有 GPU 相关组件可完全通过容器部署,节点更新或驱动升级仅需替换容器镜像,避免了传统方式下跨节点驱动版本同步的复杂性[[10](https://www.suse.com/support/kb/doc/?id=000021962)]。同时,v25.3.1 新增对 H100 等新一代 GPU 的支持,扩展了硬件兼容性范围,增强了对多样化算力需求的适配能力[[7](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/24.6.2/platform-support.html)]。 对比手动部署与 Operator 部署的效率差异,GPU Operator 在标准化和自动化层面优势显著。手动部署需逐一处理节点驱动安装、组件依赖解析(如 NFD、容器运行时兼容性)及权限配置(如 Pod 安全策略),在大规模集群中易导致配置漂移和运维瓶颈。而 GPU Operator 通过 Helm 实现声明式配置,支持一键部署及自定义参数调整(如 `operator.defaultRuntime` 控制 MIG 策略,`psp.enabled` 配置 Pod 安全策略),部署效率提升显著。例如,对于包含数百节点的集群,Operator 可通过统一配置模板完成全量节点的 GPU 环境初始化,而手动部署需数小时至数天的人工操作,且难以保证一致性[[8](https://catalog.ngc.nvidia.com/orgs/nvidia/helm-charts/gpu-operator)][[11](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/24.3.0/getting-started.html)]。 尽管 GPU Operator 在 Kubernetes 集群中表现出强大的自动化和可扩展性,但其在混合调度环境(如 Kubernetes 与 Slurm 共存场景)中存在局限性。由于其设计目标聚焦于 Kubernetes 生态的 GPU 资源管理,缺乏与 Slurm 等传统 HPC 调度系统的原生集成能力,难以实现跨平台资源统一编排和作业调度,这在同时运行容器化与非容器化工作负载的场景中可能导致资源利用率下降或管理复杂度增加[[8](https://catalog.ngc.nvidia.com/orgs/nvidia/helm-charts/gpu-operator)]。此外,在 NVIDIA vGPU 场景下,其部署依赖私有仓库管理驱动镜像(受限于 NVIDIA vGPU EULA),需额外配置镜像拉取密钥及许可证服务器,进一步增加了混合环境下的运维复杂性[[9](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/22.9.1/installation.html)]。 ## 二、GPU 资源管理与调度策略 ### 硬件级隔离:Multi-Instance GPU (MIG) Multi-Instance GPU (MIG) 作为硬件级 GPU 资源隔离技术,通过将物理 GPU 的计算单元、显存及缓存资源划分为最多 7 个独立实例,实现了比传统整卡分配更精细的资源管控。与整卡分配模式相比,MIG 的核心优势在于硬件级隔离性:每个实例拥有专用的显存和计算资源,通过硬件层面的资源划分确保多租户共享时工作负载互不干扰,从而提供可预测的性能和安全的资源隔离[[1](https://blog.csdn.net/972301/article/details/149896299)][[12](https://docs.nvidia.com/datacenter/cloud-native/gpu-sharing.html)][[13](https://aws.amazon.com/blogs/containers/maximizing-gpu-utilization-with-nvidias-multi-instance-gpu-mig-on-amazon-eks-running-more-pods-per-gpu-for-enhanced-performance/)]。这种隔离机制使得 MIG 特别适用于多租户场景(如开发测试环境),既能精确调整资源分配以匹配任务需求,又能最大化 GPU 利用率,避免整卡分配导致的资源闲置[[2](http://m.toutiao.com/group/7523471154020712986/?upstream_biz=doubao)][[12](https://docs.nvidia.com/datacenter/cloud-native/gpu-sharing.html)]。 MIG 支持两种主要切片策略:balanced(单一阵列)和 heterogeneous(混合阵列),其适用场景取决于工作负载的资源需求特征。以 H100 80GB HBM3 GPU 为例,混合阵列策略可配置为“3 个 2G.20GB 切片 +1 个 7G.80GB 切片”,其中 2G.20GB 实例适用于轻量级任务(如小规模推理),7G.80GB 实例可承载计算密集型任务(如大模型训练)[[14](https://github.com/NVIDIA-AI-Blueprints/rag/blob/main/docs/mig-deployment.md)]。单一阵列策略要求所有实例使用相同配置文件(如 A100-40GB 划分为 7 个 1g.5gb 实例),适用于资源需求统一的场景(如批量开发测试任务),可简化管理并支持第三方工作负载调度[[15](https://github.com/run-ai/docs/blob/master/docs/platform-admin/aiinitiatives/resources/configuring-mig-profiles.md)]。混合阵列策略则允许在单卡上组合不同配置文件,适用于多样化工作负载场景,但仅支持第三方工作负载,且需通过自定义配置文件定义分区规则[[2](http://m.toutiao.com/group/7523471154020712986/?upstream_biz=doubao)][[15](https://github.com/run-ai/docs/blob/master/docs/platform-admin/aiinitiatives/resources/configuring-mig-profiles.md)]。 在 Kubernetes 环境中,MIG 的调度流程依赖于节点标签、资源请求格式及与设备插件的协同机制。首先,通过 `nvidia.com/mig.config` 节点标签定义 GPU 的 MIG 分区策略,默认值为 `all-disabled`,管理员需通过策略文件(如 ConfigMap)指定具体分区规则(如单一阵列或混合阵列)[[2](http://m.toutiao.com/group/7523471154020712986/?upstream_biz=doubao)][[16](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/24.6.0/gpu-operator-mig.html)]。其次,GPU Operator(版本 1.7.0 及以上)通过 MIG Manager 组件管理节点 MIG 配置,在应用配置时需确保 GPU 无运行工作负载,部分云环境(如 Google Cloud)需重启节点以生效,此时节点标签会更新为 `nvidia.com/mig.config.state: rebooting`[[14](https://github.com/NVIDIA-AI-Blueprints/rag/blob/main/docs/mig-deployment.md)][[16](https://docs.nvidia.com/datacenter/cloud-native/gpu-operator/24.6.0/gpu-operator-mig.html)]。资源请求方面,Pod 需通过 `nvidia.com/mig-\
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048227/viewspace-3098725/ ,如需转载,请注明出处,否则将追究法律责任。