本文我来分享下与咱们(搞容器化/K8S 从业者)非亲非故的一个根底我的项目 runc 是如何自 2016 年公布了 v1.0.0-rc1 到当初历经 5 年短跑,从 rc1 始终到 rc95 ,现在终于正式公布 v1.0 版本的过程,及这两头的故事。

大家好,我是张晋涛。

在 2018 年 11 月底时,我写了一篇文章 《runc 1.0-rc6 公布之际》 , 那应该是我第一次公开介绍 runc。如果你还不理解 runc 是什么,以及如何应用它,请参考我那篇文章。本文中不再对其概念和用法等进行阐明。

在 2019 年 3 月底时,我写了另一篇文章 《runc 1.0-rc7 公布之际》,介绍 runc 1.0-rc7 公布的起因,及那个版本中最次要的修复 CVE-2019-5736 。其中也介绍了对于 runc/Docker 等对于 Linux 内核兼容性的问题,感兴趣的小伙伴能够看看。

关注我的敌人们,应该也在 K8S 生态周报 中屡次看到过我对 runc 的介绍,包含其个性及安全漏洞等方面。

在 2015 年 6 月, Docker ,CoreOS 和其余一些公司独特成立了 OCI (凋谢容器打算) 组织,其最次要的内容有两个:

  • 容器运行时标准
  • 容器镜像标准

Docker 将其运行时捐献给了 OCI ,作为容器运行时标准的根底实现,托管在了 https://github.com/opencontai... 也就是当初大家看到的 runc 了。

公布历程

咱们来看看 runc 版本公布的历程,以便理解它为何短跑 5 年。

runc versionrelease timeruntime-spec version备注
runc v1.0-rc12016.06.04v1.0.0-rc1
runc v1.0-rc22016.10.01v1.0.0-rc2-38-g1c7c27d
runc v1.0-rc32017.03.22v1.0.0-rc5
runc v1.0-rc42017.08.09v1.0.0runtime-spec 首次公布 v1.0
runc v1.0-rc52018.02.27v1.0.0首次打算作为最初一个 rc 版本
runc v1.0-rc62018.11.21v1.0.1-49-g5684b8a打算是 1.0 之前的最初一个性能版本,蕴含了一些标准合规性的修改
runc v1.0-rc72019.03.28v1.0.1-59-g29686db修复 CVE-2019-5736
runc v1.0-rc82019.04.26v1.0.1-59-g29686db修复 v1.0.0-rc7
runc v1.0-rc92019.10.05v1.0.1-59-g29686db修复 CVE-2019-16884
runc v1.0-rc102020.01.23v1.0.1-59-g29686db修复 CVE-2019-19921
runc v1.0-rc902020.05.12v1.0.1-59-g29686db与 runc v1.0-rc10 雷同,是为了修改 version scheme
runc v1.0-rc912020.07.02v1.0.2-8-g237cc4f开始反对 cgroup v2 ;一些规范性的问题失去解决
runc v1.0-rc922020.08.06v1.0.2-23-g4d89ac9修复我在 runc v1.0-rc91 中发现的 bug
runc v1.0-rc932021.02.04v1.0.2-35-ge6143cacgroup v2 失去稳固反对,
runc v1.0-rc942021.05.10v1.0.2-57-g1c3f411修复 runc v1.0-rc93 中的 regressions
runc v1.0-rc952021.05.19v1.0.2-57-g1c3f411修复 CVE-2021-30465
runc v1.02021.06.22v1.0.2-57-g1c3f411

我在下面的表格中,专门减少了一列 runtime-spec version ,示意 OCI 组织中的容器运行时标准的版本。咱们来总结下这个公布过程:

  • 在 runc v1.0-rc5 之前,runc 其实也没打算公布正式版,毕竟规范还没正式实现呢,实现也不可能先出稳定版;
  • runc v1.0-rc7 , rc 9 ~ rc 10 均是为了修改重大的平安问题;
  • runc v1.0-rc90 纯正是解决 version scheme 的问题;
  • runc v1.0-rc91~rc93 次要性能点是在 cgroup v2 的反对,以及一些跟标准集成的问题;
  • runc v1.0-93 之后,其实就根本控制代码解冻了,直到 runc v1.0-rc95 修复了一个安全漏洞;
  • 目前次要的几个仓库也都曾经测试了跟 runc 代码仓库中最新代码的集成,相干的问题也曾经修复。

从这里看到的三个次要耗时的点如下:

  • runtime-spec 尚未正式公布 v1.0 版本;
  • 修复安全漏洞和本身的 bug ;
  • 实现新个性的耗时;

标准未公布 v1.0 耗时的局部这里就不多说了,这也是个依赖项,对于大多数的我的项目/软件开发都会有相似的状况,只能去推动标准的公布了;

至于个性,bug 和安全漏洞等的耗时,这其实跟 runc 我的项目的性能和其定位无关。runc 偏底层了一些,这就须要有更多相干畛域的常识来撑持。就拿我在 runc v1.0-rc 91 中发现的那个bug 来说,对 Linux 内核源码不太理解的人,的确会破费比拟多工夫的。

- switch {- case mode&unix.S_IFBLK == unix.S_IFBLK:+ switch mode & unix.S_IFMT {+ case unix.S_IFBLK:    devType = configs.BlockDevice- case mode&unix.S_IFCHR == unix.S_IFCHR:+ case unix.S_IFCHR:    devType = configs.CharDevice- case mode&unix.S_IFIFO == unix.S_IFIFO:+ case unix.S_IFIFO:    devType = configs.FifoDevicedefault:    return nil, ErrNotADevice

乏味的是 runc v1.0 版本 Release 的题目是 "A wizard is never late, nor is he early, he arrives precisely when he means to." 这大略也很合乎 runc 的公布历程了吧 :)

但无论如何,runc 通过 5 年短跑,终于公布了 v1.0 版本!感激每一个为之付出过的小伙伴!

欢送大家下载更新! https://github.com/opencontai...


欢送订阅我的文章公众号【MoeLove】