您的位置:首页 > 其它

陈然: 容器生态系统的发展与演变之我见

2020-11-30 20:27 375 查看

原创 陈然 Linux阅码场 2017-07-14

作者简介
陈然,开源爱好者,Linux/Fedora深度用户,2006年毕业之后从事Linux和虚拟化相关工作。2010年开始关注openstack等云计算技术,2014年开始学习docker等容器技术。目前就职于VMware vSAN项目组,业务时间积极参与开源相关项目。

感谢陈然参与Linux的征稿活动,《在Linuxer上把一个问题说清或者看懂有惊喜》,将获得人民邮电、电子工业、机械工业任意在销书一本。

孰不可忍的情况下,docker推出linuxkit,希望借此一统容器运行平台的控制平面。最大的改变(亮点)有两种:

  1. everything service is container
    立足于linux平台,精简linuxkernel和服务启动流程。让docker containd变身id为1号的根进程。后续所有系统服务都采用容器方式运行。再后续的方向,无非裸机启动。容器已然演变成一个操作系统(任务会很艰巨,因为设备管理等常见os功能,这是另一项工程。)同时采用moby的“积木”模块,可以让用户迅速启动一套复杂的容器系统。

  2. docker can run on all platform
    扩展至所有平台。三大主流linux/win/mac一网打尽。利用linuxkit打包linuxkernel和initrd img,然后用平台虚拟化软件来启动这个docker os。这里容器和vm的界限已经很模糊,既是容器又是虚拟机。而linuxkit本身用go语言编程,运行在其他平台不是难事。
    linuxkit初探案例:
    http://feisky.xyz/2017/04/19/LinuxKit/

这种思路跟目前市场已经存在的
hypercontainer(https://hypercontainer.io/)

vSpherevic(https://vmware.github.io/vic/)
异曲同工。很难讲谁抄袭谁的思路。
假如linuxkit的原生运行容器方式大获成功,目前市场的各大容器os没有生存空间。docker基本平台一统天下,后面就到来发展生态圈的时刻。

  • kubernetes作为容器管理平台,完美的诠释来google的技术实力和战略眼光。但毕竟是容器的管理平台,需要定义在哪里运行容器。开源之后,各大IAAS平台纷纷支持,推出相应的cloudprovider,方便k8s进行控制平面。但google留了心眼,从一开始的插件设计,就考虑到支持不同的容器运行时。就是说docker那套运行时可以替换成第三方。这也从着侧面反应docker的亮点在于标准化的image。同时主导社区推出OCI基金会,标准化容器运行时,避免docker运行时一家独大。
Establishedin June 2015 by Docker and other leaders in the container industry, the OCIcurrently contains two specifications: the Runtime Specification (runtime-spec)and the Image Specification (image-spec). The Runtime Specification outlineshow to run a “filesystem bundle” that is unpacked on disk. At a high-level anOCI implementation would download an OCI Image then unpack that image into anOCI Runtime filesystem bundle. At this point the OCI Runtime Bundle would berun by an OCI Runtime.
...

采用标准意味着你可以用docker的命令来运行hyercontainer的容器方式。下面的例子实际上在运行hypercontainer。

# interminal #1
$docker-containerd --debug -l/var/run/docker/libcontainerd/docker-containerd.sock \ --runtime /path/to/runv--runtime-args --debug --runtime-args --driver=libvirt \ --runtime-args--kernel=/opt/hyperstart/build/kernel \ --runtime-args--initrd=/opt/hyperstart/build/hyper-initrd.img \ --start-timeout 2m
# interminal #2
$docker daemon -D -l debug--containerd=/var/run/docker/libcontainerd/docker-containerd.sock
# interminal #3 for trying it
$docker run busybox ls bin
...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: