# MOFFETT SPU Operator 用户手册
MOFFETT SPU Operator 使用 Operator 框架自动化部署和管理在 Kubernetes 中运行的 Device Plugin 和 DCSM Exporter 组件。
MOFFETT SPU Operator 支持统一部署 Device Plugin 和 DCSM Exporter,如需单独部署这两个组件,请参见 [MOFFETT Device Plugin 用户手册](./k8s-device-plugin.md) 和 [MOFFETT DCSM Exporter 用户手册](./dcsm/dcsm-exporter.md)。
## 部署 SPU Operator
### 前提条件
- 部署 Kubernetes 集群,具体请参见 安裝 K8s 集群。
- 安装 kubectl 命令行工具并具有对集群的访问权限,具体请参见 在 Linux 系统中安装并设置 kubectl。
- 安装 Helm 3,具体请参见 安装 Helm。
### 操作步骤
1. 获取 SPU Operator 的 Chart 包。
```bash
wget https://moffett-release.tos-cn-guangzhou.volces.com/macs/macs-v1.10/spu-operator/spu-operator-v1.1.0.tgz
```
2. 部署 SPU Operator。
````{tabs}
```{tab} 使用默认配置
在不额外修改参数的情况下,可以直接使用默认配置进行安装:
```bash
helm install spu-operator \
-n moffett-spu-operator --create-namespace \
spu-operator-v1.1.0.tgz
```
```{tab} 使用指定配置
如果需要修改默认参数,可以通过 `--set` 指定配置项,具体请参见 [常用 Helm Chart 自定义配置项](#helm-chart)。
```bash
helm install spu-operator \
-n moffett-spu-operator --create-namespace \
spu-operator-v1.1.0.tgz \
--set =
# 推荐配置示例
helm install spu-operator \
-n moffett-spu-operator --create-namespace \
spu-operator-v1.1.0.tgz \
--set operator.cleanupCRD=true \
--set dcsmExporter.serviceMonitor.enabled=true
```
3. 查看 SPU Operator 部署状态。
```bash
helm list -n moffett-spu-operator # 当 NAME = spu-operator 的 STATUS = deployed 时,部署成功。
```
4. 查看 SPU Operator 相关组件 Pod 状态。
```{admonition} 须知
:class: note
受网络环境影响,所有组件 Pod 成功运行需等待一段时间。
```
```bash
kubectl get pod -n moffett-spu-operator # 当各组件 pod 的 STATUS = running(READY = 1/1)时,组件部署成功。
```
### 常用 Helm Chart 自定义配置项
下表列出了使用 Helm 部署 SPU Operator 时可通过 `--set` 配置的常用参数项。执行 `helm show values spu-operator-v1.1.0.tgz` 命令可查看所有可用选项。可提取 Helm Chart 中的配置到 `values.yaml` 文件,修改后更新 Operator 配置,具体请参见[更新 SPU Operator](#id6)。
| 配置项 | 描述 | 默认值 |
|----------------------------------------|----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `nfd.enabled` | 默认情况下,SPU Operator 会启用 Node Feature Discovery(NFD)特性。
如果集群中已运行 NFD,将此值设置为 `false`。 | `true` |
| `operator.repository` | SPU Operator 镜像仓库。 | `moffett` |
| `operator.image` | SPU Operator 镜像名。 | `spu-operator` |
| `operator.version` | SPU Operator 镜像版本。 | 未指定,默认使用 chart.AppVersion。 |
| `operator.imagePullPolicy` | 镜像拉取策略。 | `IfNotPresent` |
| `operator.imagePullSecrets` | 镜像拉取密钥名称(如果镜像仓库需要凭据)。
创建密钥的操作请参见从私有仓库拉取镜像。 | `[]` |
| `operator.cleanupCRD` | 卸载时是否清理 CRD 资源。 | `false` |
| `operator.upgradeCRD` | 升级时是否自动升级 CRD 资源。 | `true` |
| `driver.enabled` | 默认情况下,SPU Operator 会将 SOLA 驱动作为容器部署在系统上。
如果主机上已预装了 SOLA 驱动程序,将此值设置为 `false`。 | `true` |
| `driver.repository` | SOLA 驱动镜像仓库。 | `moffett` |
| `driver.image` | SOLA 驱动镜像名。 | `driver` |
| `driver.version` | SOLA 驱动镜像版本。 | `3.13.0-ubuntu22.04` |
| `driver.imagePullPolicy` | SOLA 驱动镜像拉取策略。 | `IfNotPresent` |
| `driver.imagePullSecrets` | 镜像拉取密钥名称(如果镜像仓库需要凭据)。
创建密钥的操作请参见从私有仓库拉取镜像。 | `[]` |
| `devicePlugin.enabled` | 是否启用 Device Plugin。 | `true` |
| `devicePlugin.repository` | Device Plugin 镜像仓库。 | `moffett` |
| `devicePlugin.image` | Device Plugin 镜像名。 | `k8s-device-plugin` |
| `devicePlugin.version` | Device Plugin 镜像版本。 | `v0.3.0` |
| `devicePlugin.imagePullPolicy` | Device Plugin 镜像拉取策略。 | `IfNotPresent` |
| `devicePlugin.imagePullSecrets` | 镜像拉取密钥名称(如果镜像仓库需要凭据)。
创建密钥的操作请参见从私有仓库拉取镜像。 | `[]` |
| `dcsmExporter.enabled` | 是否启用 DCSM Exporter。 | `true` |
| `dcsmExporter.repository` | DCSM Exporter 镜像仓库。 | `moffett` |
| `dcsmExporter.image` | DCSM Exporter 镜像名。 | `dcsm-exporter` |
| `dcsmExporter.version` | DCSM Exporter 镜像版本。 | `1.2.0-1.0.0` |
| `dcsmExporter.imagePullPolicy` | DCSM Exporter 镜像拉取策略。 | `IfNotPresent` |
| `dcsmExporter.imagePullSecrets` | 镜像拉取密钥名称(如果镜像仓库需要凭据)。
创建密钥的操作请参见从私有仓库拉取镜像。 | `[]` |
| `dcsmExporter.env` | DCSM Exporter 环境变量。可用于指定 DCSM Exporter 监听的地址与端口、指标采集配置文件路径等。 | `[ { name: DCSM_EXPORTER_LISTEN, value: ":7788" }, { name: DCSM_EXPORTER_KUBERNETES, value: "true" }, { name: DCSM_EXPORTER_COLLECTORS, value: "/etc/dcsm-exporter/default-counters.csv" } ]` |
| `dcsmExporter.serviceMonitor.enabled` | 是否启用 ServiceMonitor。
使用 Prometheus Operator 时将此参数设置为`true`。 | `false` |
| `dcsmExporter.serviceMonitor.interval` | Prometheus 抓取间隔。 | `15s` |
#### 自定义 DCSM 指标
DCSM Exporter 默认采集的指标字段详见 [MOFFETT DCSM Exporter 用户手册](./dcsm/dcsm-exporter.md#id5)。如需采集自定义指标,可通过以下任一方式创建 ConfigMap:
- 执行以下命令创建包含 CSV 格式指标数据的 ConfigMap, 并在 `values.yaml` 文件中 DCSM Exporter 环境变量的 `DCSM_EXPORTER_COLLECTORS` 字段指定该 ConfigMap。
```bash
kubectl create configmap --from-file=dcsm-metrics.csv= -n moffett-spu-operator
```
- 在 `values.yaml` 文件中使用 `config` 字段直接创建 ConfigMap 内容,自定义指标将覆盖 DCSM Exporter 环境变量 `DCSM_EXPORTER_COLLECTORS` 指定的默认值。示例如下:
```bash
config:
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
```
```{admonition} 须知
:class: note
如自定义指标未生效,可使用 `kubectl get configmap -n moffett-spu-operator -o yaml` 命令查看 ConfigMap 内容,确认是否存在格式错误等问题。
```
### 常见部署场景
#### 防止在指定节点上部署相关组件
当 NFD 启用时,SPU Operator 默认为集群中所有 worker 节点打上标签 `feature.node.kubernetes.io/pci-1f36.present=true` 或 `feature.node.kubernetes.io/pci-1200_1f36.present=true`,并将 SOLA 驱动、Device Plugin 和 DCSM Exporter 组件部署到所有节点上。通过为指定节点添加标签,防止这些组件通过 SPU Operator 在这些节点上部署,步骤如下:
1. 查询集群中的节点信息。
```bash
kubectl get nodes
```
2. 为指定节点添加标签。
```bash
kubectl label nodes ...