第三方设备在runtime和编排系统下的现状如何?

Kubernetes支持Device Plugins

Nomad有自己的Device Plugins概念

Docker有一个in tree plugin机制

Podman有一个hooks概念

LXC有自己的钩子概念

Singularity(HPC运行时)有一个plugins的概念

还有些运行时几乎不支持第三方设备(例如:gVisor)

...

还有更多!

为什么说

“-- device  /dev/myDevice”是不够的?

在Linux系统下,一些简单的设备只需要能上报到节点即可。

然而,更多复杂的设备需要更加复杂的操作:

  • 需要上报到更多的设备节点

  • 需要检查容器和设备的兼容性(设备是否支持在该容器中运行)

  • 执行一些runtime的特殊操作

  • 执行一些设备的特殊操作(GPU内存释放或重新配置FPGA)

为什么

需要定义容器设备接口规范?

  • 用户体验不一致:

在runtime和编排系统上的体验各不相同(即使使用的是相同的runtime);

某些设备不支持特定的runtime。

  • 供应商体验更糟糕:

设备插件不能兼容所有runtime,无法直接切换;

维护成本高(大量的时间花费在特性兼容运行时上)。

使用场景

  • 使用场景1:Intel FPGA

英特尔FPGA被用于数据中心和工作站的许多不同使用场景(嵌入式SRAM、高速I/O、逻辑块等)

需要在容器中执行的操作:

1、挂载控制设备

2、以正确的方式重新配置FPGA,以免用户误操作

当前使用CRIO在容器中注入OCI钩子

  • 使用场景2:Mellanox NICs

Mellanox提供高性能Ethernet和Infiniband NIC用于许多数据中心和高性能集群

需要在容器中执行的操作(Linux):

1、挂载设备节点

2、挂载userland库从runtime命名空间到容器中

3、将userland库从运行时命名空间装载到容器中

4、更新sysfs

5、配置容器网络(CNI)

6、更多示例:

https://github.com/NVIDIA/enroot/blob/master/conf/hooks/99-mellanox.sh

  • 使用场景3:NVIDIA GPUs

NVIDIA提供的GPU可用于云上加速计算密集型操作。例如:深度学习、机器学习、高性能计算、数据可视化等

需要在容器中执行的操作(Linux):

1、挂载设备节点

2、挂载userland库从runtime命名空间到容器中

3、挂载Unix套接字(例如:persistenced、MPS、Xorg…)

4、更新procfs条目以隐藏未隔离的gpu

5、执行容器和GPU之间的兼容性检查

6、更多

