@liuhui0803
2016-06-06T07:48:13.000000Z
字数 3498
阅读 2817
CoreOS
存储
Kubernetes
分布式系统
作者:Barak Michener。本文的翻译和发布已获授权,点击这里阅读英文原文。
容器集群基础结构的固定存储是目前计算领域最有趣的问题之一。我们要将微服务产生和使用的海量数据流存储在哪里?尤其是现在固定的离散型应用程序部署已经成为一种非常普遍的模式,这一点更为重要。随着容器在企业部署领域的应用愈加广泛,我们该如何用一种能够让开发者在任何环境中顺利使用的方式存储这些信息?又该如何在这样一种动态、快速迭代的应用程序容器世界里保障数据的一致性和固定性?
CoreOS最近发布了一种新的开源分布式存储系统:Torus,这种系统在设计上可以为通过开源容器管理系统Kubernetes编排和管理的容器集群提供可靠可扩展的存储。我们认为开源软件必须尽早发布,这样才能吸引社区中有经验的开发者、测试者,以及其他贡献者的关注,因此Torus的一个原型版本现已发布至GitHub。我们鼓励大家使用自己的数据和集群进行测试,帮助我们开发下一代分布式存储。
CoreOS认为分布式系统为更安全和可靠的互联网奠定了基础。通过构建模块化的基础,并对其进行扩展以处理日益增多的工作负载,同时依然维持简单易用,以及与其他组件相互配合的能力,这是在互联网规模上应对计算领域挑战必不可少的前提条件。过去三年来,我们通过开发etcd的经历意识到这个问题,etcd的诞生是为了解决分布式一致系统(Distributed consensus)方面的问题:零散但重要的信息片段如何通过民主的协商以一致的方式快速保存在一系列计算机中,并能用异步的方式更新和访问。目前etcd已成为市面上速度最快最稳定的开源分布式键值存储系统。该技术已被包括Kubernetes在内数百个领先的分布式系统软件项目所采用,用于协调一组节点的配置,以及节点所执行的应用程序。
可以说,有关分布式存储可靠性的问题在历史上造成的挑战远远多过分布式一致本身。在正确实现分布式存储所需的算法过程中,出现任何错误都可能造成严重的后果。分布式存储系统中的数据集通常数量非常大,存储错误可能会以惊人的速度传播,同时还非常难以检测到。数据量的飞速增长也使得我们改变了创建备份和归档的方法。另外我们需要做出对数据的额外检查来使得存储错误不会无限制地影响整个软件堆栈。
Torus提供了一种极为可靠和简单的分布式存储。这种技术在设计上是为了解决目前运行分布式应用程序的团队所面临的一些重要的共同问题。虽然老旧的存储也可以连接至容器基础结构,但这两种模式之间的失衡让我们相信会面临新问题:通过一种全新的解决方案为容器集群提供存储。一致算法(Consensus algorithm)的难度众所周知,而Torus会使用etcd这种获得数千个生产部署环境证实的技术管理元数据并维持一致。这样Torus自身就可以更加专注于新解决方案中存储方面的实现。
在部署、管理和运营现有存储解决方案的同时,试图将其硬塞入现代化的容器集群基础结构中,这种做法不仅困难重重而且代价高昂。这些分布式存储系统在设计上主要针对由大型计算机组成的小规模集群,而非针对廉价“小型”计算机组成大规模集群所使用的GIFEE方法。更糟糕的是,商用的分布式存储系统通常需要使用昂贵甚至定制的软硬件,这类软硬件不仅售价昂贵,而且很难将其与新兴的工具和使用模式进行集成,随着使用时间的延长,这类系统升级、许可,以及维护的成本也将日益增加。
容器集群基础结构比以往任何时候都更为动态,随着自动缩放、持续交付,以及组件故障和更换,会快速遇到各种变动。在这些容器微服务的启动、停止、升级,以及在集群不同节点间迁移过程中,确保为其提供固定的存储,这一过程并不像为同一台服务器上运行的一组整体应用(monolithic application)甚至多个虚拟机提供后端存储那么简单。
现代化集群的存储必须在网络端维持统一的可用性,随着数据在不同容器中处理还需要管理访问并保障一致性,就算只是在一个应用程序内部使用,随着应用版本的增长也需要做到这几方面。Torus通过架构中应用的下列几个原则解决了这些问题:
“我们发现市场上有一股很明显的需求:用户希望有一套能满足容器化应用程序‘动态化’这一本质需求,并能充分利用存储硬件领域层出不穷创新技术的存储解决方案,”一家位于纽约的裸机云供应商Packet公司CEO Zachary Smith说:“我们很激动地发现CoreOS通过首个专为云原生应用程序设计的,真正的分布式存储解决方案在社区中起到了表率作用。”
Torus的核心是一个将接口以传统文件方式呈现的库,这个库使得存储系统能够顺利实现易于理解的基本文件操作。借助etdc的一致过程(consensus process)进行协调和检查点操作,这个分布式文件可以通过多种方式暴露给用户的应用程序。目前Torus支持通过网络块设备(Network Block Device,NBD)将这个文件以面向块(Block-oriented)的存储进行暴露。我们计划在未来可以让对象存储等其他存储系统也能基于Torus实现,通过这些分布式文件创建集合,并由etcd负责协调。
Torus为Kubernetes的pod提供了简单的固定存储
通过内部点对点API,Torus可以支持一致性哈希、复制、垃圾回收,以及存储池再平衡。这样的设计还可在不远的未来支持加密和高效率的Reed-Solomon纠错功能,借此为整个系统提供更有保障的数据有效性和保密性。
Torus很容易即可通过Kubernetes部署和管理。此次首发的Torus包含了用于在任何Kubernetes集群上以应用程序方式配置和运行Torus的Kubernetes清单。这使得Torus的安装、管理和升级变成一种简单,完全在云端完成的操作。一旦以集群应用程序的方式顺利启动,Torus可以配合Kubernetes中的flex volume插件将卷动态地连接至部署完成的Pod。对于Pod内运行的应用,Torus会呈现为传统的文件系统。目前发布的Torus中包含的清单可以使用该功能演示在Kubernetes的Flex卷基础之上运行PostgreSQL数据库服务器,并由Torus存储提供支撑。同时目前发布的版本还提供了一份介绍在Kubernetes集群之外使用etcd独立部署Torus的文档,这种方法可用于测试和开发等用途。
目前首发的Torus只是我们开发世界一流云原生分布式存储系统诸多努力的开端,我们需要你的帮助。你可以测试软件,报告问题,参加讨论,借此通过GitHub上的Torus repo为该项目提供帮助和贡献。如果你位于旧金山地区,还可以参加我们在太平洋时间6月16日晚6点举办的下一场CoreOS见面会,你可以在见面会上进一步了解Torus的实现和运作细节。
“在历史上,分布式存储被视作云原生应用程序难以解决的问题,”分布式系统工程师兼Go kit创始人Peter Bourgon说:“我对于Torus的潜力感到很满意,很希望知道CoreOS和这个社区最终将取得怎样的辉煌成果!”
Torus是一种适用于现代化应用程序容器,简单可靠的分布式存储,旨在扩大企业环境中Kubernetes的使用率。
如果你有意为Torus的开发提供帮助,或帮助CoreOS解决分布式系统中遇到的其他虽然困难但值得去解决的问题,欢迎加入我们!我们正在招聘分布式存储工程师。