资讯专栏INFORMATION COLUMN

块存储、对象存储和文件系统: 它们对容器而言意味着什么?

red_bricks / 671人阅读

摘要:在这方面通常有三种主要选项文件系统存储块存储和对象存储。结论块存储比文件系统存储更灵活,这样更容易适应容器环境的块存储。对象存储对象存储与文件系统存储或块存储不同。结论由于依赖于调用,对象存储可能更复杂。

当管理员首次开始使用Docker容器时,通常会使其感到惊讶的是, 容器本身采用的是非永久性存储。当容器被移除时, 容器的存储也被移除了。

当然,如果没有办法实现永久存储,则容器应用程序的使用将会非常受限。幸运的是,有些方法在容器化的环境中可以实现持久存储。尽管容器本身的原生存储是非持久性的,但可以将容器连接到容器外部的存储区。此操作允许持久性数据的存储,因为当容器停止时,该外部存储不会被移除。

决定如何为容器实现持久存储的第一步是确定您将使用的存储系统的基础类型。在这方面, 通常有三种主要选项:文件系统存储、块存储和对象存储。这篇文章中,我将解释每种类型的存储之间的差异, 以及使用它们为容器环境设置存储时各会带来什么。

文件系统存储

文件系统存储是将数据存储为文件,这一存储形式已存在数十年了。每个文件都有一个文件名, 并且通常具有与其关联的属性。一些常用的文件系统包括NFS和NTFS。

当涉及到配置容器以持久存储数据时,文件系统存储是实现持久存储数据的最普遍的方法之一。最为人所知的文件系统储存示例(与容器相关)可能是基于主机的持久性。

基于主机的持久性背后的想法非常普遍。容器驻留在主机服务器上。这个主机服务器包含它自己的操作系统和它自己的文件系统。可以将容器配置为在主机服务器的文件存储的专用文件夹内存储持久数据。Docker容器通常使用联合文件系统将容器层组合成一个内聚的文件结构。基于主机的持久性绕过了需要持久存储的数据的联合文件系统,并借助主机上使用的同一文件系统存储数据。

普通主机持久性引起的主要问题是,它完全破坏了容器的可移植性。当使用主机持久性时,依赖项资源(持久存储)驻留在宿主服务器的原生文件系统的容器外。为了解决此问题, 已经创建了其他的主机持久性。例如,通过多主机持久性使用分布式文件系统,来复制跨多个主机服务器的持久性存储。

结论:文件系统存储可能是最笨拙的方法,因为文件系统在设计之初并没有把可移植性纳入考虑范围。然而,正如前文我所提到的,有一些方法可以实现容器友好型的文件存储系统,而这通常要通过跨多个服务器分布文件系统来实现。

块存储

块存储是容器的另一个存储选项。如前所述,文件系统存储将数据组织为文件和文件夹的层次结构。相反,块存储存储块中的数据块。块仅通过其地址识别。块没有文件名,也没有自己的元数据。只有当块与其他块组合形成完整的数据块时,它们才具有意义。

由于其性能,块存储通常用于数据库应用程序。块存储也通常用于提供快照功能,它允许将volume回滚到特定时间点,而无需还原备份。

对于容器,块存储有时以容器定义的存储的形式实现。容器定义的存储是一种软件定义的存储形式,但专门用于容器化环境中。此存储通常在专用存储容器内部实现。

Rancher Labs推出了自己的分布式块存储项目,名为Project Longhorn。Longhorn背后的基本思想相对简单。

存储系统可以包含多个块存储volumes,并且这些volumes中的每一个只能由单个主机加载。在这种情况下,Longhorn试图将块存储控制器划分为大量较小的块存储控制器,每个存储控制器都可以映射到不同的块存储volume。如果所有这些块存储volumes都驻留在物理磁盘的公共池中,那么Longhorn方法将允许编排引擎根据需要创建块存储volumes。例如,可以在创建容器的同时自动创建块存储volume。

结论:块存储比文件系统存储更灵活,这样更容易适应容器环境的块存储。唯一的挑战是确保块存储数据在由多台主机组成的环境中可用。这可以通过分布式存储来解决。

对象存储

