Notice: Constant WP_DEBUG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 12

Notice: Constant WP_DEBUG_LOG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 13

Notice: Constant WP_DEBUG_DISPLAY already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 14
【转载】深夜福利, 小试linuxkit – zoues

LOADING

Follow me

【转载】深夜福利, 小试linuxkit
四月 20, 2017|DockerPaaS

【转载】深夜福利, 小试linuxkit

【转载】深夜福利, 小试linuxkit

前言

今天小编的朋友圈被DockerCon和linuxkit刷屏了,再不出来写点linuxkit的东东恐怕就要跟不上时代了。小编翻阅了N多的有关linuxkit的文章,发现绝大多数都是英文的讲解,小编本着对读者负责的态度决定先将linuxkit的文章翻译成中文,然后再亲手小试一下linuxkit,看看它究竟是个什么东东?

linuxkit简介

简而言之,linuxkit就是用来编译生成一个定制化linux镜像的工具集合。为什么要定制化linux?话说在如今发展的如火如荼的云计算中,传统的linux发行版,比如ubuntu,rhel等等无论从体积还是启动效率都比较落后,先说体积,云端的虚机操作系统中完全可以裁剪很多不必要的组件下去,比如跟显示相关的配置,驱动等等,甚至只需要一个containerd的环境(因为这个基础OS的唯一目的就是启动用户基于容器的上层应用)。从启动效率上讲,经过裁剪过后的精简版OS往往能做到秒级的启动,并且从安全性上来说比容器要安全很多,比如隔离性。还有就是由于精简OS镜像裁剪了很多不必要的组件下去,同时也就缩小了被攻击的范围,相对传统的OS要安全很多。

其实很多厂商都在实现精简版OS,比如CoreOS,RancherOS,Atomic等等,这些精简linux发行版基本都把体积控制在了百兆之内,有的甚至几十兆。相比这些精简OS,linuxkit又有什么特点呢?首先是它的高度灵活性和可定制化。我们可以通过一个yaml文件,里面指定linux内核版本,需要打包进去的组件就可以build生成一个ISO镜像了。通过yaml配置的好处是实现了基础设施即代码,可以通过版本控制软件比如git来管理起来。另外一个特点是通过linuxkit编译出的镜像中的服务都是通过容器方式来运行的。真正做到了Built with containers, for running containers。

废话不说,先看看用来生成OS镜像的yaml配置文件长什么样子:

kernel:   image: "mobylinux/kernel:4.9.x"   cmdline: "console=ttyS0 console=tty0 page_poison=1" init:   - linuxkit/init:42fe8cb1508b3afed39eb89821906e3cc7a70551   - mobylinux/runc:b0fb122e10dbb7e4e45115177a61a3f8d68c19a9   - linuxkit/containerd:60e2486a74c665ba4df57e561729aec20758daed   - mobylinux/ca-certificates:eabc5a6e59f05aa91529d80e9a595b85b046f935 onboot:   - name: sysctl     image: "mobylinux/sysctl:2cf2f9d5b4d314ba1bfc22b2fe931924af666d8c"     net: host     pid: host     ipc: host     capabilities:      - CAP_SYS_ADMIN     readonly: true   - name: binfmt     image: "linuxkit/binfmt:8881283ac627be1542811bd25c85e7782aebc692"     binds:      - /proc/sys/fs/binfmt_misc:/binfmt_misc     readonly: true   - name: dhcpcd     image: "linuxkit/dhcpcd:48e249ebef6a521eed886b3bce032db69fbb4afa"     binds:      - /var:/var      - /tmp/etc:/etc     capabilities:      - CAP_NET_ADMIN      - CAP_NET_BIND_SERVICE      - CAP_NET_RAW     net: host     command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf", "-1"] services:   - name: rngd     image: "mobylinux/rngd:3dad6dd43270fa632ac031e99d1947f20b22eec9"     capabilities:      - CAP_SYS_ADMIN     oomScoreAdj: -800     readonly: true   - name: nginx     image: "nginx:alpine"     capabilities:      - CAP_NET_BIND_SERVICE      - CAP_CHOWN      - CAP_SETUID      - CAP_SETGID      - CAP_DAC_OVERRIDE     net: host files:   - path: etc/docker/daemon.json     contents: '{"debug": true}' trust:   image:     - mobylinux/kernel outputs:   - format: kernel+initrd   - format: iso-bios   - format: iso-efi

  • kernel字段定义了OS镜像对应的内核版本,这个内核也是放在一个Docker镜像中的。

  • init字段中定义了系统启动时的初始化顺序,其中最主要的就是containerd容器运行时环境。

  • onboot字段包含了系统级的服务,这些服务都是通过containerd的方式启动的。

  • services字段包括了镜像启动后需要执行的服务,

  • files字段包含了制作镜像时需要额外打包入镜像中的文件,有点类似于cloud-config中的write_files.

  • outputs定义了镜像的输出格式。

在编译生成OS镜像之前,我们还需要编译moby,非常简单,在项目根目录下运行make就可以了,moby生成的路径在根目录下的bin文件夹中,讲moby复制到/usr/bin/目录中即可。

编写好linuxkit.yaml文件后,就可以直接通过moby命令生成linux镜像了,运行命令:moby build linuxkit.yaml,过几分钟就能看到生成的镜像文件了:

深夜福利, 小试linuxkit

可以看到这个linuxkit镜像文件只有几十兆,把linuxkit.iso文件拷贝到我的本地windows 10上面,使用hyper-v启动一个虚机,并将这个iso镜像加载进来,点击启动,很快(大概不到10秒)就看到系统界面了:

深夜福利, 小试linuxkit

可以使用ctr list命令看看系统启动了哪些服务:

深夜福利, 小试linuxkit

可以看到,这两个服务就是我们在配置文件中的services字段中指定的服务。

后记

linuxkit设计之初就考虑到了在容器集群中使用的场景,借用官方的一句话:可以(但不仅限于)在Docker或者Kubernetes集群中使用,我们也可以使用linuxkit编译生成的OS镜像作为本地数据中心的基础OS镜像,但是由于linuxkit还是一个早期的产品,官方也明确表示不建议在生产环境中使用,等到今年下半年的时候可能会有个正式版发布,让我们拭目以待吧。

原文地址:http://mp.weixin.qq.com/s/-lIzGc5covOi0uRQLWZuFg


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

深夜福利, 小试linuxkit

no comments
Share