继CRI CNI CSI后,CNCF对三方设备的管理也将推行标准化接口了
第三方设备在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对三方设备的管理也将推行标准化接口了相关推荐
- 谈谈对K8S CNI、CRI和CSI插件的理解
K8S的设计初衷就是支持可插拔架构,解决PaaS平台不好用.不能用.需要定制化等问题,K8S集成了插件.附加组件.服务和接口来扩展平台的核心功能.附加组件被定义为与环境的其他部分无缝集成的组件,提供类 ...
- 工业App能否成为继Android和iOS后下一个App开发者的春天?
为什么需要工业互联网平台? 只要会Java或者C或者HTML5就可以开发手机上的App,但是工业App跟手机App不一样,需要跟设备打交道,需要听懂设备.读懂设备. 传统工业应用软件往往开发难度大.开 ...
- 鸿蒙系统发布会门票,早鸟票最后一天!继鸿蒙系统发布后,华为又准备搞事情了!...
原标题:早鸟票最后一天!继鸿蒙系统发布后,华为又准备搞事情了! 上一期,咱们说了2019华为全联接大会亮点抢先剧透. 共创智能新高度.华为将在全联接大会(下文简称HC)上发布华为云.全栈AI.鲲鹏等最 ...
- Android10双开不了微信,苹果终于坐不住了!继安卓微信双开后,苹果也宣布微信双开功能...
原标题:苹果终于坐不住了!继安卓微信双开后,苹果也宣布微信双开功能 欧界报道: 据1月31日消息称,就在刚刚,微信在苹果App Store里上线了6.6.2正式版.在这版本中,相必最受欢迎的就是允许微 ...
- 南京邮电大学计算机自杀,南京邮电大学研究生导师逼死学生?继蒋同学自杀后又一人意外身亡!...
南京邮电大学研究生导师逼死学生?继蒋同学自杀后又一人意外身亡! 2020年考研刚刚结束不久,本该是考研的同学等待成绩公布,好好准备复试的时候,一则令人伤心的新闻触动了很多考研党的心神.南京邮电大学发布 ...
- ST_Settings_Applications_018-应用管理:默认应用程序:桌面(安装第三方桌面后,在三方桌面,原生桌面,锤子桌面之间来回切换)
桌面切换 import os from runner.application.testcasebase import TestCaseBase from runner.common.runnerlog ...
- 华为首款搭载鸿蒙系统手机,继鸿蒙手机操作系统后,华为宣布将于6月2日同时发布首款鸿蒙平板...
原标题:继鸿蒙手机操作系统后,华为宣布将于6月2日同时发布首款鸿蒙平板 封面新闻记者 张越熙 5月28日早间,华为方面宣布,将于6月2日发布搭载鸿蒙操作系统的华为MatePad Pro和全新HUAWE ...
- 华为河图鸿蒙,继鸿蒙、麒麟后,华为又亮剑,新引擎河图曝光,抗衡谷歌又一招!...
原标题:继鸿蒙.麒麟后,华为又亮剑,新引擎河图曝光,抗衡谷歌又一招! 来源:今日商讯 华为麒麟芯片.鸿蒙系统的相继亮相,让众多国外手机品牌商看到了中国的手机企业的研发实力,而且每一个发布的创新产品都能 ...
- SSM配置后可以访问静态html文件但无法访问其他后台接口的解决方案
SSM配置后可以访问静态html文件但无法访问其他后台接口的解决方案 参考文章: (1)SSM配置后可以访问静态html文件但无法访问其他后台接口的解决方案 (2)https://www.cnblog ...
最新文章
- LSASRV事件ID:40960
- H5中滚动卡顿的问题
- Laravel中使用模型对数据进行操作
- 学计算机趣图,我的世界:六张玩家自制趣图,最后一张,想起了“骗”父母买电脑...
- 二分图的最大匹配 匈牙利算法
- smoke中文_smoke的意思在线翻译,解释smoke中文英文含义,短语词组,音标读音,例句,词源【澳典网ODict.Net】...
- 第十章:禁丹药,禁符纸
- Docker学习总结(40)——Docker常见应用场景再总结
- AcWing 2041. 干草堆(差分)
- 如何通过电影种子名选择合适的电影
- udpSocket捕获ICMP不可达错误
- Quartus II中通过调用IP核实现RS编解码
- php 在线拍卖系统源码,php拍卖系统,源码
- Redis--huan
- jquery获取style
- 程序员有话说 | 我成了敲代码的“佛教徒”
- iOS 5 故事板进阶(4)
- 【顺序、分支、循环、子程序设计】—— 微机原理实验
- STM32 通用GPIO模拟I2C实现
- 神经网络(Neural Networks)简介
热门文章
- 3.分治算法的设计思想与分析方法: 芯片测试, 快速排序, 幂乘算法, 减少子问题数, 增加预处理
- 1.1 计算机基础知识,1[1]计算机基础知识
- ubuntu14无法复制文件
- 计算机制作表格的结论,计算机基础实验报告电子表格处理-20210320050712.docx-原创力文档...
- 创业不跟风,教你掌握几个创业必备的因素
- 使用SQL语句 查询电话号码 加密显示
- java计算机毕业设计框架的报修系统源程序+mysql+系统+lw文档+远程调试
- ubuntu绑定usb设备以及摄像头端口地址(编号)
- sql 数据库前两列值乘_懂EXCEL就会SQL,从此查数不求人
- 本草纲目pdf彩图版下载_本草纲目彩图版(全二册)