对象存储与文件系统存储或块存储不同。它不是通过块地址或文件名引用数据,而是将数据存储为对象并由对象ID引用。对象存储的优点在于它具有很强的伸缩性,并且在将属性与对象相关联方面具有高度的灵活性。使用对象存储的缺点是它执行起来不如块储存。

由于对象存储主要是为实现可伸缩性而设计的,因此它是公共云提供商的热门选择。Docker容器可以链接到Amazon Web Services或Microsoft Azure上的对象存储,但这样做需要专门设计容器化应用程序以利用对象存储。而典型的应用程序可能被设计为通过文件系统或SCSI调用访问数据,对象存储需要基于HTTP的REST调用,例如Get或Put。因此,应该将对象存储保存在需要大规模可伸缩存储的应用程序或需跨地域的存储上。

结论:由于依赖于REST调用,对象存储可能更复杂。但对象存储提供的可伸缩性使它成为一个很好的选择, 因为在容器环境中,大规模可伸缩性常常是大家优先考虑的。


9月27日,北京海航万豪酒店,容器技术大会Container Day 2017即将举行。

CloudStack之父、海航科技技术总监、华为PaaS部门部长、恒丰银行科技部总经理、阿里云PaaS工程总监、民生保险CIO······均已加入豪华讲师套餐!

11家已容器落地企业,15位真·云计算大咖,13场纯·技术演讲,结合实战场景,聚焦落地经验。免费参会+超高规格,详细议程及注册链接请戳

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26990.html

相关文章

  • Borg、Omega Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训

    摘要:从年以来,谷歌基于容器研发三个容器管理系统,分别是和。这篇论文由这三个容器集群管理系统长年开发维护的谷歌工程师和于近日发表,阐述了谷歌从到这个旅程中所获得的知识和经验教训。和完全是谷歌内部系统相比,是开源的。 从2000年以来,谷歌基于容器研发三个容器管理系统,分别是Borg、Omega和Kubernetes。这篇论文由这三个容器集群管理系统长年开发维护的谷歌工程师Brendan Bu...

    nodejh 评论0 收藏0
  • 如何利用公共云存储构建中小企业存储

    摘要:另一种方法是将应用程序迁移到公共云中,并在那里使用基于块的云存储。第一种是在公共云中使用基于文件的存储,第二种是使用对象存储。数据保护公共云存储的一个很好用途是用于数据保护。中小型企业(SME)的技术需求虽然比大企业的少,但仍然很重要。其中的关键是中小企业的存储。在过去,这通常意味着是企业使用存储的缩小版本,但人们现在生活在云存储越来越重要的时代,这对于缺乏大型组织拥有的IT部门资源的中小企...

    simon_chen 评论0 收藏0
  • 《转载》经典的Java基础面试题集锦

    摘要:经典的基础面试题集锦经典的基础面试题集锦,欢迎收藏和分享。类变量或者说静态变量是通过这个关键字来声明的。非静态变量在每一个对象实例上都有单独的一份值。对象允许程序和数据进行封装,以减少潜在的干涉。 经典的Java基础面试题集锦 经典的Java基础面试题集锦,欢迎收藏和分享。 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示main方法不是pub...

    Winer 评论0 收藏0
  • 后端好书阅读与推荐(续四)

    摘要:后端好书阅读与推荐系列文章后端好书阅读与推荐后端好书阅读与推荐续后端好书阅读与推荐续二后端好书阅读与推荐续三后端好书阅读与推荐续四这里依然记录一下每本书的亮点与自己读书心得和体会,分享并求拍砖。 后端好书阅读与推荐系列文章:后端好书阅读与推荐后端好书阅读与推荐(续)后端好书阅读与推荐(续二)后端好书阅读与推荐(续三)后端好书阅读与推荐(续四) 这里依然记录一下每本书的亮点与自己读书心得...

    phodal 评论0 收藏0
  • Longhorn全解析及快速入门指南

    摘要:项目现已正式发布这是一个基于云和容器部署的分布式块存储新方式。这可能是与大多数现有的分布式存储系统相比,最具特色的功能。快速入门指南易于安装和使用。使用或术语,管理器容器是一项全球性服务。目前,我们不保留额外的元数据来指示使用哪些。 Longhorn项目现已正式发布!这是一个基于云和容器部署的分布式块存储新方式。Longhorn遵循微服务的原则,利用容器将小型独立组件构建为分布式块存储...

    张春雷 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<