# MOFFETT SPU Operator 用户手册 Moffett SPU Operator 基于 Operator 框架,可自动部署并管理在 Kubernetes 中运行的墨芯相关软件组件,包括 Device Plugin 和 DCSM Exporter。可选择单独部署这两个组件,也可以通过 SPU Operator 统一部署。如需单独部署,请参见 [MOFFETT Device Plugin 用户手册](./k8s-device-plugin.md) 和 [MOFFETT DCSM Exporter 用户手册](./dcsm/dcsm-exporter.md)。 ## 部署 SPU Operator ### 前提条件 - 部署 Kubernetes 集群,具体请参见 安裝 K8s 集群。 - Kubernetes 集群的所有节点安装 SOLA Toolkit,且版本 ≥ 3.13.0,具体请参见 [SOLA Toolkit 安装指南](../installation/sola-toolkit-installation-guide.md)。 - 安装 Helm 3,具体请参见 安装 Helm。 ### 操作步骤 1. 获取 SPU Operator 的 Chart 包。 ``` wget https://moffett-oss-bucket.tos-cn-shanghai.volces.com/CloudNative/spu-operator/helm_chart/spu-operator-v1.0.0.tgz ``` 2. (可选)如需自定义部署参数,可执行以下命令将 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 用户手册](./dcsm/dcsm-exporter.md#id5)。如需采集自定义指标,可通过以下任一方式创建 ConfigMap,自定义指标将覆盖 `DCSM_EXPORTER_COLLECTORS` 指定的默认项。 - 使用命令行创建 ConfigMap 在 `moffett-spu-operator` 命名空间中执行以下命令,创建包含 CSV 格式指标数据的 ConfigMap: ``` kubectl create configmap --from-file=dcsm-metrics.csv= -n moffett-spu-operator ``` 然后在 `values.yaml` 中通过 `name` 字段指定该 ConfigMap 名称。 - 在 `values.yaml` 中内嵌配置 在 `values.yaml` 文件中使用 `config` 字段创建 ConfigMap,格式如下: ``` config: name: create: true data: |- ``` ```{admonition} 须知 :class: note 如自定义指标未生效,可使用 `kubectl get configmap -n moffett-spu-operator -o yaml` 命令查看 ConfigMap 内容,确认是否存在格式错误等问题。 ``` **私有仓库拉取镜像** 请参见从私有仓库拉取镜像。 3. 部署 SPU Operator。 ``` helm install spu-operator --create-namespace --namespace moffett-spu-operator spu-operator-v1.0.0.tgz -f values.yaml # 如使用默认参数部署,无需指定 -f 参数 ``` 4. 查看 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 ``` 5. 查看 SPU Operator 相关 Pod 状态。 ``` kubectl get pods -n moffett-spu-operator ``` ## 使用 Device Plugin 和 DCSM Exporter SPU Operator 部署完成后,集成了 Device Plugin 和 DCSM Exporter 组件。关于这两个组件在 Kubernetes 集群环境中的应用,请参见 [MOFFETT Device Plugin 用户手册](./k8s-device-plugin.md)和 [DCSM Exporter 用户手册](./dcsm/dcsm-exporter.md)。 ## 更新 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 组件: 1. 查询集群中部署的 SPU Operator 所有 Pod 的详细信息。 ``` kubectl get pods -n moffett-spu-operator -o wide ``` 2. 为集群的指定节点添加污点(Taint)并删除该节点上 Device Plugin 和 DCSM Exporter 组件的 Pod。 ``` kubectl taint nodes NeedFix=true:NoSchedule # 为指定节点添加 Taint,标记为不可调度 kubectl describe node | grep Taints # 验证节点 Taint 是否生效 kubectl delete pod -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 NeedFix=true:NoSchedule- ``` ## 卸载 SPU Operator 1. 查看部署的 SPU Operator 名称。 ``` helm list -n moffett-spu-operator ``` 2. 通过 Helm 卸载 SPU Operator。 ``` helm uninstall -n moffett-spu-operator ``` 3. 删除 SPU Operator 相关资源。 ``` kubectl get crd | grep "moffett" # 检查 SPU Operator 相关的 CRD 资源 kubectl delete crd # 删除 SPU Operator 相关的 CRD 资源 kubectl get clusterrole,clusterrolebinding | grep "moffett" # 验证 ClusterRole 和 ClusterRoleBinding 是否删除,如有相关资源,执行下方命令删除 # kubectl delete # kubectl delete ``` 4. 删除 SPU Operator 的 namespace。 ``` kubectl delete ns moffett-spu-operator ``` 5. 验证卸载是否完成。 ``` kubectl get all -A | grep spu-operator kubectl get ns | grep moffett-spu-operator ```