【编者按】 作者Henry Zhang(张海宁),现任VMware中国研发中心云原生应用首席架构师,Cloud Foundry中国社区最早的技术布道师之一,Harbor企业级开源容器Registry项目负责人,国内最早的iOS开发者。2012年加入VMware中国研发中心,先后负责开源平台Cloud Foundry、软件定义存储VSAN、大数据虚拟化等领域的技术布道和解决方案推广。目前着重关注云原生应用的项目孵化和研发工作,内容包括Container、PaaS、IaaS等方面。他的微信公众号是 亨利笔记 。
本文节选自Henry参与编写的《软件定义存储:原理、实践与生态》一书,本周日(7月3日)下午1点之后,在优客工场(四季青社区)四季青路7号院1号楼,Henry将在软件定义存储沙龙作容器存储技术的分享,详细信息见文末。
---Begin---
容器应用的存储需求
容器是近年兴起的应用开发、交付和运维的方式。随着应用模式的深入,已经从原先无状态为主的应用,逐渐发展到有状态的容器应用。有状态的容器应用必需要有持久化数据的能力,存储模型如下图所示。
在容器中运行的应用,应用真正需要保存的数据,可以写入持久化的Volume数据卷。由于以微服务架构为主的容器应用多为分布式系统,容器可能在多个节点中动态地启动、停止、伸缩或迁移,因此,当容器应用具有持久化的数据时,必须确保数据能被不同的节点所访问。另一方面,容器是面向应用的运行环境,数据通常要保存到文件系统中,即存储接口以文件形式更适合应用访问。综合上述需求,容器平台较适宜的应是具有共享文件接口的存储系统。
容器存储的架构
为了满足容器的存储需求,架构上可分为容器存储控制平面和存储数据平面两部分,如下图所示。
1. 容器存储控制平面(Container Storage Control Plane),控制平面通常由软件实现,主要是接收北向API收到的存储请求,如创建、删除、加载、卸载和迁移数据卷(volume)等,并传递给底层数据平面去完成实际的存储操作。控制平面一般需要满足调用层规范的API,既可以是Docker容器引擎卷插件(Volume Plugin) 的API,也可以是Kubernetes等编排调度平台的Volume API。
2. 存储数据平面(Storage Data Plane)提供数据实际的持久化能力,不仅需要实现容器数据卷的读写、快照、数据保护和复制等存储操作,而且通常还需具备多节点共享数据的能力。数据平面可以基于文件系统如NFS,CephFS等来做数据实际存储,也可以基于块设备如iSCSI等加上文件接口的来实现数据存储功能。从部署架构上看,容器存储可以分为集中式和分布式两种。集中式存储包括传统SAN为代表的块存储和NAS为代表的文件存储。分布式存储主要包括GlusterFS等共享文件系统和Ceph RBD等块设备,在云环境中的还包括各种云存储,如AWS的EBS块存储或S3对象存储。
容器存储的volume管理
由于容器技术应用的时间不长,成熟的容器存储方案还在发展过程中。目前,容器的存储大多支持Docker或Kubernetes的Volume,因此我们下文介绍这两种Volume的原理。
Docker V1.8正式发布了容器卷插件(Volume Plugin) 的规范,允许第三方厂商的数据卷在Docker引擎中提供数据服务,使得外置存储可以超过容器的生命周期而独立存在。这意味着各种存储设备只要满足接口API的标准,就可以接入Docker容器的运行平台中。
现有的各种存储可以通过简单的驱动程序封装,从而实现和Docker容器的对接。可以说,驱动程序实现了和容器引擎的北向接口,底层则调用后端存储的功能完成数据存取等任务。目前已经实现的Docker Volume Plugin中,后端存储包括常见的NFS, CIFS, GlusterFS和块设备等。
Kubernetes是开源的容器集群管理平台,可以自动化部署、扩展和运维容器应用。Kubernetes的调度单位称作“Pod”(豆荚),每个Pod包含一个或多个容器。Pod可部署在集群的任意节点中,存储设备可以通过数据卷(Volume)提供给Pod的容器使用。为了不绑定特定的容器技术,Kubernetes没有使用Docker的Volume机制,而是制定了自己的通用数据卷插件规范,以配合不同的容器运行时来使用(如Docker和rkt)。数据卷分为共享和非共享两种类型,其中非共享型只能被某个节点挂载使用(如iSCSI,AWS EBS等网络块设备),共享型则可以让不同节点上的多个Pod同时使用(如NFS,GlusterFS等网络文件系统,以及可支持多方读写的块设备)。对有状态的应用来说,共享型的卷存储能够很方便地支持容器在集群各节点之间的迁移。
为了给容器提供更细粒度的卷管理,Kubernetes增加了持久化卷PV(Persistent Volume)的功能,把外置存储作为资源池,由平台管理并提供给整个集群使用。Kubernetes的卷管理架构使得存储可用标准的接入方式,并且通过接口暴露存储设备所支持的能力,从而在容器任务调度等方面实现了自动化管理。
容器的存储项目和产品
已经有越来越多的容器存储项目和产品涌现,包括Flocker(控制平面),Portworx(控制平面和数据平面),以及VMware的VirtualSAN + Photon Platform的超融合方案(下图)。总体而言,面向容器的存储系统还有待发展和成熟,这也是各存储厂商新的机遇。
限于篇幅,关于容器和软件定义存储更全面深入的介绍,读者们可参阅《软件定义存储:原理、实践与生态》一书。本周日的新书发布会和技术沙龙,欢迎大家参与,信息如下。
软件定义存储技术沙龙信息暨新书发布会
活动时间:2016年7月3日(周日)13:00-17:00
主办方:华章科技书院
协办方:幂次方学院(原优客工场商学院)
活动议程:
12:50-13:10 签到
13:10-13:20 主持人开场介绍与分享
13:20-13:30 DOIT/DoStor 创始人 郑信武 致辞
13:30-14:10 分享一:软件定义存储技术与生态 VMware 资深存储架构师 叶毓睿
14:10-14:40 分享二:开源世界里的SDS剖析 XSKY CTO 王豪迈(Ceph主要贡献者)
14:40-15:10 分享三:容器应用的存储架构 VMware中国研发中心云原生应用首席架构师 张海宁
15:10-15:20 休息
15:20-16:20 圆桌论坛:软件定义存储的软和硬
主持人: 企事录创始人 张广彬
论坛嘉宾: 张瑾、高志国、刘通、李炫辉、朱荣泽等
16:20-16:30 新书揭幕
16:30-17:00 签名售书
活动地点:优客工场(四季青社区)四季青路7号院1号楼
或者进入京东网站、手机App,搜索 软件定义存储,建议选择 京东自营店 (这个是二维码直接跳转的)。