MOFFETT SPU Operator 用户手册
MOFFETT SPU Operator 使用 Operator 框架统一部署和管理在 Kubernetes 中运行的 SOLA 驱动、Device Plugin 和 DCSM Exporter 组件。
如需通过 SPU Operator 部署 SOLA 驱动,需确保节点主机上未安装 SOLA Toolkit。如需单独部署 Device Plugin 和 DCSM Exporter 组件,请参见 MOFFETT Device Plugin 用户手册 和 MOFFETT DCSM Exporter 用户手册。
部署 SPU Operator
前提条件
部署 Kubernetes 集群,具体请参见 安裝 K8s 集群。
安装 kubectl 命令行工具并具有对集群的访问权限,具体请参见 在 Linux 系统中安装并设置 kubectl。
安装 Helm 3,具体请参见 安装 Helm。
操作步骤
获取 SPU Operator 的 Helm Chart 包。
wget https://moffett-release.tos-cn-guangzhou.volces.com/macs/macs-v1.10/spu-operator/spu-operator-v1.1.0.tgz部署 SPU Operator。
安装 SPU Operator 时使用默认配置。
helm install spu-operator \ -n moffett-spu-operator --create-namespace \ spu-operator-v1.1.0.tgz
安装 SPU Operator 时指定配置选项。
helm install spu-operator \ -n moffett-spu-operator --create-namespace \ spu-operator-v1.1.0.tgz \ --set <option-name>=<option-value> # 推荐配置示例 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
常见自定义全局配置项
下表列出了使用 Helm 部署 SPU Operator 时可通过 --set 配置的常用参数项。执行 helm show values spu-operator-v1.1.0.tgz 命令可查看所有可用选项。可提取 Helm Chart 中的配置到 values.yaml 文件,修改后更新 Operator 配置,具体请参见更新 SPU Operator。
| 配置项 | 描述 | 默认值 |
|---|---|---|
nfd.enabled |
是否启用 Node Feature Discovery(NFD)特性。 | 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 驱动。true 适用于节点上未安装 SOLA Toolkit 的场景;false 适用于节点上已安装 SOLA Toolkit 的场景。 |
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 用户手册。如需采集自定义指标,可通过以下任一方式创建 ConfigMap:
执行以下命令创建包含 CSV 格式指标数据的 ConfigMap, 并在
values.yaml文件中 DCSM Exporter 环境变量的DCSM_EXPORTER_COLLECTORS字段指定该 ConfigMap。kubectl create configmap <name> --from-file=dcsm-metrics.csv=<custom_metric_file> -n moffett-spu-operator
在
values.yaml文件中使用config字段直接创建 ConfigMap 内容,自定义指标将覆盖 DCSM Exporter 环境变量DCSM_EXPORTER_COLLECTORS指定的默认值。示例如下: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
须知
如自定义指标未生效,可使用 kubectl get configmap <name> -n moffett-spu-operator -o yaml 命令查看 ConfigMap 内容,确认是否存在格式错误等问题。
仅在指定 SPU 节点上部署相关组件
SPU Operator 通过识别 NFD 打的标签(feature.node.kubernetes.io/pci-1f36.present=true 或 feature.node.kubernetes.io/pci-1200_1f36.present=true)来定位 SPU 节点,并在这些节点上安装相关组件。
默认情况下,SPU Operator 会将其各组件(operands)部署到集群中所有具备 SPU 的工作节点上。这些组件包括 SOLA 驱动、Device Plugin 和 DCSM Exporter。如需禁止在某个 SPU 节点上部署这些组件,可为该节点添加以下标签:
kubectl label nodes <node> moffett.ai/spu.deploy.operands=false [--overwrite] # 禁止在该节点上部署 SPU Operator 的所有组件
如需禁止在某个 SPU 节点上部署指定的组件,可为该节点添加以下标签:
kubectl label nodes <node> moffett.ai/spu.deploy.driver=false [--overwrite] # 禁止在该节点上通过镜像安装 SOLA 驱动
kubectl label nodes <node> moffett.ai/spu.deploy.dcsm-exporter=false [--overwrite] # 禁止在该节点上部署 DCSM Exporter
kubectl label nodes <node> moffett.ai/spu.deploy.device-plugin=false [--overwrite] # 禁止在该节点上部署 Device Plugin
如需恢复在指定节点上部署这些组件,修改该节点标签的值为 true; 覆盖已有标签,需指定 --overwrite 参数。
验证 SPU Operator
SPU Operator 部署完成后,检查其组件是否成功运行。
须知
受网络环境影响,所有组件 Pod 成功运行需等待一段时间。
kubectl get pod -n moffett-spu-operator # 当各组件 pod 的 STATUS = running(READY = 1/1)时,组件部署成功。
使用 Device Plugin 和 DCSM Exporter
关于这两个组件在 Kubernetes 集群环境中的应用,请参见 MOFFETT Device Plugin 用户手册和 DCSM Exporter 用户手册。
更新 SPU Operator
SPU Operator 支持通过升级 CRD 的 Helm hook(operator.upgradeCRD)自动升级 CRD 资源,该 Hook 默认启用。通过 Helm 更新 Operator 的步骤如下:
提取 Helm Chart 中的配置到
values.yaml文件。helm show values spu-operator-v1.1.0.tgz > values.yaml
更新
values.yaml中的配置项。vim values.yaml更新 SPU Operator。
helm upgrade spu-operator spu-operator-v1.1.0.tgz -n moffett-spu-operator --disable-openapi-validation -f values.yaml
须知
为防止 Helm 根据旧版 CRD 验证新 Chart 中的自定义资源(Custom Resource,CR)实例,必须使用
--disable-openapi-validation选项。
卸载 SPU Operator
查看部署的 SPU Operator 名称。
helm list -n moffett-spu-operator
通过 Helm 卸载 SPU Operator。
helm uninstall <name> -n moffett-spu-operator
(可选)如果未启用通过 Helm 卸载 SPU Operator 时删除 CRD(
operator.cleanupCRD=false),执行以下命令手动删除。kubectl get crd | grep "moffett" # 检查是否有 SPU Operator 相关的 CRD kubectl delete crd <crd-name> # 删除查询到的 CRD
删除 SPU Operator 的 namespace。
kubectl delete ns moffett-spu-operator
验证卸载是否完成。
kubectl get all -A | grep spu-operator kubectl get ns | grep moffett-spu-operator