1. 概述

1.1. 关于 GPU Operator

Kubernetes(k8s)是一款流行的开源容器编排器,广泛应用于数据中心等场景下。 GPU Operator 是由沐曦打造的一款基于 Kubernetes的沐曦GPU解决方案。 该解决方案提供了多个组件,用于支持在集群上使用沐曦GPU以及 MXMACA® 软件栈。 这些组件以容器的形式提供,服务于用户应用运行的各个环节。

1.2. 特性说明

GPU Operator 是面向 Kubernetes 集群的 GPU 资源管理套件,核心特性覆盖 GPU 全生命周期管理、灵活配置策略及高兼容性,具体包括:

  1. 全链路 GPU 管理能力

    集成 gpu-device(设备发现与健康监控)、driver-manager(驱动部署与升级)、container-runtime(容器运行时集成)等组件,实现从设备发现→驱动安装→资源调度→状态监控的全流程自动化管理。

  2. 多策略灵活配置

    • 驱动部署策略:支持 PreferCloud(镜像驱动优先)、PreferHost(主机驱动优先)等模式,适配多种使用场景

    • 灰度升级策略:通过配置集群驱动分批次升级(支持控制并行节点数、定义失败回滚策略),保障业务连续性

    • 设备绑定策略:灵活强大的驱动支持,支持按节点或 GPU 序号绑定 VFIO-PCI 驱动,满足虚拟化场景需求

  3. 高兼容性与扩展性

    • 支持主流 Linux OS 系统

    • 兼容 Kubernetes 1.23+ 版本,支持 containerd、Docker、cri-o 等容器运行时

  4. 监控与可观测性

    内置 data-exporter 组件,支持 Prometheus 指标导出(如 GPU 利用率、温度等指标),通过 service 灵活暴露监控接口,无缝集成企业级监控体系。

1.3. 安全与权限说明

GPU Operator 的部分组件需要特权访问能力,以完成以下工作:

  • 访问 GPU 设备节点

  • 加载或管理驱动相关文件

  • 修改容器运行时配置

  • 注册设备插件

  • 采集 GPU 及相关指标

因此,部分工作负载需要使用 privileged: true,部分工作节点组件还需要使用 hostPID: true 以感知或操作宿主机进程。

1.3.1. 组件权限需求说明

组件

工作负载Kind

ServiceAccount

privileged

hostPID

hostIPC

hostNetwork

说明

metax-operator controller

Deployment

metax-operator

控制器组件,不以特权模式运行

metax-gpu-label

DaemonSet

metax-gpu-label

负责读取 GPU 状态并生成节点标签

metax-gpu-device

DaemonSet

metax-gpu-device

负责设备插件注册、设备访问和 CDI 配置写入

metax-container-runtime

DaemonSet

metax-container-runtime

负责配置容器运行时,准备 GPU 应用运行所需的容器环境

metax-driver

DaemonSet

metax-driver

负责驱动管理、设备访问、固件相关操作

metax-maca

DaemonSet

metax-maca

负责管理 MXMACA SDK 资源

metax-topo-master

Deployment

metax-topo-master

拓扑主控组件,不以特权模式运行

metax-topo-worker

DaemonSet

metax-topo-worker

负责 GPU 节点拓扑发现

metax-data-exporter

DaemonSet

默认 ServiceAccount

负责 GPU 指标和节点侧运行信息采集

metax-gpu-scheduler

Deployment

metax-gpu-scheduler

调度器相关组件,不以特权模式运行

1.3.2. 宿主机路径访问

路径

访问方式

用途

/dev

读写

GPU 设备访问

/sys

读写

设备与系统信息读取、配置操作

/lib/modules

只读

驱动模块相关访问

/lib/firmware

读写

固件目录访问

/etc/docker/etc/containerd/etc/crio

读写

容器运行时配置修改

/var/lib/kubelet/device-plugins

读写

设备插件 socket 注册

/var/lib/kubelet/pod-resources

只读

Pod 资源分配信息读取

/var/run/cdi

读写

CDI 配置写入

/var/lib/metax

读写

驱动与运行时共享文件

/run/metax

读写

节点侧运行时状态共享

/var/log/metax

读写

节点侧组件日志输出

1.3.3. 为什么需要这些权限

权限项

原因说明

privileged: true

用于访问 GPU 设备、执行驱动管理、修改容器运行时配置、完成设备插件注册以及工作节点监控采集

hostPID: true

用于让工作节点组件感知或操作宿主机进程,以完成驱动加载、运行时配置生效等操作

宿主机目录挂载

用于共享驱动文件、访问设备目录、注册插件、写入 CDI 配置以及输出日志

需要说明的是, privilegedhostPID 是两类不同的权限:

  • privileged 表示容器拥有较高的宿主机访问能力

  • hostPID 表示容器加入宿主机 PID 命名空间

1.3.4. 安全建议

  • 建议将 GPU Operator 部署在独立 Namespace 中

  • 建议仅授予集群管理员安装和维护权限

  • 建议仅在 GPU 节点上运行高权限组件

  • 建议结合 NetworkPolicy、镜像更新和日志审计进行访问收敛