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

前提条件

操作步骤

  1. 获取 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
    
  2. 部署 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=truefeature.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 的步骤如下:

  1. 提取 Helm Chart 中的配置到 values.yaml 文件。

    helm show values spu-operator-v1.1.0.tgz > values.yaml
    
  2. 更新 values.yaml 中的配置项。

    vim values.yaml
    
  3. 更新 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

  1. 查看部署的 SPU Operator 名称。

    helm list -n moffett-spu-operator
    
  2. 通过 Helm 卸载 SPU Operator。

    helm uninstall <name> -n moffett-spu-operator
    
  3. (可选)如果未启用通过 Helm 卸载 SPU Operator 时删除 CRD(operator.cleanupCRD=false),执行以下命令手动删除。

    kubectl get crd | grep "moffett" # 检查是否有 SPU Operator 相关的 CRD
    kubectl delete crd <crd-name>    # 删除查询到的 CRD
    
  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