MOFFETT Device Plugin 用户手册

MOFFETT Device Plugin 基于 Kubernetes 设备插件框架实现,用于将墨芯 SPU 设备资源注册到 Kubelet。该组件以 DaemonSet 的形式部署,可以在 Kubernetes 集群的各个节点注册墨芯 SPU 设备,跟踪 SPU 设备状态,并运行支持 SPU 设备的容器。

须知

Device Plugin 可单独部署或通过 SPU Operator 统一部署,任选一种方式以避免冲突。通过 SPU Operator 部署的详细操作请参见 MOFFETT SPU Operator 用户手册

部署 Device Plugin

前提条件

  • 安装 SOLA Toolkit,具体请参见 SOLA Toolkit 安装指南

  • 部署 Kubernetes ≥ 1.10;如需使用 CDI 功能,Kubernetes ≥ 1.28。

  • 安装容器运行时,具体请参见容器运行时

操作步骤

  1. 获取 Device Plugin 容器镜像。

    docker pull moffett/k8s-device-plugin:v0.3.0
    
  2. 获取并部署 Device Plugin。

    wget https://moffett-oss-bucket.tos-cn-shanghai.volces.com/CloudNative/k8s-device-plugin/moffett-device-plugin.yml
    kubectl create -f moffett-device-plugin.yml
    
  3. 验证 Device Plugin 状态。

    kubectl get pod -n kube-system -l name=moffett-device-plugin-ds
    
    # STATUS = running(READY = 1/1)表示 Pod 启动正常
    NAME                                    READY   STATUS    RESTARTS   AGE
    moffett-device-plugin-daemonset-bm9dc   1/1     Running   0          10s
    

运行示例

以下示例基于 Docker 容器运行时。

  1. 编写 Pod 配置文件 moffett-qual-list.yml,定义请求 2 个 SPU 设备并执行 mx-qual list 命令的 Pod。

    apiVersion: v1
    kind: Pod
    metadata:
      name: qual-list-pod
    spec:
      restartPolicy: Never
      containers:
      - name: sola-container
        image: moffett/macs-base:sola-3.12.0 # 自定义镜像,包含 SOLA Toolkit 3.12.0 版本
        args: ['mx-qual', 'list'] # 容器启动参数,即运行 mx-qual list 命令
        resources:
          limits:
            moffett.ai/spu: 2  # 申请使用 2 个 SPU 设备
      tolerations:
      - key: moffett.ai/spu
        operator: Exists
        effect: NoSchedule
    
  2. 创建并运行 Pod。

    kubectl create -f moffett-qual-list.yml
    
  3. 查看 Pod 状态。

    kubectl get pod qual-list-pod
    
    # STATUS = Completed 表示任务已完成
    NAME            READY   STATUS      RESTARTS   AGE
    qual-list-pod   0/1     Completed   0          11m
    
  4. 查看 Pod 日志中 mx-qual list 命令运行的结果。

    kubectl logs qual-list-pod
    
  5. 删除 Pod。

    kubectl delete pod qual-list-pod
    

停用 Device Plugin

当更新 SOLA Toolkit 时,Device Plugin 服务会影响 SOLA Toolkit 卸载,需通过以下步骤在指定节点停用 Device Plugin:

  1. 查询集群中部署的 Device Plugin 所有 Pod 的详细信息。

    kubectl get pod -l name=moffett-device-plugin-ds -n kube-system -o wide
    
  2. 为集群的指定节点添加污点(Taint)并删除该节点上 Device Plugin 相关 Pod。

    kubectl taint nodes <node_name> NeedFix=true:NoSchedule                                                        # 为指定节点添加 Taint,标记为不可调度
    kubectl describe node <node_name> | grep Taints                                                                # 验证节点 Taint 是否生效
    kubectl delete pod -l name=moffett-device-plugin-ds -n kube-system --field-selector spec.nodeName=<node_name>  # 删除指定节点上 Device Plugin 的 Pod
    kubectl get pod -n kube-system -o wide                                                                         # 验证 Pod 状态
    

    如需 Kubernetes 重新调度 Device Plugin 的 Pod,移除 Taint。

    kubectl taint nodes <node_name> NeedFix=true:NoSchedule-
    

卸载 Device Plugin

kubectl delete daemonset moffett-device-plugin-daemonset -n kube-system