基于OpenStack的Docker应用

2015-10-09 06:18于建威等
软件导刊 2015年9期

于建威等

摘 要:OpenStack是一个开源云计算管理平台,其能通过各种互补服务提供基础设施即服务(IaaS)的解决方案。Docker是一个开源应用容器引擎,提供基于容器级虚拟化解决方案,同时也是平台即服务 (PaaS)的重要组成部分。提供一种方案,将Docker与Openstack进行集成,使Openstack也能基于Docker容器创建应用实例。不但为openstack提供比直接创建VM更有效率的容器级虚拟化解决方案,也为PasS平台发展提供支持,为PaaS平台服务商提供更多选择。

关键词:Docker;container;PaaS;OpenStack

DOIDOI:10.11907/rjdk.151572

中图分类号:TP301

文献标识码:A 文章编号文章编号:16727800(2015)009004603

1 OpenStack与Docker

OpenStack是一个开源云计算管理平台,由几个主要组件组合起来完成具体工作,该项目几乎支持所有类型云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补服务提供基础设施即服务(IaaS)的解决方案,为每个服务提供API以便进行集成。

Docker是由PaaS提供商dotCloud提供的基于LXC的开源高级容器引擎,整个项目基于Go语言开发,并遵从Apache 2.0开源协议。Docker可在容器内部快速自动化部署应用,并可通过内核虚拟化技术(Namespaces及Cgroups等)提供容器资源隔离与安全保障。以现实世界中货物运输作类比,集装箱解决了各种型号、规格尺寸的货物用不同运输工具进行运输问题。发明Docker的初衷是将各种应用程序和其所依赖的运行环境打包成标准container/image,进而发布到不同平台上运行。

2 Docker特点及优势

2.1 Docker特点

Docker是基于Linux Container (LXC)技术发展而来的一种轻量级打包应用程序框架,结合了LXC技术特点,Docker具有以下特性:

①密度大,启动关机速度快;

②CPU/内存低消耗,省去GuestOS,节省更多CPU和内存资源;

③隔离性好。容器解耦了应用与操作系统,为应用分发提供可能,更适合SaaS。它使用Namespace进程资源隔离(IPC,NET,PID,UTS,NS,USER),使用Chroot隔离根文件系统,并用Cgroup作资源限制;

④所有容器共享内核,便于维护,所以无法做到彻底隔离,同时也带来安全性风险;

⑤物美价廉,资源利用率高,所以应用运营成本比直接部署到OS要低很多;

⑥跨云计算基础架构,不依赖IaaS层技术实现,无论是OpenStack还是AWS,只要有操

作系统,即可创建容器;

⑦隔离性不如虚拟机,如Netlink暂时不支持Namespace,所以导致不支持ISCSI存储;

⑧无法在线迁移,所以最新推出的LXD要在LXC上添加等价虚机功能;

⑨更高密度给网络设计带来了挑战。

2.2 Docker与VM的对比

如图1所示,作为基于LXC技术构建的应用程序容器,Docker Container与普通虚拟机Image相比,最大区别是它并不包含操作系统内核。普通虚拟机将整个操作系统运行在虚拟的硬件平台上,进而提供完整运行环境供应用程序运行,而Docker则直接在宿主平台上加载运行应用程序。本质上,Docker在底层使用LXC启动一个Linux Container,通过Cgroup等机制对不同的container内运行的应用程序进行隔离、权限管理和quota分配等。每个container拥有独立的命名空间(即资源),包括:PID进程、MNT文件系统、NET网络,IPC、UTS主机名等。

图1 Containers(Docker) vs VMs

由于Docker通过操作系统层虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外操作系统开销,提高资源利用率,并且提升IO等方面的性能。

2.3 Docker优势

根据Docker特点及Docker与VM比较,可看出Docker具有以下优点:

(1)更快速的交付和部署。

对开发和运维人员而言,往往希望一次性创建或配置的应用程序可在任意地方正常运行。开发者可使用一个标准镜像构建一套开发容器,完成开发后,运维人员可直接使用该容器部署代码。Docker可快速创建容器,快速迭代应用程序,并使整个过程可视化,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker容器很轻,容器启动时间为秒级,节约了大量开发、测试、部署时间。

(2)更轻松迁移和扩展。

Docker容器几乎可在任意平台上运行,包括物理机、虚拟机、公有云、个人电脑、服务器等。这种兼容性方便用户将应用程序从一个平台直接迁移到另外一个平台。

(3)管理更简单。

使用Docker,只需局部修改,就可替代以往大量的更新工作。所有修改都以增量方式被分发和更新,从而实现自动化、高效管理。

3 Docker与OpenStack集成

Docker基于LXC,利用LXC容器作为基础来抽象一个运行单一应用程序的容器。LXD建立于LXC功能之上,其提供管理多个宿主容器的高级特性,包括动态迁移和创建在线运行状态镜像等功能。LXD与OpenStack的结合使得私有云以及PaaS平台展现出更大优势,既可继承OpenStack的灵活性,又可发挥物理机性能,几乎没有额外虚拟机和内存开销。这个新driver允许Linux容器被安排为OpenStack实例。镜像通过OpenStack镜像服务Glance启动。实例之间通讯基于Neutron网络功能,Docker在OpenStack中也可看作是实例的存在,类似于在KVM主机上运行虚拟机。

