一个私有云实例的起步

只是一个简单的开始。

当云计算老师要求我们在自己笔记本上搭建私有云时我一开始是拒绝的,多耗资源的玩意儿啊,弄一个最低配单机版的,内存就要求动不动就4G+,磁盘40G+。。。

这一折腾下来,还是学到了不少,总结下一些坑吧。

资源有限,所有组件在一台虚拟机(all-in-one),客户机为ubuntu 14.04 server版

虚拟化那些事儿

这里放一张我画的简单思维导图吧:
virtual technology

网络配置那些事儿

一开始我是选择VirtualBox来搭建的,但在网络配置过程中遇到了一些坑:

与VMWare不同,VirtualBox只虚拟了一张网卡类似于VMWare的VMnet8,而没有用于宿主机连接客户机的host-only网卡。由于客户os是ubuntu server版,到时候访问dashboard不得不需要宿主机连接客户机。于是又加一张host-only网卡。

结果发现一个问题:

在NAT网络正常情况下,临时通过ifconfig来为host网卡配置静态ip,世界美好,但是,当我将配置写入文件时,NAT就挂了,目前还没找到解决方案。

还有一个问题,我尝试为NAT网卡分配静态IP,发现行不通。

最终还是投奔VMWare,简单粗暴的NAT网卡,可以禁用DHCP,可以ping通客户机。

为openstack Neutron配置网络

openstck主机的ip与NAT网卡ip相同:

1
HOST_IP=172.16.38.101

为了外网能够访问dashboard,让br-ex网桥和客户机NAT网卡关联:

1
2
3
4
5
6
7
8
9
10
11
12
## Neutron options
Q_USE_SECGROUP=True
FLOATING_RANGE="172.16.38.105/24"
FIXED_RANGE="10.0.0.0/24"
Q_FLOATING_ALLOCATION_POOL=start=172.16.38.130,end=172.16.38.138
PUBLIC_NETWORK_GATEWAY="172.16.38.2"
Q_L3_ENABLED=True
PUBLIC_INTERFACE=eth0
Q_USE_PROVIDERNET_FOR_PUBLIC=True
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_BRIDGE=br-ex
OVS_BRIDGE_MAPPINGS=public:br-ex

安装好后可以通过ovs-vsctrl show检查br-ex和eth0的对应关系是否正常:

instance的网络配置

一个简单的网络拓扑图:

public用于openstack主机外网访问,与openstack eth0网卡处于同一网段,这里(172.16.38),
用于给实例分配floating IP,可以它的范围就是我们在local.conf里关于Neutron options的
Q_FLOATING_ALLOCATION_POOL=start=172.16.38.130,end=172.16.38.138字段。

然后private就是实例内部网络了,在创建实例的时候,分配网络就分配private network,可以看到它的范围就是字段FIXED_RANGE="10.0.0.0/24"

路由器连接public 和 private

stack.sh那些事儿

镜像源

网上的文章都将镜像源换成了http://git.trystack.cn
即:

1
2
3
GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git

但发现http://git.trystack.cn/kanaka/noVNC.git直接就是404,安装过程中也因为找不到镜像中断过,应该是镜像源出现问题了,于是我换成了github源。

djiango问题

解决办法:

先查看openstacksdk版本:

1
2
3
4
5
6
7
8
9
root@ubuntu:~# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import openstack
>>> import pbr.version
>>> print(pbr.version.VersionInfo('openstacksdk').version_string())
0.8.1
>>> quit()

修改/usr/local/lib/python2.7/dist-packages/openstack/session.py里的DEFAULT_USER_AGENT = "openstacksdk/%s" % openstack.__version__为:
DEFAULT_USER_AGENT = "openstacksdk/0.8.1"
重新安装

1
2
3
./unstack.sh
./clean.sh
./stack.sh

其他

想重启服务?

当重启虚拟机后,发现宿主机和客户机互相都ping不通了,又是一个坑,因为eth0 桥接到br-ex 上面去了,而重启后br-ex 没有ip 配置,把eth0 从 br-ex 上去掉,或者手动通过ifconfig 给 br-ex 配置ip ,都可以解决问题。

对于重启服务,之前的openstack是有rejoin-stack.sh方式的,但官方已经不推荐这种做法。

所以我就直接针对于安装完毕的状态创建快照,下次直接恢复就是了(那么上面的网络问题也就不是问题了)。

安全访问控制

在配置安全访问的时候,如果直接使用default secure会导致openstack主机没法ping通实例floating IP,或者ssh连接,需要自定义规则:

结语

这只是一个简单的开始,更多理论知识和实践,有待积累。

最后进入我们创建的实例去看看吧。一个简单的私有云实例。

最后,端午安康!

罗峡的博客 wechat
欢迎扫描上面的微信公众号二维码,关注我的个人公众号:全栈前端
坚持原创技术分享,您的支持将鼓励我继续创作!