1. 概述
1.1. 关于 GPU Operator
Kubernetes(k8s)是一款流行的开源容器编排器,广泛应用于数据中心等场景下。 GPU Operator 是由沐曦打造的一款基于 Kubernetes的沐曦GPU解决方案。 该解决方案提供了多个组件,用于支持在集群上使用沐曦GPU以及 MXMACA® 软件栈。 这些组件以容器的形式提供,服务于用户应用运行的各个环节。
1.2. 特性说明
GPU Operator 是面向 Kubernetes 集群的 GPU 资源管理套件,核心特性覆盖 GPU 全生命周期管理、灵活配置策略及高兼容性,具体包括:
全链路 GPU 管理能力
集成 gpu-device(设备发现与健康监控)、driver-manager(驱动部署与升级)、container-runtime(容器运行时集成)等组件,实现从设备发现→驱动安装→资源调度→状态监控的全流程自动化管理。
多策略灵活配置
驱动部署策略:支持 PreferCloud(镜像驱动优先)、PreferHost(主机驱动优先)等模式,适配多种使用场景
灰度升级策略:通过配置集群驱动分批次升级(支持控制并行节点数、定义失败回滚策略),保障业务连续性
设备绑定策略:灵活强大的驱动支持,支持按节点或 GPU 序号绑定 VFIO-PCI 驱动,满足虚拟化场景需求
高兼容性与扩展性
支持主流 Linux OS 系统
兼容 Kubernetes 1.23+ 版本,支持 containerd、Docker、cri-o 等容器运行时
监控与可观测性
内置 data-exporter 组件,支持 Prometheus 指标导出(如 GPU 利用率、温度等指标),通过 service 灵活暴露监控接口,无缝集成企业级监控体系。
1.3. 安全与权限说明
GPU Operator 的部分组件需要特权访问能力,以完成以下工作:
访问 GPU 设备节点
加载或管理驱动相关文件
修改容器运行时配置
注册设备插件
采集 GPU 及相关指标
因此,部分工作负载需要使用 privileged: true,部分工作节点组件还需要使用 hostPID: true 以感知或操作宿主机进程。
1.3.1. 组件权限需求说明
组件 |
工作负载Kind |
ServiceAccount |
privileged |
hostPID |
hostIPC |
hostNetwork |
说明 |
|---|---|---|---|---|---|---|---|
|
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. 宿主机路径访问
路径 |
访问方式 |
用途 |
|---|---|---|
|
读写 |
GPU 设备访问 |
|
读写 |
设备与系统信息读取、配置操作 |
|
只读 |
驱动模块相关访问 |
|
读写 |
固件目录访问 |
|
读写 |
容器运行时配置修改 |
|
读写 |
设备插件 socket 注册 |
|
只读 |
Pod 资源分配信息读取 |
|
读写 |
CDI 配置写入 |
|
读写 |
驱动与运行时共享文件 |
|
读写 |
节点侧运行时状态共享 |
|
读写 |
节点侧组件日志输出 |
1.3.3. 为什么需要这些权限
权限项 |
原因说明 |
|---|---|
|
用于访问 GPU 设备、执行驱动管理、修改容器运行时配置、完成设备插件注册以及工作节点监控采集 |
|
用于让工作节点组件感知或操作宿主机进程,以完成驱动加载、运行时配置生效等操作 |
宿主机目录挂载 |
用于共享驱动文件、访问设备目录、注册插件、写入 CDI 配置以及输出日志 |
需要说明的是, privileged 和 hostPID 是两类不同的权限:
privileged表示容器拥有较高的宿主机访问能力hostPID表示容器加入宿主机 PID 命名空间
1.3.4. 安全建议
建议将 GPU Operator 部署在独立 Namespace 中
建议仅授予集群管理员安装和维护权限
建议仅在 GPU 节点上运行高权限组件
建议结合 NetworkPolicy、镜像更新和日志审计进行访问收敛