Openstack与Docker融合的探究

2017-07-04 06:54刚,徐
软件 2017年5期
关键词:镜像命名容器

涂 刚,徐 娟

(江苏财经职业技术学院,江苏 淮安 223003)

Openstack与Docker融合的探究

涂 刚,徐 娟

(江苏财经职业技术学院,江苏 淮安 223003)

OpenStack已成为了云计算中基础设施即服务(Infrastructure as a Service,简称Iaas)标准。Docker是基于Linux容器为基础构建的容器引擎,通过命名空间和资源划分实现资源隔离和调配,使用分层存储构建镜像,实现了将操作系统和应用捆绑的方法,使得应用系统环境标准化、集装箱化传递成为现实。文章探究了OpenStack、Docker的融合,分析了OPenStack融合Docker的三种方案,为OpenStack的部署、Docker技术的应用提供了参考。

云计算;容器技术;命名空间;资源划分

0 引言

云计算已在企业中落地推广;OpenStack[1]为用户提供了广泛的组件,将存储,计算,监控,网络服务分为几个项目进行开发实现,其开源、灵活性、可扩展性、创新性、市场空间、节省成本、简单的自动化等方面显现出明显的优势,OpenStack已成为云计算中基础设施即服务(Infrastructure as a Service,简称Iaas)标准[2]-[5]。Docker主旨是提供一套能够在共享式基础设施之上对软件工作负载进行管理的容器环境,同时又确保不同负载之间彼此隔离且互不影响[6];Docker还允许工作负载直接访问设备驱动程序、从而带来远超过虚拟机管理程序方案的I/O运行速度;Docker成为云计算中另一个不可或缺的技术[7]-[9]。OpenStack与Docker的融合是云计算发展的必然[10]。

1 OpenStack组件

Rackspace公司和NASA(美国航空航天局)合作研发的开源云计算平台——OpenStack于2010年贡献到开源社区,它是一个完全开放源代码的项目,任何企业及个人都可以参与到该项目的开发和测试中,并贡献代码。目前,最新的OpenStack版本是Ocata,它是自OpenStack项目创立以来的第15个版本;OpenStack通过keystone、glance、nova、neutron等组件[11](如图1所示)实现对裸机、虚机、块存储、对象存储、文件目录、网络、负载均衡、防火墙等数据中心基础架构的统一调度管理。

图1 OpenStack架构Fig.1 OpenStack architecture

OpenStack各个服务之间API调用关系如图2所示,其中实线代表client的API调用,虚线代表各个组件之间通过rpc调用。OpenStack的这种松耦合架构使得各个组件的开发人员可只关注各自的领域,对各自领域的修改不会影响到其他开发人员[12]。不过这种松耦合的架构也给整个系统的维护带来了一定的困难,运维人员要掌握更多的系统相关的知识去调试出了问题的组件。因此开发人员和维护人员都要清楚OpenStack各个组件之间的相互调用关系[13]。

2 Docker技术

Docker[14]起源于2013年3月,是基于Linux容器(Linux Container,简称LXC)为基础构建的容器引擎,通过命名空间(namespace)和资源划分(controller group,简称cgourp)实现资源隔离和调配,使用分层存储构建镜像,实现了将操作系统(Operating System,简称OS)和应用捆绑的方法,使得应用系统环境标准化、集装箱化传递成为现实。[15]-[16]

图2 OpenStack服务调用关系Fig.2 OpenStack service call relationship

Docker采用客户端-服务器(client-server)架构模式[17],如图3所示。Docker守护进程处理建立、运行、发布等任务;Docker客户端和守护进程可以运行在同一个系统或不同系统中。Docker客户端与Docker守护进程通过socket或者RESTful API进行通信。

图3 Docker的架构Fig.3 Docker architecture

Docker镜像是用来创建容器的,是一个只读的模板;一个镜像可以包含一个运行在Apache上的Web应用和其使用的操作系统(主要为Ubuntu)。Docker仓库用来保存镜像;相当于一个代码仓库,Docker仓库分为公有和私有;公有的Docker仓库一般指的是Docker Hub;私有仓库是用户自己创建的仓库。一个Docker容器包含了某个应用运行所需要的环境。每一个Docker容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、移动和删除、保存为镜像。Docker内部采用Linux的namespace机制实现隔离,采用cgroup实现资源的划分(例如给容器划分2G内存、0.5个cpu);这样每一个Docker容器都是独立和安全的应用平台。

