MOFFETT SPU Operator 用户手册

Moffett SPU Operator 基于 Operator 框架,可自动部署并管理在 Kubernetes 中运行的墨芯相关软件组件,包括 Device Plugin 和 DCSM Exporter。可选择单独部署这两个组件,也可以通过 SPU Operator 统一部署。如需单独部署,请参见 MOFFETT Device Plugin 用户手册MOFFETT DCSM Exporter 用户手册

部署 SPU Operator

前提条件

操作步骤

  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 用户手册。如需采集自定义指标,可通过以下任一方式创建 ConfigMap,自定义指标将覆盖 DCSM_EXPORTER_COLLECTORS 指定的默认项。

    • 使用命令行创建 ConfigMap

      moffett-spu-operator 命名空间中执行以下命令,创建包含 CSV 格式指标数据的 ConfigMap:

      kubectl create configmap <name> --from-file=dcsm-metrics.csv=<custom_metric_file> -n moffett-spu-operator
      

      然后在 values.yaml 中通过 name 字段指定该 ConfigMap 名称。

    • values.yaml 中内嵌配置

      values.yaml 文件中使用 config 字段创建 ConfigMap,格式如下:

      config:
        name: <name>
        create: true
        data: |-
          <CSV 格式的自定义指标>
      

    须知

    如自定义指标未生效,可使用 kubectl get configmap <config-map-name> -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 用户手册DCSM Exporter 用户手册

更新 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 <node_name> NeedFix=true:NoSchedule                                       # 为指定节点添加 Taint,标记为不可调度
    kubectl describe node <node_name> | grep Taints                                               # 验证节点 Taint 是否生效
    kubectl delete pod <device-plugin_pod_name> <dcsm-exporter_pod_name> -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 <node_name> NeedFix=true:NoSchedule-
    

卸载 SPU Operator

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

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

    helm uninstall <name> -n moffett-spu-operator
    
  3. 删除 SPU Operator 相关资源。

    kubectl get crd | grep "moffett"                             # 检查 SPU Operator 相关的 CRD 资源
    kubectl delete crd <crd-name>                                # 删除 SPU Operator 相关的 CRD 资源
    kubectl get clusterrole,clusterrolebinding | grep "moffett"  # 验证 ClusterRole 和 ClusterRoleBinding 是否删除,如有相关资源,执行下方命令删除
    # kubectl delete <clusterrole-name>
    # kubectl delete <clusterrolebinding-name>
    
  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