用Docker弄完粉刺之后需要涂抹还需要OpenStack吗

后使用快捷导航没有帐号?
使用OpenStack管理Docker容器
查看: 6057|
评论: 0|原作者: 洪国安|来自: Docker
摘要: 在这篇文章中,我将介绍一些不同的方法,这些方法是关于OpenStack如何创建,以及管理Docker容器。三种主要的方法分别使用的是Nova Docker驱动,Heat Docker插件,以及Magnum。Magnum比较新颖,现在仍在开发中。OpenS ...
在这篇文章中,我将介绍一些不同的方法,这些方法是关于OpenStack如何创建,以及管理Docker容器。三种主要的方法分别使用的是Nova Docker驱动,Heat Docker插件,以及Magnum。Magnum比较新颖,现在仍在开发中。OpenStack是开源云编排软件,Docker则是一个开源的容器管理软件。Nova Docker DriverNova通常用来管理虚拟机。在这种方法中,Nova驱动将会进行扩展,以便用来催生Docker容器。接下来是Nova Docker wiki里面提及的架构示意图。为了催生容器,Nova计算驱动将指向Docker。Nova Docker Virt驱动使用http api与Docker进行对话Docker镜像保存在Docker Registry中,并且从这里暴露给Glance,Nova将会使用Docker Registry创建容器。Nova Docker 驱动与Devstack我按照wiki里面提到的步骤,在OpenStack Devstack kilo下获取Nova Docker驱动。为了使其可以在我的系统下正常工作,要进行一些镜像调整。我在Virtualbox下使用Ubuntu 14.04进行下列测试,下面是一些主要步骤:安装Docker安装Nova Docker插件进行Devstack的堆叠安装Nova-Docker rootwrap过滤器应用Kilo解决方案创建Docker镜像,并将其暴露给Glance由Nova催生Docker容器1.安装DockerDocker可以使用这里提到的步骤进行安装。下面是我系统上使用的版本,我已经开启用户访问,这样我就不需要在每个Docker命令中运行sudo。$ docker --versionDocker version 1.6.2, build 7c8fca22.安装Nova Docker插件wiki里面提到的步骤可以出色的工作。当我在查看驱动时,我使用的是稳定版本的kilo。git clone -b stable/kilo /stackforge/nova-docker.git下面是安装成功后,Nova Docker插件的版本号$ sudo pip list | grep nova-dockernova-docker (0.0.1.dev197)&3.进行Devstack的堆叠首先,检查Devstack Kilo的代码库。git clone -b stable/kilo /openstack-dev/devstack.git我稍微修改了local.conf文件,修改后的版本在这里。接下来是进行堆叠。./stack.sh4.安装Nova-Docker rootwrap过滤器wiki里面提到的步骤可以出色的工作。sudo cp nova-docker/etc/nova/rootwrap.d/docker.filters \/etc/nova/rootwrap.d/&5.应用Kilo解决方案堆叠抛出了下面错误: 22:28:57.870 ERROR mon.threadgroup [req-f89bc2cd-5fcc-42e4-a588-ef92ab101fb3 None None] 'module' object has no attribute 'DOCKER'n-cpu.log.-5-06-03 22:28:57.870 TRACE mon.threadgroup AttributeError: 'module' object has no attribute 'DOCKER'在OpenStack的邮件列表讨论过这个问题,解决方法是编辑Docker驱动文件。在我的案例中,文件位于“/usr/local/lib/python2.7/dist-packages/novadocker/virt/docker“。6.创建Docker镜像将其暴露给Glance我首先使用“docker pull nginx”命令,从Docker Hub抓取Nginx容器$ docker imagesREPOSITORY & & & & &TAG & & & & & & & & IMAGE ID & & & & & &CREATED & & & & & & VIRTUAL SIZEnginx & & & & & & & latest & & & & & & &a785ba7493fd & & & &2 weeks ago & & & & 132.9 MB接下来将镜像保存到Glance。docker save nginx | &glance image-create --is-public=True --container-format=docker --disk-format=raw --name nginx现在,查看Glance镜像列表,我们可以看见Docker镜像已经和其他实例镜像在一起了,并且Nginx的类型是Docker。7.由Nova催生Docker容器我们使用Glance里面的镜像,创建nginx容器。Flavor事实上不是那么重要。nova boot --flavor m1.small --image nginx nginxtest查看主机里面正在运行的Docker容器。$ docker psCONTAINER ID & & & &IMAGE & & & & & & & COMMAND & & & & & & & &CREATED & & & & & & STATUS & & & & & & &PORTS & & & & & & & NAMES4f514bc59a41 & & & &nginx:latest & & & &"nginx -g 'daemon of & 12 seconds ago & & &Up 11 seconds & & & & & & & & & & & & & nova--ac5c-4c28-967b-25b9474ab2de列出Nova实例:$ nova list+--------------------------------------+-----------+--------+------------+-------------+------------------+| ID & & & & & & & & & & & & & & & & & | Name & & &| Status | Task State | Power State | Networks & & & & |+--------------------------------------+-----------+--------+------------+-------------+------------------+| -ac5c-4c28-967b-25b9474ab2de | nginxtest | ACTIVE | - & & & & &| Running & & | private=10.0.0.5 |+--------------------------------------+-----------+--------+------------+-------------+------------------+检查nginx是否正常工作:$ curl 10.0.0.5Welcome to nginx!||谢谢使用nginx。Heat plugin&Magnum下面是一些Nova Docker驱动目前所不具备的功能:1. 传递环境变量2. 连接容器3. 指定volumes4. 编排和调度容器Heat Docker插件可以解决1-3的问题,第4个问题无法完美解决。下面是我在OpenStack Docker wiki上查找的,关于Heat的架构示意图。这里不涉及Nova。OpenStack Heat在主机上使用Docker插件与Docker代理对话。主机是由VM催生的。VM可以由Nova催生,也可以让Heat使用Nova驱动催生。这里不需要Glance。因为容器镜像可以保存在Docker Registry。这种Heat方法允许我们指定环境变量,连接容器,指定volumes,以及编排运行Docker的主机。使用Heat插件Heat插件与OpenStack Kilo一同工作时,我遇到了一些问题。因为OpenStack Icehouse可以完美地工作,所以我将持续地使用OpenStack Icehouse。我参考wiki上的方法,在Devstack上使用OpenStack Icehouse集成Heat插件。我的环境:在Virtualbox上运行Ubuntu 14.04,这个Virtualbox之前已经安装了Devstack Icehouse发行版。我的localrc文件在这里。localrc使用Nova网络而不是Neutron。进行堆叠并安装Heat插件:进行堆叠。成功堆叠后,我按照wiki提及的方法,安装Heat docker插件。插件安装完成后,需要重启Heat engine service。打开screen会话,进入Heat service的screen会话,关闭会话(ctrl-c),并重启这个特殊的service。完成重启Heat engine后,我们可以检查插件是否正确安装,并运行。$ heat resource-type-list | grep Docker| DockerInc::Docker::Container使用Heat启动本地容器我 们将在主机上运行Docker代理,然后,使用OpenStack Heat插件创建容器。为了完成上述目标,第一步是在主机上安装Docker,并允许http访问,以便让Docker客户端进行连接。关于Docker的安装,使用的是这里的步骤。默认下,Docker不允许额外的http访问,为了让Docker在端口2376上允许额外的http访问,执行下列命令:$ sudo /usr/bin/docker -d --host=tcp://0.0.0.0:2376下面是一个简单的Heat的YML文件,这个文件是用来在本地创建nginx容器。heat_template_version: description: &Heat template to deploy Docker containers to an existing hostresources:nginx-01:type: DockerInc::Docker::Containerproperties:& image: nginx& docker_endpoint: 'tcp://192.168.56.102:2376'使用上述模板,创建Heat堆栈。$ heat stack-create -f ~/heat/docker_temp.yml nginxheat1检查堆栈是否创建成功:$ heat stack-list+--------------------------------------+---------------+-----------------+----------------------+| id & & & & & & & & & & & & & & & & & | stack_name & &| stack_status & &| creation_time & & & &|+--------------------------------------+---------------+-----------------+----------------------+| d878d8c1-ce17-4f29-9203-febd37bd8b7d | nginxheat1 & &| CREATE_COMPLETE | T13:27:54Z |+--------------------------------------+---------------+-----------------+----------------------检查容器是否在本地运行:$ docker -H :2376 psCONTAINER ID & & & &IMAGE & & & & & & & COMMAND & & & & & & & &CREATED & & & & & & STATUS & & & & & & &PORTS & & & & & & & NAMES624ff5de9240 & & & &nginx:latest & & & &"nginx -g 'daemon of & 2 minutes ago & & & Up 2 minutes & & & &80/tcp, 443/tcp & & trusting_pasteur到这里,我们就可以在本地容器上访问web服务器。使用Heat启动远程容器我们将使用Nova创建一个VM,开启VM上的Docker代理,然后在VM上,使用OpenStack Heat插件创建容器。首先,创建一个Fedora镜像,并上传到Glance,我所使用的步骤来自这里,完成上述步骤后,查看Glance里面的镜像。$ glance image-list+--------------------------------------+---------------------------------+-------------+------------------+-----------+--------+| ID & & & & & & & & & & & & & & & & & | Name & & & & & & & & & & & & & &| Disk Format | Container Format | Size & & &| Status |+--------------------------------------+---------------------------------+-------------+------------------+-----------+--------+| aef-4bab-85df-1f9f72b6370b | cirros-0.3.1-x86_64-uec & & & & | ami & & & & | ami & & & & & & &|
&| active || ea6eb351-e-91cd-806a67c4e9fe | fedora-software-config & & & & &| qcow2 & & & | bare & & & & & & |
| active |+--------------------------------------+---------------------------------+-------------+------------------+-----------+--------+接下来,我使用下面的脚本,创建ssh需要的密钥,并设置合适的安全组。# Create key and uploadssh-keygennova keypair-add --pub-key ~/.ssh/id_rsa.pub key1# Permit ICMP (ping):nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0# Permit secure shell (SSH) access:nova secgroup-add-rule default tcp 22 22 0.0.0.0/0# Permit 2375 port access (Docker endpoint):nova secgroup-add-rule default tcp .0.0.0/0现在,我们使用Nova创建Fedora VM。nova boot --flavor m1.medium --image fedora-software-config --security-groups default --key-name key1 --max-count 1 fedoratest为了下载Docker镜像,这个实例需要额外的网络连接。为此,我们需要在与Nova联网时调整iptables,以便创建NAT filter。第一条规则是删除默认的filter,第二条是创建eth0地址的filter。sudo iptables -t nat -D nova-network-snat -o br100 -s 10.0.0.0/24 -j SNAT --to-source&sudo iptables -t nat -A nova-network-snat -o br100 -s 10.0.0.0/24 -j SNAT --to-source检查实例的创建:$ nova list+--------------------------------------+------------+--------+------------+-------------+------------------+| ID & & & & & & & & & & & & & & & & & | Name & & & | Status | Task State | Power State | Networks & & & & |+--------------------------------------+------------+--------+------------+-------------+------------------+| abfb-4cba-907f-663fd762cf2a | fedoratest | ACTIVE | - & & & & &| Running & & | private=10.0.0.2 |+--------------------------------------+------------+--------+------------+-------------+------------------+为了登录Fedora VM,我们需要使用密钥,这个密钥是创建VM时使用的。ssh -i ~/.ssh/id_rsa fedora@fedora镜像上已经创建完成了,并且安装了Docker代理。为了可以与OpenStack Heat对话,我们需要启动Docker,并让Docker监听2375端口。sudo cp /usr/lib/systemd/system/docker.service /etc/systemd/system/Edit /etc/sysconfig/docker:OPTIONS=--host=tcp://0.0.0.0:2375sudo systemctl start docker.service现在,我们可以在远程VM上创建容器了。现在,为了在远程VM上创建nginx容器,我们要指定Heat模板。docker文件的末尾是远程VM的ip地址。heat_template_version: description: &Heat template to deploy Docker containers to an existing hostresources:nginx-01:type: DockerInc::Docker::Containerproperties:& image: nginx& docker_endpoint: 'tcp://10.0.0.2:2375'使用上面的模板开启Heat堆叠。$ heat stack-create -f docker_stack1.yml docker_stack2事前,我们需要抓取nginx的Docker镜像。利用Heat,我们可以使这个过程自动化。现在,我们可以检查到容器已经在VM上创建了。[fedora@fedoratest ~]$ docker -H :2375 psCONTAINER ID & & & &IMAGE & & & & & & & COMMAND & & & & & & & &CREATED & & & & & & &STATUS & & & & & & &PORTS & & & & & & & NAMES18a7ed8f5b00 & & & &nginx:latest & & & &"nginx -g 'daemon of & About a minute ago & Up About a minute & 80/tcp, 443/tcp & & tender_morse这里有一份Heat模板,这个模板文件可以创建VM,抓取Apache和My容器,并连接它们。下面是另外一份优秀的wiki,这份wiki为Docker容器详细地解释了Heat模板,并列出了一个优秀的例子。不幸的是,在我的Devstack环境下,这些脚本无法正常工作。实例催生了,但容器创建失败。我花了许多时间,但仍无法解决。OpenStack MagnumOpenStack Heat插件解决了许多问题,这些问题是Nova Docker插件无法解决的。但是,它仍然无法解决动态编排和调度。Magnum是一个通用的容器管理解决方案,和其他容器技术一样,OpenStack开发的这个方案是可以用来管理Docker的。目前,Magnum支持Kubernetes和Docker。无论是在Kubernetes,还是Docker上,主机集群都可以被创建,并且在使用特殊的聚类和容器情况下,容器可以列入集群。Magnum仍然处在早期阶段,第一版本已经在几个月前和OpenStack kilo一起发行。下面是Magnum的wiki上提及的Magnum架构示意图Magnum在任何需要管理容器的地方,使用其他的OpenStack组件,例如Nova, Heat, Neutron, Glance和Keystone 。Nova用于创建micro VM实例,容器在其顶部运行,而Docker实例这时运行在每个micro VM实例上。Heat用于整体编排,在使用Kubernetes的情况下,heat会创建Kubernetes代理,同步控制器,而对于Docker, Heat则会创建Docker Swarm集群,以及Swarm代理。所涉及的步骤是创建bay-model(Kubernetes,Docker),以及bay和容器的创建。我试图按照这里提及的步骤,去创建Magnum集群。步骤一直进行到创建集群这里,但无法成功地完成这一步骤,总是卡在“CREATE_IN_PROGRESS”,我尝试过Kubernetes和Docker的bay-model,但仍没有成功。如果有人可以完成这个步骤,请告诉我。容器编排仍然在发展中,并且有多种解决这一问题的技术仍在开发过程中。Docker正在开发自己的编排方案。对于那些已经在使用OpenStack的开发者,Magnum是一个比较完整的解决方案,因为它与其他OpenStack组件整合得较好。我觉得随着时间的推移,较好的技术会生存下来的。
上一篇:下一篇:云计算(88)
Docker从一个新兴的技术到一个商品化模式,这一过程的发展速度很惊人,它炙手可热的同时也给带来一些困惑。这也带来了一些同学的质疑和评论:假如用了Docker再去用OpenStack是否合适?本文来自Helion惠普云计算,深入浅出的对OpenStack和Docker进行类比。
以下是原文:
Solomon Hykes创立了Docker,没有想到过Docker会人气爆棚,成为仅次于OpenStack的最受欢迎的云开源项目。然而听说过Docker的朋友很少知道其真正的意义,很多人会被各种概念混淆,甚至把OpenStack和Docker进行类比。
Docker的相关背景
简单来说,Docker提供了一种程序运行的容器,同时保证这些容器相互隔离。虚拟机也有类似的功能,但是它通过Hypervisor创建了一个完整的操作系统栈。
不同于虚拟机的方式,Docker依赖于Linux自带的LXC(Linux Containers)技术。LXC利用了Linux可以对进程做内存、CPU、网络隔离的特性。Docker镜像不需要新启动一个操作系统,因此提供了一种轻量级的打包和运行程序的方式。而且Docker能够直接访问硬件,从而使它的I/O操作比虚拟机要快得多。
Docker可以直接跑在物理服务器上,这引起大家的疑问:假如已经用了Docker,还有必要使用OpenStack吗?
还有必要使用OpenStack吗?观点如下:
这个问题和OpenStack没有直接的联系,也可以套在其他云平台上。大家为什么会拿Docker和OpenStack做比较的原因是:OpenStack是私有云环境中最流行的云平台,在私有云环境中,大家认为可以把Docker作为另一种选择。
有关于Hypervisor的误区:很多KVM和Docker的性能测试的对比跟OpenStack一点关系都没有,因为OpenStack只是一种框架。事实上这种性能测试(不管是KVM还是Docker)是跑在OpenStack下,这表明了KVM和Docker可以共存。当使用OpenStack去管理Docker情况下,Docker和OpenStack的争论是没有意义的。
云平台提供一个完整管理数据中心的解决方案,至于用哪种hypervisor或container只是云平台中的一个小部分。像OpenStack这样的云平台包含了多租户的安全、隔离、管理、监控、存储、网络等其他部分。云数据中心的管理需要很多服务支撑,但这和用Docker还是KVM其实没多大关系。
Docker不是一个全功能的VM, 它有很多严重的缺陷,比如安全、Windows支持,因此不能完全替代KVM。现在Docker社区一直在弥补这些缺陷,当然这会带来一定的性能损耗。
原生hypervisor的性能、容器化的性能、应用的性能是不一样的东西,相互对比没有意义。
把Docker容器打包进KVM镜像中对Docker运行几乎没有影响。这种架构通常是用hypervisor来管理计算资源,而像Heat、Cloudify、Kubernetes这样的的orchestration layer都用于管理在hypervisor中的docker容器。
正确看待OpenStack、KVM、Docker的方式应该是: OpenStack用于管理整个数据中心,KVM和Docker作为相应的补充,KVM用于多租户的计算资源管理,Docker Container用于应用程序的打包部署。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:700779次
积分:12768
积分:12768
排名:第1148名
原创:288篇
转载:1964篇
评论:11条
(36)(172)(194)(52)(5)(149)(32)(85)(164)(258)(112)(24)(403)(199)(1)(10)(76)(283)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&开发维护:&
管理员: 站长统计:}

我要回帖

更多关于 弄完粉刺之后需要涂抹 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信