Google 的所有应用都运行在容器中

  • Carlos Sanchez
  • 李哲

2014 年 6 月 16 日

话题:DevOps

Google 现在已经使用容器来运行它们集群中的所有应用,每周会启动超过 20 亿个容器。

Google 云平台的高级软件工程师 Joe Beda 在Gluecon上做了一个关于 Google 如何使用 Linux 容器技术的报告。他在报告中声称现在 Google 所有的应用都是运行在容器中的。这导致的结果就是 Google 每周要启动超过 20 亿个容器,每秒钟要启动超过 3000 个容器,这还不包括那些长期运行的容器。

Google 自从 2004 年起就已经开始使用容器技术了,于 2006 年发布了 cgroups,并在去年创建了名为Let Me Contain That For You (lmctfy)的项目。Imctfy 是 Google 开源版本的容器栈,它提供了用来代替 LXC 的 Linux 应用容器。当在单台机器上运行多个应用时,这些容器支持应用间的资源隔离,而且这会给人感觉这些应用是独自占用机器而运行的。这些应用可以知道容器的存在,这样它们就可以创建和管理它们自己的子容器了。

Google 的软件工程师 Rohit Jnagal 对 Imctfy 发表了评论

从 2007 年起,我们就已经用 Imctfy 来管理 Google 所有的与资源隔离性相关的需求了。到现在,它已经广泛使用在 Google 的各个基础设施中。在重新设计 Imctfy 的过程中,我们能够干净利落地将这一层分离出来(译者注:为了将 Imctfy 开源,需要对其重新设计,将其与 Google 的其他业务相关的代码进行分离),并且我们认为将它拿出来回报给开源社区是一件非常令人愉快的事情。

他还介绍了 Imctfy 与 LXC 之间的主要区别:

  1. 资源管理 API:显而易见,LXC 的 API 是支持命名空间的,并且支持导出 cgroup。而对于 Imctfy,Google 则试图提供一种基于用户使用意图的资源配置,这种配置方式就不再需要用户了解 cgroup 的具体细节内容了,因为 cgroup 的 API 可能不是很稳定并且难以应付。
  2. 优先级:Imctfy 提供了对资源共享和过量配置的支持,过量配置的机器上的批处理工作负载可以在机器相对空闲的时候运行。所有应用都会声明一个优先级和一些与延迟相关的需求,Imctfy 会通过管理所有的 cgroup 的具体细节内容来满足每个任务的需求。
  3. 编程接口:对 Google 云而言,Imctfy 是应用管理的最底层的模块。它会和其他工具以及程序一起协同工作,而且在构建位于其上层的更加复杂的工具链时,它具有更好的针对性和稳定性。

Google 同样也正在将容器集成到 Google 云平台中。Google 所开源的节点容器管理器(node container manager)是一个小的 Python 代理,它旨在通过一个 YAML 清单(manifest)来管理一组 Docker 容器的。一个用来管理Google 计算引擎(Google Compute Engine)上运行的容器的公开预览版本的系统已经可以使用了,它支持容器清单,并可以在启动时创建容器。该软件是基于 Debian 7 的,并且包含有 Docker runtime 和节点容器管理器。

Docker 同样能够利用 Imctfy 的优势,因为现在已经有一个针对 Docker 的 Imctfy 驱动,这还只是一个处于早期阶段的集成方案。由于有了这个新的功能,从 Docker 0.9 以后,我们就可以在不包含 LXC 的环境中运行容器了。

查看英文原文:http://www.infoq.com/news/2014/06/everything-google-containers


感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

DevOps