Docker容器和存储系统系列(二)

 

作者背景:

江松,拥有超过16年的国内外企业级软件基础架构研发经验,对企业级存储,云计算都有很深的技术造诣和行业理解。

 

注:本期分享由江松原创,有容云整理发布,转载请注明出处。

 

前一期我们讲了Docker容器采用两种不同的数据存储模式,一种是对Root Image采用分层文件系统的方式,一种是对应用数据采用了Volume接口。这一期我就重点对Volume存储接口展开说明一下。

 

一. 为什么需要Volume这样的数据接口

 

首先为什么我们需要Volume这样的数据接口。我们要深刻理解的是Docker容器是承载应用的,是对应用环境的抽象而不是对OS运行环境的抽象。Docker容器天生设计就是为了应用的运行环境打包,启动,迁移,弹性拓展,所以Docker容器一个最重要的特性就是disposable, 是可以被丢弃处理,稍瞬即逝的。而应用访问的重要数据可不是disposable的,这些重要数据需要持久化的存储保持。Docker提出了Volume数据卷的概念就是来应对数据持久化的。如果把容器比喻成一个人,那么这个人的重要数据(物质上的)就是他的财产(钱)。容器可以不存在了,但是数据必须还要存在。小沈阳说,人生最大的痛苦就是人没了,钱还在。容器会说,正相反,Docker最大的幸福就是,我不在了,数据还在。

 

所以,定义好需要持久化的数据,采用Volume接口来存储访问是容器应用需要考虑的首要课题,必须引起高度的重视。我们可以想象一下容器和应用之间这样一段对话。

容器:我稍瞬即逝,我稍瞬即逝,重要的事情说三遍,我稍瞬即逝。

应用:哦,这样啊,那我的重要数据不能丢怎么办?

容器:请用Volume数据卷,请用Volume数据卷,重要的事情说三遍,请用Volume数据卷。

应用:&%#!,知道了,真啰嗦,你的前世一定是一台复读机,妈妈再也不用担心你的学习了。

 

二. Volume目录挂载

 

那么,既然容器的分层文件系统是为了容器稍瞬即逝,弹性迁移所设计的,Volume接口的实现就肯定和它很不一样了。具体从技术上来说,Volume接口绕过了disposable的分层文件系统,而是采用直接mount挂载的方式。Volume目录挂载后,对应用来说是透明的,应用不需要任何改变,应用按照原来的方式访问Volume目录就能实现重要数据的持久化。这有点像你在Win7下创建一个百度网盘目录一样,你向网盘目录拷贝文件的方式和向其他目录拷贝文件没有区别,但是如果你的笔记本丢了,其他目录的文件就丢了,但是网盘上的文件始终存在。这就是所谓的数据持久化。

 

三. 数据迁移

 

数据能够持久化以后,应用容器迁移和数据共享就成为了可能。Volume接口可以说很大程度上讲是容器迁移和数据共享的基础组件。我们先谈谈迁移。假设一个人需要从一个城市搬到另外一个城市,如果让他把所有的现金都打包带到身上是不太现实的,也非常不安全。怎么办呢?很简单,他去银行开个账户,把钱存进去,到另外一个城市的分行取就可以了。容器迁移的道理是一样的,因为数据都是存储在Volume卷(银行账户)里的,所以容器在集群的另外一个服务器甚至云端重新启动的时候,只要挂载同样的数据卷就可以了。当然,这些都需要数据卷后端有共享存储,或者数据副本的支撑。

 

容器应用迁移的核心其实是数据卷Volume迁移,(注:容器本身的迁移由镜像库Docker Registry主导) 这一部分涉及数据存储,安全加密,网络传输,性能优化,快照备份等等的技术点,是容器管理的核心功能。Volume数据卷更是容器间共享数据的基础,道理很简单,数据是存储在容器之外的,那么容器间共享同样一个数据卷就能共享数据。为此,Docker容器还专门推出了数据卷容器这种特殊的容器,只要一个数据卷容器来挂载Volume, 其他需要共享Volume的容器只需要很简单的指明和这个数据卷容器共享Volume就可以了。有兴趣的读者可以自己查找数据卷容器的资料。

 

为了更好的支持容器迁移和数据共享,Docker推出了Volume plugin接口机制,让第三方的存储厂商来支持Docker Volume并且在此基础上进行功能拓展。下面这个表提供了Volume plugin的接口规范:

 

 

可以看到Volume plugin的接口规范是相当简洁的。大部分的存储和高级功能由和Volume plugin driver驱动的后端存储提供。以下说明就是前一期提到的Volume plugin driver。我们下一期会重点介绍。

 

Rancher Convoy :  Convoy是Rancher Labs用go开发的支持DeviceMapper, NFS,EBS, Glusterfs多种后端存储的Docker Volume plugin driver. Convoy还提供了一个存储拓展功能(如快照,备份恢复等)的接口框架。

 

Flocker: Flocker volume plugin driver主要用于多主机环境Docker数据卷的迁移,从而支持数据库应用等stateful有状态应用的主机间迁移。

 

关于Volume今天我就介绍到这里。又到了总结的时间了,前两天做了个梦,梦见自己参加了“迎接一带一路,全国Docker知识大赛”18岁以下组别的决赛。里面一个题目是这样的:

 

请以Volume的字母为首字母,分别组成一个句子来说明Volume的特性。

 

好有挑战啊,不过有了前面对Volume概念的理解,我很快就写出了答案。

V -- Very important data.  (存储很重要的数据)

O -- Opt to be shared.(多用于容器数据共享。)

L -- Like a bank to store money.(像银行存储资金)

U -- User defined plugin driver.(用户定义的插件驱动)

M -- Move around is not easy.(迁移非常有挑战)

E -- Essential to clustered environment.(集群多主机应用的关键)

 

我梦见了我拿到了第一名,受到了Docker创始人Solomon Hykes的亲切接见。。。继续做梦吧,不要醒来。

 

 

本文电子书下载:

云盘下载:http://pan.baidu.com/s/1jHfP9Dc

网页下载:http://www.youruncloud.com/help/115.html

博客期刊:http://www.youruncloud.com/blog/0_3.html

 

 

分享:Docker容器和存储系统系列(二)

有容云-构筑企业容器云 www.youruncloud.com

调查问卷

1、您所在的公司在IT方面面临哪些挑战? (最少选1项)

技术架构老旧过时,业务需要IT从传统架构转向互联网架构
需要管理使用多个云,避免vendor locked-in
IT资产(例如虚拟机或者物理服务器)的资源利用低,成本高昂难以承受
业务有强烈弹性需求 (比如,短期内用户访问量剧增)
使用微服务架构
开发、测试、生产环境不统一,企业内缺乏统一交付标准
运维工作复杂、自动化程度低,产品交付周期长
缺乏服务于内部其他业务部门或者第三方应用,且具备完善的计费及权限模块的PaaS平台
其他

2、您所在的公司在使用哪些私有、公有云解决方案?(最少选1项)

OpenStack
CloudStack
VMware
AWS
Azure
阿里云
金山云
腾讯云
UCloud
青云
其他

3、您是如何看待开源软件的?您所在的公司是否有使用开源软件?


没有,但有意向
没有,不接受

4、请问您所在的公司所属行业是?

传统金融、新金融
运营商
互联网
其他

5、您所在的公司在使用哪些容器管理方案?(最少选1项)

Kubernetes
Mesos
Docker Swarm
Rancher
没有

6、您所在的公司在使用容器管理方案时,认为其最需要改善的功能项是?(最少选1项)

网络管理方案
存储管理方案
易用性
完整性
没有
           

文章归档