命名空间[17]是为操作系统层面的虚拟化机制提供支撑,目前实现的有六种不同的命名空间,分别为mount命名空间、UTS命名空间、IPC命名空间、用户命名空间、PID命名空间、网络命名空间。命名空间简单来说提供的是对全局资源的一种抽象,将资源放到不同的容器中(不同的命名空间),各容器彼此隔离。命名空间有的还有层次关系,如PID命名空间,命名空间的层次关系如图4所示。

图4 命名空间的层次关系Fig.4 hierarchy of namespaces

Docker是一个开源的应用容器引擎,开发者可以打包自己的应用以及依赖包到一个可移植的容器中,然后发布到的Linux 机器上,与KVM这类超级底层虚拟化方案相比,Docker是一种轻量级虚拟化方案,不需要对内核进行改变,Docker主要利用linux内核特性实现虚拟化,所有容器运行在同一个内核中。另外,Docker还可以部署在KVM/XEN这类虚拟机中,容器与虚拟机对比如图5所示[5]。

3 Openstack与Docker的融合

云计算就是希望把计算像水电一样提供给用户使用。然而用户并不是直接使用电,而是使用电灯电视等;同样,用户并不会直接使用计算资源,而是使用在计算资源上层开发的一些应用。OpenStack将硬件资源虚拟化出计算资源池,向上开放了一系列API,用于支持上层应用的开发,满足用户对计算资源的各种需求。OpenStack与Docker的融合有两个方面[6]。

图5 虚拟机与容器对比Fig.5 Containers vs. VMs

(1)利用Docker进行OpenStack部署。将OpenStack的各种服务分别部署在一个容器中,将所有容器互连提供OpenStack服务。以往的自动化部署需要将在每台服务器上面跑部署脚本,现在只需在每台服务器上面运行Docker容器即可,实现了OpenStack平台的秒级部署。

(2)在OpenStack中融合Docker,提供PaaS服务;在这种情况下,云基础设施能够在容器或者虚拟机管理程序当中提供一套完整的数据中心管理解决方案,而这仅仅属于庞大系统整体当中的组成部分之一。以OpenStack为代表的云基础设施方案当中包含多租户安全性与隔离、管理与监控、存储及网络外加其它多种功能设置。任何云数据中心管理体系都不能脱离这些服务而独立存在,但对于Docker或者是KVM基础环境却不会做出过多要求。目前,OpenStack中融合Docker有三种方案。

① Docker Driver for Nova。通过nova-api、docker driver作为hypervisor部署[18],如图6所示。nova-computer-api调用virt api将nova docker driver作为http agent和docker rest api互通,从而控制docker和与容器的通信。另外,glance作为docker register服务的本地节点,提供image服务。

图6 nova-docker方案Fig.6 Docker Driver for Nova

该方案将容器像VM一样操作,通过增加nove docker driver,实现对Docker容器的启停、创建等常规VM的操作,可以通过Docker save方式将镜像存放在glance之中,该种方案优点在于可以使用现成的Openstack neutron来管理网络、实现租户的资源配额、使用host os(注:此处不等于baremetal)等Openstack的好处。然而缺点是没法使用Docker/ COEs(容器调度引擎,Containers Orchestration Engines,简称COEs)服务发现、端口映射等的更有价值功能。

② Heat Docker Plugin。通过Heat组件来实现[19],如图7所示。利用heat来管理docker的资源模板,避免nova仅仅在hypervisor层面对docker管理的限制。

图7 Heat docker plugin方案Fig.7 Heat docker plugin

该方案不依赖于nova的调用,而是通过Openstack编排组件Heat进行编排调用,通过使用Heat Docker Plugin 在创建的vm上使用Heat template设定Docker的参数,来使用Docker api提供的所有功能,缺点在于vm上使用Docker,无法实现资源调度,需要较多的配置工作,无法实现规模集群管理。

③ Magnum。因为Docker Driver for Nova和Docker Plugin for Heat的不足,OpenStack组建了一个Containers团队,推出了magnum。通过magnum管理在vm及baremetal上提供COEs的服务。

magnum的架构[20]如图8所示。通过定义Bay、Node、Pod映射为COEs的集群、pod的实现,完成对COES的部署调度,由COEs调度部署Docker,可以理解成COEs as a service的实现。通过Openstack现有的Heat、Cinder、Nova、Neutron、Glance和Keystone等组件实现租户、编排、镜像、认证、网络等其他功能管理功能。由于现有COEs的网络方案还存在多样性和变数,因此存在需要多种驱动的逐一实现的问题。

4 结束语