(https://docs.google.com/document/d/10EGjF1nEGUD5060dJ-ZcJI2w7Ob4CLCvcn1lzKW6I4o/edit)

当前使用CRIO向OCI钩子或Docker的默认运行时注入运行时(runc)填充程序

Container Device Interface

  • 具备的能力:

基于JSON规范的CNI模型

描述计算机上可用的设备

描述运行时为使设备对容器可用而必须执行的操作

描述运行时应实现的CLI示例

  • 缺失的能力:

处理设备资源管理,例如:使用已被其他容器使用的设备

CDI实例(simple)

$ mkdir /etc/cdi

$ cat > /etc/cdi/vendor.json <<EOF

{

"cdiVersion": "0.2.0",

"kind": "vendor.com/device",

"cdiDevices": [

{

"name": "myDevice",

"containerSpec": {

"devices": [

{"hostPath": "/dev/card1", "containerPath": "/dev/card1"}

{"hostPath": "/dev/card-render1", "containerPath": "/dev/card-render1"}

],

}

}

]

EOF

$ alias runtime=podman/docker/…

# Verbose

$ runtime run --device vendor.com/device=myDevice --device vendor.com/device=myDevice2 …

# Less verbose, through inferring the vendor from the device name

$ runtime run --device myDevice …

# Special case

$ runtime run --device vendor.com/device=all …

CDI实例(Advanced 1/3)

$ mkdir /etc/cdi

$ cat > /etc/cdi/vendor.json <<EOF

{

"cdiVersion": "0.2.0",

"kind": "vendor.com/device",

"cdiDevices": [...],

"containerSpec": {

"devices": [

{"hostPath": "/dev/vendorctl", "containerPath": "/dev/vendorctl"}

]

}

EOF

“containerSpec”:指定在为容器请求设备时要执行的操作。

CDI实例(Advanced 2/3)

$ mkdir /etc/cdi

$ cat > /etc/cdi/vendor.json <<EOF

{

"cdiVersion": "0.2.0",

"kind": "vendor.com/device",

"cdiDevices": [...],

"containerSpec": {

"mounts": [

{"hostPath": "/bin/vendorBin", "containerPath": "/bin/vendorBin"},

{"hostPath": "/usr/lib/libVendor.so.0", "containerPath": "/usr/lib/libVendor.so"}

],

"hooks": [

{"create-container": {"path": "/bin/vendor-hook"} },

{"start-container": {"path": "/usr/bin/ldconfig"} }

]

}

EOF

“mounts”和“hooks”允许从runtime namespace挂载文件以及运行OCI钩子。

例如,在启动容器之前运行ldconfig。

CDI实例(Advanced 3/3)

$ mkdir /etc/cdi

$ cat > /etc/cdi/vendor-docker.json <<EOF

{

"cdiVersion": "0.2.0",

"kind": "vendor.com/device",

"runtime": "docker",

"cdiDevices": [ ... ]

}

EOF

runtime允许指定。

允许对不同的运行时使用不同的策略。

架构设计

Device Plugin

1.device plugin向kubelet注册资源socket

2.起grpc服务端

3.上报设备资源

4.调用api server将设备资源同步到节点

Kubernetes如何使用CDI?

1、k8s device plugin注册上报设备资源给kubelet

2、runtime起容器时调用CDI定义的接口执行相应操作

总结:

以k8s device plugin为例,CDI的优势有哪些?

1、统一容器设备接口规范(CDI)

2、支持device plugin向其他编排系统和runtime进行迁移

3、支持容器请求设备时执行指定操作

4、支持设备容器mounts和hooks

5、支持指定自定义runtime

6、支持解绑供应商指定runtime,可以通过mounts和hooks解决(nvidia-container-runtime)

尚待解决的地方

相同厂商的GPU设备,device plugin不支持指定具体型号进行挂载

继CRI CNI CSI后,CNCF对三方设备的管理也将推行标准化接口了相关推荐

  1. 谈谈对K8S CNI、CRI和CSI插件的理解

    K8S的设计初衷就是支持可插拔架构,解决PaaS平台不好用.不能用.需要定制化等问题,K8S集成了插件.附加组件.服务和接口来扩展平台的核心功能.附加组件被定义为与环境的其他部分无缝集成的组件,提供类 ...

  2. 工业App能否成为继Android和iOS后下一个App开发者的春天?

    为什么需要工业互联网平台? 只要会Java或者C或者HTML5就可以开发手机上的App,但是工业App跟手机App不一样,需要跟设备打交道,需要听懂设备.读懂设备. 传统工业应用软件往往开发难度大.开 ...

  3. 鸿蒙系统发布会门票,早鸟票最后一天!继鸿蒙系统发布后,华为又准备搞事情了!...

    原标题:早鸟票最后一天!继鸿蒙系统发布后,华为又准备搞事情了! 上一期,咱们说了2019华为全联接大会亮点抢先剧透. 共创智能新高度.华为将在全联接大会(下文简称HC)上发布华为云.全栈AI.鲲鹏等最 ...

  4. Android10双开不了微信,苹果终于坐不住了!继安卓微信双开后,苹果也宣布微信双开功能...

    原标题:苹果终于坐不住了!继安卓微信双开后,苹果也宣布微信双开功能 欧界报道: 据1月31日消息称,就在刚刚,微信在苹果App Store里上线了6.6.2正式版.在这版本中,相必最受欢迎的就是允许微 ...

  5. 南京邮电大学计算机自杀,南京邮电大学研究生导师逼死学生?继蒋同学自杀后又一人意外身亡!...

    南京邮电大学研究生导师逼死学生?继蒋同学自杀后又一人意外身亡! 2020年考研刚刚结束不久,本该是考研的同学等待成绩公布,好好准备复试的时候,一则令人伤心的新闻触动了很多考研党的心神.南京邮电大学发布 ...

  6. ST_Settings_Applications_018-应用管理:默认应用程序:桌面(安装第三方桌面后,在三方桌面,原生桌面,锤子桌面之间来回切换)

    桌面切换 import os from runner.application.testcasebase import TestCaseBase from runner.common.runnerlog ...

  7. 华为首款搭载鸿蒙系统手机,继鸿蒙手机操作系统后,华为宣布将于6月2日同时发布首款鸿蒙平板...

    原标题:继鸿蒙手机操作系统后,华为宣布将于6月2日同时发布首款鸿蒙平板 封面新闻记者 张越熙 5月28日早间,华为方面宣布,将于6月2日发布搭载鸿蒙操作系统的华为MatePad Pro和全新HUAWE ...

  8. 华为河图鸿蒙,继鸿蒙、麒麟后,华为又亮剑,新引擎河图曝光,抗衡谷歌又一招!...

    原标题:继鸿蒙.麒麟后,华为又亮剑,新引擎河图曝光,抗衡谷歌又一招! 来源:今日商讯 华为麒麟芯片.鸿蒙系统的相继亮相,让众多国外手机品牌商看到了中国的手机企业的研发实力,而且每一个发布的创新产品都能 ...

  9. SSM配置后可以访问静态html文件但无法访问其他后台接口的解决方案

    SSM配置后可以访问静态html文件但无法访问其他后台接口的解决方案 参考文章: (1)SSM配置后可以访问静态html文件但无法访问其他后台接口的解决方案 (2)https://www.cnblog ...

最新文章

  1. LSASRV事件ID:40960
  2. H5中滚动卡顿的问题
  3. Laravel中使用模型对数据进行操作
  4. 学计算机趣图,我的世界:六张玩家自制趣图,最后一张,想起了“骗”父母买电脑...
  5. 二分图的最大匹配 匈牙利算法
  6. smoke中文_smoke的意思在线翻译,解释smoke中文英文含义,短语词组,音标读音,例句,词源【澳典网ODict.Net】...
  7. 第十章:禁丹药,禁符纸
  8. Docker学习总结(40)——Docker常见应用场景再总结
  9. AcWing 2041. 干草堆(差分)
  10. 如何通过电影种子名选择合适的电影
  11. udpSocket捕获ICMP不可达错误
  12. Quartus II中通过调用IP核实现RS编解码
  13. php 在线拍卖系统源码,php拍卖系统,源码
  14. Redis--huan
  15. jquery获取style
  16. 程序员有话说 | 我成了敲代码的“佛教徒”
  17. iOS 5 故事板进阶(4)
  18. 【顺序、分支、循环、子程序设计】—— 微机原理实验
  19. STM32 通用GPIO模拟I2C实现
  20. 神经网络(Neural Networks)简介

热门文章

  1. 3.分治算法的设计思想与分析方法: 芯片测试, 快速排序, 幂乘算法, 减少子问题数, 增加预处理
  2. 1.1 计算机基础知识,1[1]计算机基础知识
  3. ubuntu14无法复制文件
  4. 计算机制作表格的结论,计算机基础实验报告电子表格处理-20210320050712.docx-原创力文档...
  5. 创业不跟风,教你掌握几个创业必备的因素
  6. 使用SQL语句 查询电话号码 加密显示
  7. java计算机毕业设计框架的报修系统源程序+mysql+系统+lw文档+远程调试
  8. ubuntu绑定usb设备以及摄像头端口地址(编号)
  9. sql 数据库前两列值乘_懂EXCEL就会SQL,从此查数不求人
  10. 本草纲目pdf彩图版下载_本草纲目彩图版(全二册)