摘要:但當(dāng)時(shí)并沒有進(jìn)行正式版發(fā)布,轉(zhuǎn)而三個(gè)月后,稍做了更新。發(fā)布周期不明確。總結(jié)以上就是本次關(guān)于發(fā)布時(shí)的一些碎碎念,對(duì)這種情況頗有感慨,符合規(guī)范并沒有那么好做,尤其是做基礎(chǔ)支撐的時(shí)候。
如果你在用 Docker 或者 Kubernetes 想必你對(duì) 容器運(yùn)行時(shí) 這個(gè)概念應(yīng)該不會(huì)太陌生。
在 Docker 中,當(dāng)你使用 docker info 即可查看當(dāng)前所使用的 runtime。
? ~ docker info ... Server Version: 18.06.1-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs ... Swarm: inactive Runtimes: nvidia runc Default Runtime: runc Init Binary: docker-init containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e runc version: 69663f0bd4b60df09991c08812a60108003fa340 init version: fec3683 Security Options: seccomp Profile: default ...
同時(shí),你還可以自己在 /etc/docker/daemon.json 中增加支持的 runtime , 以及在 docker run 的時(shí)候,通過 --runtime 參數(shù)配置所使用的 runtime 。
什么是 runc簡單來說,它是 OCI 標(biāo)準(zhǔn)的一種實(shí)現(xiàn)。 OCI 標(biāo)準(zhǔn)包含 運(yùn)行時(shí)標(biāo)準(zhǔn) 和 鏡像標(biāo)準(zhǔn) 兩個(gè)部分,而 OCI 這個(gè)組織則是由 Docker, CoreOS 和其他的一些公司共同發(fā)起創(chuàng)建的,致力于將容器運(yùn)行時(shí)和格式標(biāo)準(zhǔn)化。
即:凡是遵守此標(biāo)準(zhǔn)的實(shí)現(xiàn),無論是 Docker 還是 rkt 或者其他的運(yùn)行時(shí)實(shí)現(xiàn),均可以通過標(biāo)準(zhǔn)的鏡像啟動(dòng)容器。
runc 則是在 OCI 成立后,Docker 將其容器運(yùn)行時(shí) libcontainer 貢獻(xiàn)出來后,并加以改造而成的。而 libcontainer 也是在 Docker 0.9 版本開始加入,我也是從這個(gè)版本開始使用它。
當(dāng)然 libcontainer 出現(xiàn)的本意不僅是替換當(dāng)時(shí)的 LXC 依賴,同時(shí)也希望能以此作為規(guī)范(讓其他的項(xiàng)目使用)最終,目標(biāo)達(dá)成。
runc 如何使用runc 的使用本不是本篇的重點(diǎn),稍微帶過。
? ~ docker export -o debian.tar `docker create debian` ? ~ ls debian.tar ? ~ tar -C rootfs -xf debian.tar ? ~ ls debian.tar rootfs ? ~ tree -L 1 -a rootfs rootfs ├── bin ├── boot ├── dev ├── .dockerenv ├── etc ├── home ├── lib ├── lib64 ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── sys ├── tmp ├── usr └── var 19 directories, 1 file
通過以上操作,得到了運(yùn)行一個(gè)容器所必須的 rootfs,當(dāng)然,上面看到我是通過 docker 來獲得這個(gè)文件的,但其實(shí)這只是為了方便罷了,docker 并不是必須的。
? ~ runc spec ? ~ ls config.json debian.tar rootfs
通過上面的操作,會(huì)得到一個(gè)基本的 config.json 的配置文件,這里面包含著運(yùn)行一個(gè)容器所需要的一些配置。其中會(huì)包含著一些例如:
"ociVersion": "1.0.1-dev"
這種用于標(biāo)識(shí)規(guī)范版本號(hào)的信息。
接下來稍微對(duì) config.json 文件進(jìn)行查看,便可以看到未通過 user Namespace 進(jìn)行隔離,所以我們需要以 root 權(quán)限運(yùn)行我們的容器。
? ~ sudo runc run debian # ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # hostname runc # cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
可以看到容器已經(jīng)運(yùn)行成功。當(dāng)然,我們也可以不通過 root 權(quán)限運(yùn)行容器,只要簡單的通過 user Namespace 進(jìn)行隔離,并添加 user 和 group 的映射之類的便可以了。此處不做贅述。
為何有 runc 1.0-rc6 存在我們知道,OCI 在 2015 年成立,在 2017 年 7 月的時(shí)候正式宣布 OCI v1.0.0 release 。其實(shí)在 2017 年的 11 月還 release 了 v1.0.1 版本。
前面已經(jīng)提過 runc 是 OCI 的官方實(shí)現(xiàn),那為何時(shí)過一年還未正式 release 1.0 呢?這里面原因其實(shí)說來也復(fù)雜,這也是這篇文章想聊的部分。
首先:runc 1.0 我們想正式 relase 么? 答案是 想。其實(shí)早在 2017 年 8 月份的時(shí)候 runc 1.0-rc4 就已經(jīng)支持 OCI v1.0.0 了。但當(dāng)時(shí)并沒有進(jìn)行正式版發(fā)布,轉(zhuǎn)而三個(gè)月后, OCI 稍做了更新。
到 2018 年 2 月份的時(shí)候,發(fā)布了 runc 1.0-rc5 -- "The Final Stretch" 這個(gè)版本取名其實(shí)已經(jīng)很明確了 The Final Stretch 已經(jīng)將這個(gè)版本作為正式版本前的最后一個(gè)版本進(jìn)行發(fā)布了。
但是,提筆前又發(fā)了新版本 runc 1.0-rc6 -- "For Real This Time" ,這個(gè)版本在預(yù)期中其實(shí)是想發(fā)布 1.0 的。我們討論后總結(jié)的結(jié)論主要有以下幾個(gè):
不夠規(guī)范。一方面是 runc 在持續(xù)的迭代改進(jìn),另一方面是目前很多其他的運(yùn)行時(shí)實(shí)現(xiàn)的一些 hooks 依賴于當(dāng)前的一些實(shí)現(xiàn),而這些實(shí)現(xiàn),并不完全符合規(guī)范。這就造成了一旦修正了這些 “錯(cuò)誤” 勢必造成其他運(yùn)行時(shí)的不穩(wěn)定和錯(cuò)誤。
發(fā)布周期不明確。目前容器相關(guān)生態(tài)中較為核心的項(xiàng)目,估計(jì)就 runc 的發(fā)布周期比較 “佛系” 了,我們甚至沒有一個(gè)明確的發(fā)布周期。這次的總結(jié)中,我以 Kubernetes 的發(fā)布做了例子:
Kubernetes Release | Date | Cadence |
---|---|---|
Christening of 1.0 | 10th July 2015 | ~one year from inception |
From 1.0 to 1.1 | 9th November 2015 | 122 days |
From 1.1 to 1.2 | 16th March 2016 | 128 days |
From 1.2 to 1.3 | 1st July 2016 | 107 days |
From 1.3 to 1.4 | 26th September 2016 | 87 days |
From 1.4 to 1.5 | 12th December 2016 | 77 days |
From 1.5 to 1.6 | 28th March 2017 | 106 days |
From 1.6 to 1.7 | 30th June 2017 | 94 days |
From 1.7 to 1.8 | 28th September 2017 | 90 days |
From 1.8 to 1.9 | 15th December 2017 | 78 days |
From 1.9 to 1.10 | 28th March 2018 | 103 days |
From 1.10 to 1.11 | 3rd July 2018 | 97 days |
From 1.11 to 1.12 | ETA 25th September 2018 | 84 days |
以這個(gè)發(fā)布記錄來看的話,每三個(gè)月作為以此發(fā)布相對(duì)合適,也比較通用。
至于這次,runc 1.0-rc6 的發(fā)布,將作為特性凍結(jié)發(fā)布,直到下次發(fā)布前,重點(diǎn)都將放在 “符合規(guī)范” 上面,同時(shí)也給其他的運(yùn)行時(shí)實(shí)現(xiàn)充足的時(shí)間,用于做好兼容之類的。
總結(jié)以上就是本次關(guān)于 runc 1.0-rc6 發(fā)布時(shí)的一些碎碎念,對(duì)這種情況頗有感慨,“符合規(guī)范” 并沒有那么好做,尤其是做基礎(chǔ)支撐的時(shí)候。
可以通過下面二維碼訂閱我的文章公眾號(hào)【MoeLove】
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27572.html
摘要:但當(dāng)時(shí)并沒有進(jìn)行正式版發(fā)布,轉(zhuǎn)而三個(gè)月后,稍做了更新。發(fā)布周期不明確??偨Y(jié)以上就是本次關(guān)于發(fā)布時(shí)的一些碎碎念,對(duì)這種情況頗有感慨,符合規(guī)范并沒有那么好做,尤其是做基礎(chǔ)支撐的時(shí)候。 如果你在用 Docker 或者 Kubernetes 想必你對(duì) 容器運(yùn)行時(shí) 這個(gè)概念應(yīng)該不會(huì)太陌生。 在 Docker 中,當(dāng)你使用 docker info 即可查看當(dāng)前所使用的 runtime。 ? ~ ...
摘要:但當(dāng)時(shí)并沒有進(jìn)行正式版發(fā)布,轉(zhuǎn)而三個(gè)月后,稍做了更新。發(fā)布周期不明確??偨Y(jié)以上就是本次關(guān)于發(fā)布時(shí)的一些碎碎念,對(duì)這種情況頗有感慨,符合規(guī)范并沒有那么好做,尤其是做基礎(chǔ)支撐的時(shí)候。 如果你在用 Docker 或者 Kubernetes 想必你對(duì) 容器運(yùn)行時(shí) 這個(gè)概念應(yīng)該不會(huì)太陌生。 在 Docker 中,當(dāng)你使用 docker info 即可查看當(dāng)前所使用的 runtime。 ? ~ ...
摘要:在年月底時(shí),我寫了一篇文章發(fā)布之際。為何有存在前面已經(jīng)基本介紹了相關(guān)背景,并且也基本明確了就是在正式發(fā)布之前的最后一個(gè)版本,那為什么會(huì)出現(xiàn)呢我們首先要介紹今年的一個(gè)提權(quán)漏洞。 在 18 年 11 月底時(shí),我寫了一篇文章 《runc 1.0-rc6 發(fā)布之際》 。如果你還不了解 runc 是什么,以及如何使用它,請(qǐng)參考我那篇文章。本文中,不再對(duì)其概念和用法等進(jìn)行說明。 在 runc 1....
摘要:在年月底時(shí),我寫了一篇文章發(fā)布之際。為何有存在前面已經(jīng)基本介紹了相關(guān)背景,并且也基本明確了就是在正式發(fā)布之前的最后一個(gè)版本,那為什么會(huì)出現(xiàn)呢我們首先要介紹今年的一個(gè)提權(quán)漏洞。 在 18 年 11 月底時(shí),我寫了一篇文章 《runc 1.0-rc6 發(fā)布之際》 。如果你還不了解 runc 是什么,以及如何使用它,請(qǐng)參考我那篇文章。本文中,不再對(duì)其概念和用法等進(jìn)行說明。 在 runc 1....
閱讀 1352·2023-04-25 15:21
閱讀 2684·2021-11-24 10:23
閱讀 3409·2021-10-11 10:59
閱讀 3255·2021-09-03 10:28
閱讀 1739·2019-08-26 13:45
閱讀 2329·2019-08-26 12:11
閱讀 929·2019-08-26 12:00
閱讀 1718·2019-08-26 10:44