之前写了一篇关于cloudlet安装的博客,现在回头再去看当时实在是不求甚解了。避免误导后人还是删了重写一篇,同时把之后的一些发现和理解也补充进来,算是最近的一个大总结吧。
------------------------------------------------------------------------------------------------------------
照例先把链接粘一下。
这是cmu这个项目的官方库,https://github.com/cmusatyalab/elijah-OpenStack,上面有配置说明,基本就是按这个网页的说明一步一步来。
这个是cmu的基于cloudlet的一个Android应用face swap,https://github.com/cmusatyalab/faceswap,但是我还没配置成功。。 关于cloudlet有两篇文章可以看一下加深理解,一个是cmu里这个项目的提出者的文章叫The Case for VM-Based Cloudlets in Mobile computing,一个他的学生,也是这个项目的开发者,的文章叫openstack++ for Cloudlet Deployment。
这里可以看到这个技术的核心思想就是要在云的边缘(最近边缘计算倒是挺火)配置云的缓存,这样移动设备可以通过WLAN来访问cloudlet而不是通过WAN来访问云,以此来降低延迟提高带宽。里面的一个亮点技术就是overlay和synthesis,类似IBM的soulpad项目,假设我们有一个baseVM,然后对这个baseVM进行修改定制,我们称改变之后的虚拟机为VM-X,所谓overlay就是baseVM和VM-X之间的“差”,这样我们存储的时候就可以只存overlay,不需要存储整个VM-X了,然后可以通过synthesis再把overlay和baseVM合成为VM-X。通过这个技术来降低对移动设备的存储需求——移动设备可以只存储overlay,把baseVM存储在cloudlet上,使得动辄上G的系统降低为MB级别。 说是这么说,如果真这么好用就不会到17年还没什么人研究了。。 接下来我就按照Git上的步骤一步一步的说我遇到的坑和解决的方法。 ---------------------------------------------------------------------------------------------------------------------
的不太稳定,可以改成阿里云或者163的。
出root然后执行命令,就会下载到主文件夹里。
注意统一就行,我为了方便把所有的password都改成了admin。openstack_controller_node和controller_ip改成自己的IP地址,下面的
pub_iface是你自己的网卡名称,一般是eth0什么的,可用ifconfig命令查看,下面的flat_iface涉及到一个open stack虚拟机的网络模式,open stack一共有三种网络模式,分别是flat,flatDHCP和VLAN。cloudlet默认使用的是flatDHCP模式,关于三个模式的区别可以看这篇文章https://www.ibm.com/developerworks/cn/cloud/library/1402_chenhy_openstacknetwork/,就是所谓的基于网桥网络。对于单网卡的机器,这个地方就还写你的网卡就行,大意是说你的虚拟机对外网络的接口以及“虚拟机+物理机”这个小的内网的接口。
然后修改roles->openstack-controller->vars下的main.yml,同上。
这一步只要上一步里正确修改了配置文件,就没什么大问题,统统可以用1)加一个sudo再跑一遍 2)直接就再跑一遍 两个方法解决。
这步时间会比较长,有点儿耐心。
拟机内部分配的虚拟ip,是个“假”ip,这个IP是用来分配给你“虚拟机+物理机”这个小型内网的,所以我们之后会出现用这个本季可以访问ip但是别的电脑就不行的情况。后面的bridge参数和bridge-interface参数照实输入自己的就行,还是ifconfig查看,网桥就是自己的
网桥,一般是br100,virbr0一类的名字,网关就是你的网卡名字。 这里要注意,经常会报什么 你需要输入用户名作为命令里的参数 什么的错误,只需要把下面四句命令敲进命令行就行。 [plain] view plain copy 1. export OS_USERNAME=admin 2. export OS_PASSWORD=admin 3. export OS_TENANT_NAME=admin 4. export OS_AUTH_URL="http://localhost:5000/v2.0/" 这里的export OS_PASSWORD=admin这一句要注意改成和你之前设置的密码一样的就行,保持一致。 这四条命令敲进命令行之后再执行network-create命令一般就没有问题了。
nova floating-ip-bulk-create
这条命令是可以添加单个IP地址的。
--------------------------------------------------------------------------------------------------------------------- 部署工作到这里就结束,然后在浏览器里面敲自己的ip地址/horizon就可以进cloudlet的dashboard了,horizon是cloudlet里面负责
dashboard的组件。 -------------------------------------------------------------------------------------------------------------------------
接下来说一些坑。。
首先是网络连接的问题。我在这个问题上卡了很长的时间,是这样的,我们的虚拟机是可以访问网络的,但是该怎么样让外部的机器访问到这台虚拟机呢?我要用这个技术,最后肯定是要在虚拟机上搭服务器的,没办法让别的电脑访问到这台电脑的资源实在是很伤。事实上我们在虚拟机上搭的tomcat确实没办法用别的机器访问到,本机自然是没问题,在分配了浮动IP之后外面的电脑也没办法用浮动IP访问虚拟机。然后花了两个礼拜左右的时间来研究这个问题,最后发现是因为运营商封锁了80端口。。只要把虚拟机里的tomcat的配置改一下就行了,把80改成81什么的,具体方法可以参见这篇文章:http://www.linuxidc.com/Linux/2013-05/84312.htm。
这里面涉及到内网和外网的问题。首先以我的实验环境来说,“虚拟机+物理机”这是第一层内网,地址是10.11.12.0/24,物理机连的校园网是第二层内网,地址是10.x.x.x,浮动IP我分配的是校园网的IP,之后同在校园网网络环境下的机器就可以访问虚拟机了;
同理我觉得,把我的校园网环境类比成大家家里的Wi-Fi环境,也是第二层内网,那么我们只要浮动IP分配Wi-Fi下的IP地址就可以让同一个Wi-Fi下面的机器访问这个虚拟机;
再同理,我们把运营商提供的网络看作第二层“内网”,一个大的内网,那么只要浮动IP分配一个可用IP地址,就可以把这台虚拟机开放在广域网下了。
理论上,用“IP转发”和“把物理机开放成为DMZ”两个方法也是可以解决这个问题的,浮动IP就是帮我们做个这么一个工作。
其次是handoff的问题。我的handoff实验一直没有成功过,据论坛上作者的回复,handoff这功能有一个很奇妙的地方,物理机A向物理机B提出handoff请求,走的是5000端口,但是真正执行handoff动作的是8022端口,然而8022端口默认是关闭的。在解决这个问题的过程中,我又遇到了iptables规则无法生效的问题,暂且按下不表。。目前还没解决。
最后是自定义baseVM的问题,目前也还没解决。。用base命令和export-base命令生成压缩包之后导入进cloudlet成功,resume一个instance成功,但是instance无法正常使用,总有各种各样的问题,比如no bootable device一类的。
哦对还有个问题,就是说cloudlet这个东西总感觉,它的命令行和可视化是两个系统。比如,我在可视化里面import的baseVM在命令行里用cloudlet list base命令看不到。之后开发的过程中这也是个隐形的坑,走一步看一步吧,不行回来再写一篇续来介绍这些还没解决的问题0.0