# 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
```