3.1 Docker与Nova集成

在OpenStack中,Docker通过在Nova中以driver形式与OpenStack集成。这种实现将Docker容器当作虚拟机使用。但其目的并不是用来代替虚拟机,虚拟机有更好安全性和隔离性,Docker有更低损耗和更高的工作效率,在特定应用场合,虚拟机和容器可以相辅相成。

Nova Docker driver 与OpenStack集成流程如图2所示。

图2 nova docker driver

Nova Docker driver嵌入一个微小的HTTP客户端 与 Docker内部REST API来通信,使用HTTP API控制Docker容器与获得容器信息。通过配置Glance,Docker就能从Glance获得和上传镜像。

3.2 Docker与Heat集成

在 OpenStack中,社区更倾向于使用Heat来协调使用Docker,而不是通过Nova driver将Docker容器当作虚拟机使用。 Nova Docker driver这种实现方式存在一定缺点,如标准API 扩展会使用虚拟机的一些特有功能,但这些功能对于Docker并不适用,而且将Docker当作虚拟机使用,Nova很难利用Docker已有功能,如连接容器(主要指Docker容器间通信)。基于以上原因,Heat是更好的选择。

Heat在OpenStack 中提供资源协调功能,与AWS 的 CloudFormation兼容,允许用户上传描述资源的模板。使用Heat插件机制,用户可以基于传统OpenStack部署方式部署和管理Docker容器。Heat插件已经被OpenStack 社区接受,包含在Icehouse版本中。

举例说明如何使用Heat协调使用Docker:

description:Single compute instance running cirros in a Docker container.

resources:

my_instance:

type:OS::Nova::Server

properties:

key_name:ewindisch_key

image:ubuntu-precise

flavor:m1.large

user_data:#include https://get.docker.io

my_docker_container:

type:DockerInc::Docker::Container

docker_endpoint:{ get_attr:[ my_instance,first_address ]}

image:cirros

图3 heat docker plugin

在上例中,只需要添加更多类似“my_docker_container”片段,就可创建多个容器并将它们连接起来,它们不受OpenStack API限制,可以充分利用Docker Remote API。

3.3 Docker与Cloud Foundry集成

Cloud Foundry是VMware推出的第一个开源PaaS云平台,其支持多种框架、语言、运行环境、云平台及应用服务,并建立在IaaS平台OpenStack上。开发人员能通过Cloud Foundry在极短时间内进行应用程序部署和扩展,无需担心任何基础架构问题。

应用程序通常依赖于服务(例如:数据库、消息传递、第三方SaaS提供商运行)、存储数据和推动移动通知等。除了为开发人员提供一个简单、快捷部署应用程序的方式外,Cloud Foundry还定义了服务实例。

当Cloud Foundry开发者定义并绑定一个服务到应用程序,负责提供服务的实例就称之为“Service Broker”。“Service Broker”告知Cloud Foundry服务的目录和计划,

并接收Cloud Foundry生命周期的调用,包括创建、删除、

绑定和解除。代理将这些调用传递给服务本身,服务提供者决定服务如何实现,Cloud Foundry只要求服务提供者实现“服务代理API”。

Containers Service Broker允许给用户提供的服务运行在绑定了应用程序的容器Docker里,这些任务包括:用随机凭证提供一个服务容器;绑定一个服务容器到应用程序;从应用程序取消服务的容器绑定,释放一个服务容器;显示服务容器管理面板。

4 结语

将Openstack与Docker相结合,前者用于管理整个数据中心,KVM用于多租户的计算资源管理,后者用于应用程序打包部署,该结合相对于单纯使用虚拟机有更高资源利用率,可秒级部署,跨平台打包部署应用。在众多PaaS平台产品中发展迅速,获得社区认可与支持,与多个知名项目合作集成。 而与Heat项目的集成,为打通IaaS、PaaS平台提供了很好途径。惠普最新推出的基于Cloud Foundry的PaaS平台Helion Development platform,也将Docker应用于HelionOpenStack平台上。由此可见,Docker在云计算模型中扮演着重要角色。如今Docker已经非常流行,成为仅次于OpenStack的云开源项目,将Docker运用于Openstack平台基础上,能更加方便地提供基于PaaS平台的服务。随着应用Docker平台越来越多,其将会给云计算领域带来新突破。

参考文献参考文献:

[ 1 ] SOLOMON HYKES.Docker (software)[ EB/OL ].http://en.wikipedia.org/wiki/Docker_(software).

[ 2 ] Docker getting start:related knowledge[ EB/OL ].https://tiewei.github.io/cloud/DockerGettingStart/.

[ 3 ] NICKOLOFF,JEFF.Docker in action[ M ].US:Manning Publications,2014.

[ 4 ] Containers service broker for cloud foundry[ EB/OL ].https://github.com/cfplatformeng/cfcontainersbroker/.

[ 5 ] FERRANRODENAS.Docker service broker for cloud foundry[ EB/OL ].http://blog.pivotal.io/cloudfoundrypivotal/products/dockerservicebrokerforcloudfoundry.

[ 6 ] TOBBY BANERJEE.LXC vs LXD vs Docker Making sense of the rapidly evolving container ecosystem[ EB/OL ].http://www.flockport.com/lxcvslxdvsdockermakingsenseoftherapidlyevolvingcontainerecosystem/.

责任编辑(责任编辑:孙 娟)