装箱百万奖金,第六届全国工业互联网数据创新应用大赛火热报名中! 了解详情
写点什么

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

  • 2017-07-23
  • 本文字数:1903 字

    阅读完需:约 6 分钟

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

Vish Abrams Oracle 开发人员博客的一篇文章上写道,Oracle 目前正在使用容器运行其云服务的很多组件。在开发和运维生产环境的这些容器时,他们学到了很多的经验,并相应地创建了一些工具,现在它们基于 Universal Permissive Licence 1.0 Apache 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.io JBoss 业已使用过这个术语,不要与其混淆)。具体来讲,微容器:

  • 只包含一个可执行文件及其依赖,没有 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 ,基于 Rust OCI 运行时规范实现。它非常类似于参考实现 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

2017-07-23 19:001615

评论

发布
暂无评论
发现更多内容

我叫小M,立志建立MySQL帝国。

yes

MySQL

优秀程序员必备技能之如何高效阅读源码

中间件兴趣圈

方法论 源码解读

「编程概念」融合理解函数式和面向对象

顿晓

面向对象 4月日更 函数式 融合

我用Rocket-API实现了开放平台

棒锤🐮

构建基于Spring Cloud向Service Mesh框架迁移的解决方案及思路

xcbeyond

架构 云原生 Service Mesh 解决方案 引航计划

2021 优质前端资源精选 —— 持续更新,欢迎共建

清秋

大前端 教程 资源 社区 4月日更

Angular,AngularJS 和 react

HoneyMoose

强化区块链应用 破解知识产权运营难题

CECBC

区块链

知乎高赞:为什么同样是分布式架构的Kafka需要Leader而Redis不需要

中间件兴趣圈

分布式 raft 一致性 数据分片

7.1 Go语言从入门到精通:Cobra介绍

xcbeyond

cobra Go 语言 4月日更

趁早

小天同学

个人感悟 成功 4月日更 恋爱 趁早

观《掌控习惯》笔记

尧二水丶

习惯养成 书籍推荐 书单 书籍 4月日更

基于树莓派和OpenVINO的边缘计算

IT蜗壳-Tango

IT蜗壳教学 4月日更

Rust从0到1-结构体-方法

rust 方法 struct 结构体 method

从金融到物联网 区块链的落地应用将如何改变世界?

CECBC

区块链

starforce源码解读二:游戏入口

六维

Unity 源码解读 4月日更

并发的HashMap为什么会引起死循环?

Java小咖秀

容器 hashmap 并发

区块链给普通人带来的机会!

CECBC

区块链

传统金融体系vs新金融体系,区块链改变了什么?

CECBC

金融

关于Go语言,你不得不知的并发模式!

博文视点Broadview

如何只用一个小时定制一个行业AI 模型?

华为云开发者联盟

自然语言处理 AI 华为云 hdc ModelArts Pro

Edge 修改使用的默认搜索引擎

HoneyMoose

什么是你上大学才知道的事情?

🌍

4月日更

maven中心仓库OSSRH使用简介

程序那些事

Java maven 程序那些事

函数

奈奈奈奈

如何在 GitHub 上选择合适的开源工具和项目

耳东@Erdong

GitHub 4月日更

世界五百强第一的沃尔玛在用区块链做什么

CECBC

区块链

场景化面试:能聊聊你对充血模型和贫血模型的理解吗?

面试官问

领域驱动设计 DDD 充血模型 贫血模型

来学Python啦,用Python详细讲解温度转换器

Bob

Python Python 游戏编程 4月日更

容器&服务: ClickHouse与k8s架构

程序员架构进阶

Kubernetes Prometheus Clickhouse 28天写作 4月日更

文字识别:关键信息提取的3种探索方法

华为云开发者联盟

深度学习 文字识别 图结构 关键信息提取 栅格

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