OpenStack与Docker是云计算中热门的两个技术。OpenStack作为云计算基础设施解决方案,包含任何云数据中心管理体系都需要的多租户安全性与隔离、管理与监控、存储及网络等服务;Docker技术能够在共享式基础设施之上对软件工作负载进行管理,同时又确保不同负载之间彼此隔离互不影响。将OpenStack与Docker融合,提高资源利用率,降低I/O资源开销,将OpenStack、KVM以及Docker其视为一整套辅助堆栈——其中OpenStack扮演整体数据中心管理方案的角色,KVM作为多租户计算资源管理工具,而Docker容器则负责与应用部署包相关的工作。

图8 magnum架构Fig.8 Magnum architecture

[1] https://www.openstack.org.

[2] 金永霞, 孙宁. 基于OpenStack的云计算实验平台建设与应用[J]. 实验技术与管理, 2016, 33(6): 145-149.

[3] 李磊, 李小宁, 金连文. 基于OpenStack的科研教学云计算平台的构建与运用[J]. 实验技术与管理, 2014, 31(6): 127-133.

[4] 李英壮, 汪楠, 李先毅. 基于OpenStack开发云平台的设计与实现[J]. 武汉大学学报: 理学版, 2012, 58(增刊): 58-60.

[5] 任钢, 王国栋. 云计算架构下的安全生产应急预测预警系统的设计和应用[J]. 软件, 2012, 33(7): 1-4.

[6] 刘思尧, 李强, 李斌. 基于Docker技术的容器隔离性研究[J]. 软件, 2015, 36(4): 110-113.

[7] 王亚玲, 李春阳, 崔蔚, 张晶. 基于Docker的PaaS平台建设[J]. 计算机系统应用, , 2016, 25(3): 72-77.

[8] 杨莎莎, 邹华. 托管Paas平台安全容器的设计与实现[J].软件, 2012, 33(12): 1-5.

[9] Dua, Bangalore, Raja. Virtualization vs Containerization to Support PaaS. IEEE, 2014, 41: 610-614.

[10] 刘思尧, 李强, 李斌. 基于Docker技术的容器隔离性研究[J]. 软件, 2015, 36(4): 110-113.

[11] 张进铎, 毛承国, 李硕, 张卫华, 马迅飞. OpenStack开源云平台主模块的架构分析[J]. 信息技术与信息化, 2014, 6(4): 244-247.

[12] Litvinski O, Gherbi A. Experimental Evaluation of Open-Stack Compute Scheduler[J]. Procedia Computer Science, 2013, 19: 116-123.

[13] 丁小盼, 周浩, 贺珊, 等. 基于OpenStack的云测试平台及其性能分析研究[J]. 软件, 2015, 36(1): 6-11.

[14] 张忠琳, 黄炳良. 基于OpenStack云平台的Docker应用[J].软件, 2014, 35(11): 73-76.

[15] 马越, 黄刚. 基于Docker的应用软件虚拟化研究[J]. 软件, 2015, 36(3): 10-14.

[16] Love, R. "Linux Kernel Development, Third Edition"[M]. China Machine Press, Beijing. 2011.

[17] 于烨, 李斌, 刘思尧. Docker技术的移植性分析研究[J]. 软件, 2015, 36(7): 57-60.

[18] https://wiki.openstack.org/wiki/Docker.

[19] https://github.com/MarouenMechtri/Docker-containers-deplo yment-with-OpenStack-Heat.

[20] http://docs.openstack.org/developer/kolla/.

The Exploration of OpenStack and Docker

TU Gang, XU Juan
(Jiangsu Vocational College of Finance and Economics Huaian Jiangsu 223003)

OpenStack has become the Infrastructure as a Service (Iaas) standard in cloud computing. Docker is based on the Linux container-based container engine, through the namespace and controller group to achieve resource isolation and deployment, the use of tiered storage to build the image, to achieve the operating system and application bundled methods, making the application system environment standardization, containerization Passing into reality. This paper explores the integration of OpenStack and Docker, and analyzes the three schemes of Open-Stack fusion Docker, which provides a reference for OpenStack and Docker.

Cloud computing; Container technology; Namespace; Controller group

TP399

A

10.3969/j.issn.1003-6970.2017.05.013

大数据技术与应用专业课程体系与课程标准建设(2016GHB01006),全国高等院校计算机基础教育研究会2016年度高职科研规划纵向重点课题;自适应空间域图像数字水印算法研究(2016JSCJ01001),江苏财经职业技术学院课题

涂刚(1971-),男,湖北仙桃人,硕士,副教授,主要研究方向:云计算,大数据;徐娟(1996-),女,江苏淮安人,专科,主要研究方向:云计算。

本文著录格式:涂刚,徐娟. Openstack与Docker融合的探究[J]. 软件,2017,38(5):59-63

猜你喜欢
镜像命名容器
Different Containers不同的容器
命名——助力有机化学的学习
难以置信的事情
河鲀命名小考