MOFFETT SPU Operator 用户手册
Moffett SPU Operator 基于 Operator 框架,可自动部署并管理在 Kubernetes 中运行的墨芯相关软件组件,包括 Device Plugin 和 DCSM Exporter。可选择单独部署这两个组件,也可以通过 SPU Operator 统一部署。如需单独部署,请参见 MOFFETT Device Plugin 用户手册 和 MOFFETT DCSM Exporter 用户手册。
部署 SPU Operator
前提条件
部署 Kubernetes 集群,具体请参见 安裝 K8s 集群。
Kubernetes 集群的所有节点安装 SOLA Toolkit,且版本 ≥ 3.13.0,具体请参见 SOLA Toolkit 安装指南。
安装 Helm 3,具体请参见 安装 Helm。
操作步骤
获取 SPU Operator 的 Chart 包。
wget https://moffett-oss-bucket.tos-cn-shanghai.volces.com/CloudNative/spu-operator/helm_chart/spu-operator-v1.0.0.tgz
(可选)如需自定义部署参数,可执行以下命令将 SPU Operator Chart 包中的默认
values.yaml
提取并保存到当前目录,编辑修改后用于后续部署。helm show values spu-operator-v1.0.0.tgz > values.yaml
values.yaml
示例如下:daemonsets: labels: {} annotations: {} priorityClassName: system-node-critical tolerations: - key: moffett.ai/spu operator: Exists effect: NoSchedule updateStrategy: "RollingUpdate" rollingUpdate: maxUnavailable: "1" operator: repository: moffett image: spu-operator version: v1.0.0 imagePullPolicy: IfNotPresent imagePullSecrets: [] priorityClassName: system-node-critical tolerations: - key: "node-role.kubernetes.io/master" operator: "Equal" value: "" effect: "NoSchedule" - key: "node-role.kubernetes.io/control-plane" operator: "Equal" value: "" effect: "NoSchedule" affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: "node-role.kubernetes.io/master" operator: In values: [""] - weight: 1 preference: matchExpressions: - key: "node-role.kubernetes.io/control-plane" operator: In values: [""] logging: timeEncoding: epoch level: info develMode: false resources: limits: cpu: 500m memory: 256Mi requests: cpu: 200m memory: 128Mi devicePlugin: enabled: true repository: moffett image: k8s-device-plugin version: v0.3.0 imagePullPolicy: IfNotPresent # 容器镜像拉取策略,支持 Always、Never、IfNotPresent imagePullSecrets: # - myregistrykey # 私有仓库需先创建 Secret,并在这里填写创建的 Secret 名称,具体操作请参见下方参考文档 resources: {} dcsmExporter: enabled: true repository: moffett image: dcsm-exporter version: 1.2.0-1.0.0 imagePullPolicy: IfNotPresent imagePullSecrets: [] env: - name: DCSM_EXPORTER_LISTEN value: ":7788" - name: DCSM_EXPORTER_KUBERNETES value: "true" - name: DCSM_EXPORTER_COLLECTORS # 如果下方 config 字段指定了自定义指标的 ConfigMap,则此处的默认指标会被自定义指标覆盖 value: "/etc/dcsm-exporter/default-counters.csv" resources: {} service: internalTrafficPolicy: Cluster serviceMonitor: enabled: true # 使用 Prometheus Operator 时,需启用 Service Monitor interval: 15s honorLabels: false additionalLabels: {} relabelings: [] # config: # 通过 ConfigMap 配置自定义的 DCSM Exporter 指标,具体操作请参见下方说明 # name: custom-metrics # create: true # data: |- # DCSM FIELD, Prometheus metric type, help message # Temperature DCSM_FI_DEV_SPU_TEMP, gauge, SPU temperature (in C). # Power DCSM_FI_DEV_POWER_USAGE, gauge, Power draw (in W). # Static configuration information. These appear as labels on the other metrics DCSM_FI_DEV_SERIAL, label, Device Serial Number DCSM_FI_DRIVER_VERSION, label, Driver Version
自定义 DCSM 指标
DCSM Exporter 默认采集的指标字段详见 MOFFETT DCSM Exporter 用户手册。如需采集自定义指标,可通过以下任一方式创建 ConfigMap,自定义指标将覆盖
DCSM_EXPORTER_COLLECTORS
指定的默认项。使用命令行创建 ConfigMap
在
moffett-spu-operator
命名空间中执行以下命令,创建包含 CSV 格式指标数据的 ConfigMap:kubectl create configmap <name> --from-file=dcsm-metrics.csv=<custom_metric_file> -n moffett-spu-operator
然后在
values.yaml
中通过name
字段指定该 ConfigMap 名称。在
values.yaml
中内嵌配置在
values.yaml
文件中使用config
字段创建 ConfigMap,格式如下:config: name: <name> create: true data: |- <CSV 格式的自定义指标>
须知
如自定义指标未生效,可使用
kubectl get configmap <config-map-name> -n moffett-spu-operator -o yaml
命令查看 ConfigMap 内容,确认是否存在格式错误等问题。私有仓库拉取镜像
请参见从私有仓库拉取镜像。
部署 SPU Operator。
helm install spu-operator --create-namespace --namespace moffett-spu-operator spu-operator-v1.0.0.tgz -f values.yaml # 如使用默认参数部署,无需指定 -f 参数
查看 SPU Operator 部署状态。
helm list -n moffett-spu-operator
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION spu-operator moffett-spu-operator 1 2025-08-04 14:46:38.548200944 +0800 CST deployed spu-operator-v1.0.0 v1.0.0
查看 SPU Operator 相关 Pod 状态。
kubectl get pods -n moffett-spu-operator
使用 Device Plugin 和 DCSM Exporter
SPU Operator 部署完成后,集成了 Device Plugin 和 DCSM Exporter 组件。关于这两个组件在 Kubernetes 集群环境中的应用,请参见 MOFFETT Device Plugin 用户手册和 DCSM Exporter 用户手册。
更新 SPU Operator
修改 values.yaml
后,执行以下 Helm 命令,可更新 SPU Operator 相关资源。
helm upgrade spu-operator spu-operator-v1.0.0.tgz -n moffett-spu-operator -f values.yaml
也可执行以下命令在线修改 SPU Operator 相关资源,保存后即时生效。
kubectl edit clusterpolicy
停用 Device Plugin 和 DCSM Exporter
当更新 SOLA Toolkit 时,Device Plugin 和 DCSM Exporter 组件会影响 SOLA Toolkit 卸载,执行以下步骤在指定节点停用 Device Plugin 和 DCSM Exporter 组件:
查询集群中部署的 SPU Operator 所有 Pod 的详细信息。
kubectl get pods -n moffett-spu-operator -o wide
为集群的指定节点添加污点(Taint)并删除该节点上 Device Plugin 和 DCSM Exporter 组件的 Pod。
kubectl taint nodes <node_name> NeedFix=true:NoSchedule # 为指定节点添加 Taint,标记为不可调度 kubectl describe node <node_name> | grep Taints # 验证节点 Taint 是否生效 kubectl delete pod <device-plugin_pod_name> <dcsm-exporter_pod_name> -n moffett-spu-operator # 删除 Device Plugin 和 DCSM Exporter 对应的 Pod kubectl get pod -n moffett-spu-operator -o wide # 验证 Pod 状态
如需恢复指定节点上的 SPU Operator 相关 Pod,移除该节点上的 Taint。
kubectl taint nodes <node_name> NeedFix=true:NoSchedule-
卸载 SPU Operator
查看部署的 SPU Operator 名称。
helm list -n moffett-spu-operator
通过 Helm 卸载 SPU Operator。
helm uninstall <name> -n moffett-spu-operator
删除 SPU Operator 相关资源。
kubectl get crd | grep "moffett" # 检查 SPU Operator 相关的 CRD 资源 kubectl delete crd <crd-name> # 删除 SPU Operator 相关的 CRD 资源 kubectl get clusterrole,clusterrolebinding | grep "moffett" # 验证 ClusterRole 和 ClusterRoleBinding 是否删除,如有相关资源,执行下方命令删除 # kubectl delete <clusterrole-name> # kubectl delete <clusterrolebinding-name>
删除 SPU Operator 的 namespace。
kubectl delete ns moffett-spu-operator
验证卸载是否完成。
kubectl get all -A | grep spu-operator kubectl get ns | grep moffett-spu-operator