深夜福利, 小试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字段定義了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.iso文件拷貝到我的本地windows 10上面,使用hyper-v啟動一個虛機,并將這個iso鏡像加載進來,點擊啟動,很快(大概不到10秒)就看到系統界面了:
可以使用ctr list命令看看系統啟動了哪些服務:
可以看到,這兩個服務就是我們在配置文件中的services字段中指定的服務。
后記
linuxkit設計之初就考慮到了在容器集群中使用的場景,借用官方的一句話:可以(但不僅限于)在Docker或者Kubernetes集群中使用,我們也可以使用linuxkit編譯生成的OS鏡像作為本地數據中心的基礎OS鏡像,但是由于linuxkit還是一個早期的產品,官方也明確表示不建議在生產環境中使用,等到今年下半年的時候可能會有個正式版發布,讓我們拭目以待吧。
原文地址:http://mp.weixin.qq.com/s/-lIzGc5covOi0uRQLWZuFg
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的深夜福利, 小试linuxkit的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET或将引入类型类和扩展
- 下一篇: .NET Core 2.0及.NET S