前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开源项目的 5 年长跑,runc v1.0 终于正式发布!

开源项目的 5 年长跑,runc v1.0 终于正式发布!

作者头像
Jintao Zhang
发布2021-07-14 15:15:59
5400
发布2021-07-14 15:15:59
举报
文章被收录于专栏:MoeLoveMoeLove

“本文我来分享下与我们(搞容器化/K8S 从业者)息息相关的一个基础项目 runc[1] 是如何自 2016 年发布了 v1.0.0-rc1 到现在历经 5 年长跑,从 rc1 一直到 rc95 ,如今终于正式发布 v1.0 版本的过程,及这中间的故事。 ”

大家好,我是张晋涛。

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

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

关注我的朋友们,应该也在 K8S 生态周报[4] 中多次看到过我对 runc 的介绍,包括其特性及安全漏洞等方面。

在 2015 年 6 月, Docker ,CoreOS 和其他一些公司共同成立了 OCI (开放容器计划) 组织,其最主要的内容有两个:

  • 容器运行时规范
  • 容器镜像规范

Docker 将其运行时捐赠给了 OCI ,作为容器运行时规范的基础实现,托管在了 https://github.com/opencontainers/runc 也就是现在大家看到的 runc 了。

发布历程

我们来看看 runc 版本发布的历程,以便了解它为何长跑 5 年。

runc version

release time

runtime-spec version

备注

runc v1.0-rc1

2016.06.04

v1.0.0-rc1

runc v1.0-rc2

2016.10.01

v1.0.0-rc2-38-g1c7c27d

runc v1.0-rc3

2017.03.22

v1.0.0-rc5

runc v1.0-rc4

2017.08.09

v1.0.0

runtime-spec 首次发布 v1.0

runc v1.0-rc5

2018.02.27

v1.0.0

首次计划作为最后一个 rc 版本

runc v1.0-rc6

2018.11.21

v1.0.1-49-g5684b8a

计划是 1.0 之前的最后一个功能版本,包含了一些规范合规性的修正

runc v1.0-rc7

2019.03.28

v1.0.1-59-g29686db

修复 CVE-2019-5736

runc v1.0-rc8

2019.04.26

v1.0.1-59-g29686db

修复 v1.0.0-rc7

runc v1.0-rc9

2019.10.05

v1.0.1-59-g29686db

修复 CVE-2019-16884

runc v1.0-rc10

2020.01.23

v1.0.1-59-g29686db

修复 CVE-2019-19921

runc v1.0-rc90

2020.05.12

v1.0.1-59-g29686db

与 runc v1.0-rc10 相同,是为了修正 version scheme

runc v1.0-rc91

2020.07.02

v1.0.2-8-g237cc4f

开始支持 cgroup v2 ;一些规范性的问题得到解决

runc v1.0-rc92

2020.08.06

v1.0.2-23-g4d89ac9

修复我在 runc v1.0-rc91 中发现的 bug

runc v1.0-rc93

2021.02.04

v1.0.2-35-ge6143ca

cgroup v2 得到稳定支持,

runc v1.0-rc94

2021.05.10

v1.0.2-57-g1c3f411

修复 runc v1.0-rc93 中的 regressions

runc v1.0-rc95

2021.05.19

v1.0.2-57-g1c3f411

修复 CVE-2021-30465

runc v1.0

2021.06.22

v1.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 内核源码不太了解的人,确实会花费比较多时间的。

代码语言:javascript
复制
- 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.FifoDevice
default:
    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/opencontainers/runc/releases/tag/v1.0.0


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

TheMoeLove

参考资料

[1]

runc: https://github.com/opencontainers/runc

[2]

runc-1.0-rc6-发布之际: https://zhuanlan.zhihu.com/p/50923312

[3]

runc 1.0-rc7 发布之际: https://zhuanlan.zhihu.com/p/60981504

[4]

K8S 生态: https://zhuanlan.zhihu.com/container

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MoeLove 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 发布历程
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档