MLU100设备插件(Kubernetes)

本插件是基于intel-device-plugin实现,由于设备的挂载、调⽤等接⼝与设备类型⽆关,所以只需修改scan接⼝即可。
部署过程:

1. 下载intel-device-plugin

$ mkdir -p $GOPATH/src/github.com/intel/
$ cd $GOPATH/src/github.com/intel/
$ git clone https://github.com/intel/intel-device-plugins-for-kubernetes.git

2. 验证kubelet是否已经安装

$ ls /var/lib/kubelet/device-plugins/kubelet.sock
/var/lib/kubelet/device-plugins/kubelet.sock

3. 修改的⽂件为: intel-device-plugins-for-kubernetes/cmd/gpu_plugin/gpu_plugin.go

// 需要修改的⽂件为: intel-device-plugins-forkubernetes/cmd/gpu_plugin/gpu_plugin.go
const (
	devfsDriDirectory = "/dev"    //设备⽬录
	gpuDeviceRE       = `^cambricon_c10Dev[0-9]+$`    //设备名称的正则表达式

	// Device plugin settings.
	namespace  = "mlu100.com"    //设备注册的域名
	deviceType = "i915"    //设备注册的类型
)

4. 实现scan接⼝供 func (dp *devicePlugin) Scan(notifier dpapi.Notifier) error ⽤,该接⼝的功能是扫描系统/dev⽬录下符合上述正则表达式的设备,并返回设备列表

// 需要修改的⽂件为: intel-device-plugins-forkubernetes/cmd/gpu_plugin/gpu_plugin.go
func (dp *devicePlugin) scan() (dpapi.DeviceTree, error) {
	files, err := ioutil.ReadDir(dp.devfsDir)
	if  err != nil {
		fmt.Println("something error")
		return nil, err
	}
	i := 0
	devTree := dpapi.NewDeviceTree()
	for _, f := range files {
		var nodes []pluginapi.DeviceSpec
		if dp.gpuDeviceReg.MatchString(f.Name()) {
			devPath := path.Join(dp.devfsDir, f.Name())    //设备的绝对路径
			fmt.Printf("%s\n", devPath)
			nodes = append(nodes, pluginapi.DeviceSpec{    //一个设备对应一个node
				HostPath:      devPath,
				ContainerPath: devPath,
				Permissions:   "rw",
			})
			devID := fmt.Sprintf("%s-%d", f.Name(), i)
			devTree.AddDevice(deviceType, devID, dpapi.DeviceInfo{    //添加设备到设备列表
				State: pluginapi.Healthy,    //设备健康状态
				Nodes: nodes,
			})
			i += 1
		}
	}
	return devTree, nil
}

修改部分无效的内容

5. 部署GPU设备插件作为主机进程用于开发目的(此步骤可以省略)

5.1 编译

cd $GOPATH/src/github.com/intel/intel-device-plugins-for-kubernetes
make gpu_plugin # 编译代码

5.2 以管理员身份运行

$ sudo $GOPATH/src/github.com/intel/intel-device-plugins-for-kubernetes/cmd/gpu_plugin/gpu_plugin
device-plugin start server at: /var/lib/kubelet/device-plugins/gpu.intel.com-i915.sock
device-plugin registered

6. 以DaemonSet方式部署插件

6.1 编译

cd $GOPATH/src/github.com/intel/intel-device-plugins-for-ku
make gpu_plugin # 编译代码
make intel-gpu-plugin # ⽣成镜像intel-gpu-plugin
docker tag SOURCE_IMAGE[:TAG] yumingc/intel-gpu-plugin:v2 #更改镜像的名字
docker push yumingc/intel-gpu-plugin:v2 #上传docker hub便于下载使用

6.2 编写yaml文件gpu_plugin.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: intel-gpu-plugin
  namespace: kube-system
  labels:
    app: intel-gpu-plugin
spec:
  selector:
    matchLabels:
      app: intel-gpu-plugin
  template:
    metadata:
      labels:
        app: intel-gpu-plugin
    spec:
      containers:
      - name: intel-gpu-plugin
        env:
          - name: archlab-sys-7048gr-tr
            valueFrom:
              fieldRef:
                fieldPath: spec.nodeName
        image: yumingc/intel-gpu-plugin:v2 #更改为上述更名的镜像
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: devfs
          mountPath: /dev
        - name: sysfs
          mountPath: /sys
        - name: kubeletsockets
          mountPath: /var/lib/kubelet/device-plugins
      volumes:
      - name: devfs
        hostPath:
          path: /dev
      - name: sysfs
        hostPath:
          path: /sys
      - name: kubeletsockets
        hostPath:
          path: /var/lib/kubelet/device-plugins

6.3 运行yaml

kubectl create -f gpu_plugin.yaml

参考文献:

intel-device-plugin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值