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。
安装容器运行时,具体请参见容器运行时。
操作步骤
获取 Device Plugin 容器镜像。
docker pull moffett/k8s-device-plugin:v0.3.0
wget https://moffett-oss-bucket.tos-cn-shanghai.volces.com/CloudNative/k8s-device-plugin/moffett-k8s-device-plugin-v0.3.0.tar docker load -i moffett-k8s-device-plugin-v0.3.0.tar
获取并部署 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
验证 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 容器运行时。
编写 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
创建并运行 Pod。
kubectl create -f moffett-qual-list.yml
查看 Pod 状态。
kubectl get pod qual-list-pod
# STATUS = Completed 表示任务已完成 NAME READY STATUS RESTARTS AGE qual-list-pod 0/1 Completed 0 11m
查看 Pod 日志中
mx-qual list命令运行的结果。kubectl logs qual-list-pod
删除 Pod。
kubectl delete pod qual-list-pod
停用 Device Plugin
当更新 SOLA Toolkit 时,Device Plugin 服务会影响 SOLA Toolkit 卸载,需通过以下步骤在指定节点停用 Device Plugin:
查询集群中部署的 Device Plugin 所有 Pod 的详细信息。
kubectl get pod -l name=moffett-device-plugin-ds -n kube-system -o wide
为集群的指定节点添加污点(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
kubectl delete -f moffett-device-plugin.yml