皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Oracle发布开源的容器工具集,包含使用Rust编写的新容器运行时环境

作者 Daniel Bryant ,译者 张卫滨

Oracle发布了三个开源的容器工具集,包括Smith,遵循开放容器计划(Open Container Initiative,OCI)镜像规范的容器构造器,它能创建只包含可执行内容及其依赖的“微容器(microcontainer)”;Crashcart,微容器调试工具,它允许运维人员将Linux二进制文件的镜像旁加载(sideload)到已有的容器中;Railcar,基于Rust的容器运行环境,它实现了OCI运行时规范

Vish AbramsOracle开发人员博客的一篇文章上写道,Oracle目前正在使用容器运行其云服务的很多组件。在开发和运维生产环境的这些容器时,他们学到了很多的经验,并相应地创建了一些工具,现在它们基于Universal Permissive Licence 1.0Apache License 2.0双重协议进行了开源,代码可以从GitHub上得到。

作为发布这些工具的前奏,Abrams在Oracle开发人员博客上还写过一篇额外的文章,名为“ Microcontainer Manifesto以及完成任务的合适工具”,他认为容器的标准构建流程“对于开发人员非常理想,但是所形成的容器镜像使运维人员的工作非常困难”。当Oracle两年前开始在容器技术方面进行投资时,他们定义了提升运行时容器“稳定性和安全性”的核心目标。尽管这是Oracle第一次官方宣布其容器技术,但是博客中提到自从这项工作开展以来,他们容器实现的稳定性和安全性得到了大幅度的提升。

Abrams讨论了Docker容器在构建时将整个Linux操作系统(OS)放到容器镜像中所带来的问题。具体来讲,这会导致:较大的镜像,变成这么庞大的镜像只是为了引入必要的层,使其变得可管理;权限封装——让应用运行在整个Linux用户空间中,这样会带来潜在攻击的风险;漏洞管理——标准的构建流程让我们很难确定某个容器是否需要升级,因为容器实际使用的依赖文件难以确定。需要注意的是,这里面所述的很多问题在现有的容器系统中已经解决了,比如使用特定OS的容器以及scratch容器;启用用户命名空间(User Namespace)以及Linux核心安全模块,比如AppArmor;对容器镜像使用静态漏洞扫描器进行安全扫描,比如使用CoreOS的Clair

Oracle为了解决在生产环境下所面临的问题,定义了名为微容器的概念(Iron.ioJBoss业已使用过这个术语,不要与其混淆)。具体来讲,微容器:

  • 只包含一个可执行文件及其依赖,没有shell和init进程
  • 使用只读的root文件系统运行,没有分层和Overlayfs(写入是隔离的,通过卷mount来进行处理)
    • 所有的临时文件放在/run中,所有的持久化写入(日志文件和数据文件)放到/write中
    • 需要针对每个容器修改的配置文件放到/read中,它可以通过卷mount或Kubernetes configmap来修改
  • 没有用户和组文件系统所有权的功能——所有的内容都归一个用户拥有和读取
  • 没有文件系统时间戳(timestamp)和功能(capabilities)
  • 可以重复生成,每次都会生成相同的镜像
  • 能够部署到不同的节点上,没有特定的镜像仓库的概念。

为了简化微容器的构建,Oracle发布了Smith,这是一个使用Golang编写的容器构建工具。这个工具可以通过yum仓库和(可选)RPM文件来构建微容器。另外,它还可以“微化(micro-ize)”已有的Docker容器,在开发阶段,开发人员能够使用非常友好的Docker工具来构建容器,而在生产部署的时候,Smith能够将这个容器转换为微容器。Smith按照标准OCI格式来构建镜像,但是它也可以通过Docker仓库上传和下载镜像。

微容器在针对生产环境的使用执行完微小化操作之后,对运维人员来说诊断和修复问题会变得很有挑战性,这主要是因为缺少OS工具。大多数的调试可以通过宿主机器完成,但有时需要以容器的视角来查看文件系统。针对这种使用场景,Oracle创建了Crashcart。Crashcart允许旁加载(side-loading)一组Linux二进制文件到正在运行的容器中,这样做的目的主要是探查和调试。关于旁加载二进制文件为何如此困难,以及Crashcart如何克服这些困难的,可以参考”Hardcore Container Debugging“这篇博客文章。

Oracle发布的第三个工具是Railcar,基于RustOCI运行时规范实现。它非常类似于参考实现runc,但是它完全是使用Rust实现的,为了“内存安全,避免垃圾收集或多线程带来的损耗”。Abrams指出尽管Go在构建系统工具和CLI方面很有用,但是“Go对于容器运行时来说却并不是好的可选语言”,其中的问题包括与命名空间的交互(在最近的Weaveworks博客文章上有所提及)。关于Railcar开发的更多信息可以参见Oracle开发人员博客”使用Rust构建容器运行时环境“。

这些工具发布的更多信息可以参考Oracle开发人员博客和 Oracle的GitHub账号

查看英文原文Oracle Releases Open Source Container Utilities, Including A New Container Runtime Written in Rust

转自 http://www.infoq.com/cn/news/2017/07/oracle-container-utilities