Jan 252013
 

对于Folsom版本,我一直都没尝试Nova network的安装,因为这个基本和Essex版本一样,不过还是有几个细节的地方需要调整。

如何在一块网卡的环境下安装Openstack,设置nova network。刚好看到一套脚本,可以满足我的需求。

上次和朋友交流,讨论万兆网卡已经逐渐普及,服务器上,如果是单块万兆网卡,基本就可以满足需求。使用单块网卡,不只是可以降低成本,而且还可以减少系统的复杂性,布线等。至少Facebook的机房的机器,都是单块网卡,这是比较值得思考的地方。

传统企业的网络物理划分成:管理网络,数据网络,外网,带外管理等,这些随着机器的密度增加,布线难度很大,而且这种划分,其实并不能带来所谓的安全性增加。目前已经有国内的互联网企业在尝试单块网卡,跑所有的业务。

我也总算基本搞明白单块网卡,如何设置。

https://github.com/jedipunkz/openstack_folsom_deploy

这套脚本功能很丰富,我现在测试他的nova network的功能。脚本很体贴,把Folsom的源的添加,都是自动添加。

如果你希望step by step 安装,已经有一篇英文的文档:http://openstack-folsom-install-guide.readthedocs.org/en/latest/

也是单网卡,和脚本安装是基本一样的。我能看到的区别就是网卡的设置,这个问题应该不大,因为nova network,会处理,你如果不设置。

2013年1月31日:我已经测试过多节点,一切正常,他的控制节点,同时也是计算节点,如果你不希望控制节点跑计算服务,那么你只需要把计算服务停掉就可以了。


设置网络

单网卡就可以,设置固定的IP地址,不需要做任何的设置。脚本默认是单网卡,所以如果你希望是双网卡,估计是需要调整脚本。

# cat /etc/network/interfaces 
# This file describes network interfaces avaiulable on your system
# and how to activate them. For more information, see interfaces(5).
# Modified by convert_static.sh.
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.1.199.6
netmask 255.255.255.0
network 10.1.199.0
gateway 10.1.199.1
dns-nameservers 8.8.8.8

 

安装git

apt-get -y install git
git clone https://github.com/jedipunkz/openstack_folsom_deploy.git
cd openstack_folsom_deploy

 

配置环境

编辑deploy_with_nova-network.conf

需要修改的内容不多, 我为了方便,直接让脚本从我的内网下载image。另外需要有一个分区安装cinder volume,这个你需要提前准备好,告诉脚本你是使用哪个分区。

目前这个脚本,如果运行有错误,你就无法重复安装,只能重装系统,再来尝试。

#HOST_IP='10.200.8.14'
HOST_IP='10.1.199.6'

#CINDER_VOLUME='/dev/sda6'
CINDER_VOLUME='/dev/sda7'

#FLOATING_RANGE="10.200.8.28/30"
FLOATING_RANGE="10.1.199.28/30"

# ---------------------------------------------------------------
# OS image paramters
# ---------------------------------------------------------------
#OS_IMAGE_URL="https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img"
#OS_IMAGE_NAME="Cirros 0.3.0 x86_64"
OS_IMAGE_URL="http://10.1.199.5/image/precise-server-cloudimg-amd64-disk1.img"
OS_IMAGE_NAME="Ubuntu 12.04 x86_64"

 

如果你没有一个独立的硬盘或者分区,你需要用文件模拟 (如果你是在虚拟机里测试Openstack,可能你会遇到这个bug,需要处理完,再进行安装)

# dd if=/dev/zero of=/opt/cinder-volumes.img bs=1M seek=1000 count=0

加载一个设备

# losetup -f /opt/cinder-volumes.img

查看加载情况
# losetup -a
/dev/loop0: [0801]:35127298 (/opt/cinder-volumes.img)

上面的脚本需要调整

#CINDER_VOLUME='/dev/sda6'
CINDER_VOLUME='/dev/loop0'

deploy.sh 脚本,也需要注释掉一行 pvcreate 这行

#pvcreate ${CINDER_VOLUME}

执行脚本

./deploy.sh allinone nova-network

 

成功执行后,你会看到

+ nova-manage network create private --fixed_range_v4=10.0.0.0/24 --num_networks=1 --bridge=br100 --bridge_interface=eth0 --network_size=256 --dns1=8.8.8.8 --dns2=8.8.4.4 --multi_host=T
2013-01-25 10:33:57 DEBUG nova.utils [req-0da190f3-4ee6-4028-afa8-f72f8711bebe None None] backend <module 'nova.db.sqlalchemy.api' from '/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/api.pyc'> __get_backend /usr/lib/python2.7/dist-packages/nova/utils.py:502
+ nova-manage floating create --ip_range=10.1.199.28/30
2013-01-25 10:33:58 DEBUG nova.utils [req-dd7aadfc-edb4-48d5-abde-5a5618333a0b None None] backend <module 'nova.db.sqlalchemy.api' from '/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/api.pyc'> __get_backend /usr/lib/python2.7/dist-packages/nova/utils.py:502
+ echo 'Setup for all in one node has done.:D'
Setup for all in one node has done.:D
+ exit 0

 

如果你是在虚拟机里测试, 你需要把kvm改成qemu

# cat /etc/nova/nova-compute.conf 
[DEFAULT]
libvirt_type=qemu

重启nova相关服务就可以。

登陆Dashboard

http://ip/horizon  user:admin  pass:admin 登陆。

非常完美。目前好像就cinder volume有点问题,研究研究。

命令行

脚本考虑很周到,在根目录下,创建了两个文件openstackrc 和 openstackrc-demo

# source openstackrc
root@node06:~# nova list
+--------------------------------------+-------+--------+-------------------------------+
| ID                                   | Name  | Status | Networks                      |
+--------------------------------------+-------+--------+-------------------------------+
| 2c0e82a7-53ad-44ef-b997-f4dd83beadce | test1 | ACTIVE | private=10.0.0.2, 10.1.199.29 |
| fc0f8ded-8602-4fd8-8c5e-e0b3fa5983d1 | test2 | ACTIVE | private=10.0.0.4, 10.1.199.30 |
+--------------------------------------+-------+--------+-------------------------------+
root@node06:~#

 

创建虚拟机

nova keypair-add oskey > oskey.priv
chmod 600 oskey.priv
nova flavor-list
nova image-list
nova boot --flavor 2 --key_name oskey --image ea3ffba1-065e-483f-bfe2-c84184ee76be test1
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0

申请floating IP

root@node06:~# nova floating-ip-create
+-------------+-------------+----------+------+
| Ip          | Instance Id | Fixed Ip | Pool |
+-------------+-------------+----------+------+
| 10.1.199.29 | None        | None     | nova |
+-------------+-------------+----------+------+


root@node06:~# nova list
+--------------------------------------+-------+--------+------------------+
| ID                                   | Name  | Status | Networks         |
+--------------------------------------+-------+--------+------------------+
| 1ea06c57-f191-44e5-b2af-e9f2133dd30b | test1 | ACTIVE | private=10.0.0.2 |
+--------------------------------------+-------+--------+------------------+
root@node06:~# nova add-floating-ip 1ea06c57-f191-44e5-b2af-e9f2133dd30b 10.1.199.29
root@node06:~# nova list
+--------------------------------------+-------+--------+-------------------------------+
| ID                                   | Name  | Status | Networks                      |
+--------------------------------------+-------+--------+-------------------------------+
| 1ea06c57-f191-44e5-b2af-e9f2133dd30b | test1 | ACTIVE | private=10.0.0.2, 10.1.199.29 |
+--------------------------------------+-------+--------+-------------------------------+

ssh到虚拟机

root@node06:~# ssh -i oskey.priv ubuntu@10.1.199.29

附录

Nova.conf 文件

单网卡安装Openstack,其实需要调整的地方就两个,一个是nova.conf 文件

[DEFAULT]
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/run/lock/nova
verbose=True
api_paste_config=/etc/nova/api-paste.ini
scheduler_driver=nova.scheduler.simple.SimpleScheduler
s3_host=10.1.199.6
ec2_host=10.1.199.6
ec2_dmz_host=10.1.199.6
rabbit_host=10.1.199.6
metadata_host=127.0.0.1
metadata_listen=0.0.0.0
nova_url=http://10.1.199.6:8774/v1.1/
sql_connection=mysql://novaUser:novaPass@10.1.199.6/nova
ec2_url=http://10.1.199.6:8773/services/Cloud
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf

# Auth
use_deprecated_auth=false
auth_strategy=keystone
keystone_ec2_url=http://10.1.199.6:5000/v2.0/ec2tokens
# Imaging service
glance_api_servers=10.1.199.6:9292
image_service=nova.image.glance.GlanceImageService

# Vnc configuration
novnc_enabled=true
novncproxy_base_url=http://10.1.199.6:6080/vnc_auto.html
novncproxy_port=6080
vncserver_proxyclient_address=127.0.0.1
vncserver_listen=0.0.0.0

# nova-network
libvirt_use_virtio_for_bridges = True
network_manager=nova.network.manager.FlatDHCPManager
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
public_interface=br100
flat_interface=eth0
flat_network_bridge=br100
fixed_range=10.0.0.0/24
flat_network_dhcp_start=10.0.0.2
network_size=256
force_dhcp_release = True
flat_injected=false
use_ipv6=false
multi_host=True

# Compute #
compute_driver=libvirt.LibvirtDriver
# Cinder #
volume_api_class=nova.volume.cinder.API
osapi_volume_listen_port=5900

 

还有就是你创建网络的时候,需要指定一下

nova-manage network create private --fixed_range_v4=10.0.0.0/24 --num_networks=1 \
--bridge=br100 --bridge_interface=eth0 --network_size=256 \
--dns1=8.8.8.8 --dns2=8.8.4.4 --multi_host=T

ifconfig显示.我是创建了两个虚拟机,并且都给他们分配的floating IP.

# ifconfig
br100     Link encap:Ethernet  HWaddr 00:e0:81:d8:43:be  
          inet addr:10.0.0.3  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::44d:5cff:fe46:b1d4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4624 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1158 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:765004 (765.0 KB)  TX bytes:278234 (278.2 KB)

eth0      Link encap:Ethernet  HWaddr 00:e0:81:d8:43:be  
          inet6 addr: fe80::2e0:81ff:fed8:43be/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:267596 errors:0 dropped:33 overruns:0 frame:0
          TX packets:22863 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:379375929 (379.3 MB)  TX bytes:2418551 (2.4 MB)
          Memory:fbe20000-fbe40000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:94992 errors:0 dropped:0 overruns:0 frame:0
          TX packets:94992 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:489561672 (489.5 MB)  TX bytes:489561672 (489.5 MB)

vnet0     Link encap:Ethernet  HWaddr fe:16:3e:34:60:de  
          inet6 addr: fe80::fc16:3eff:fe34:60de/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:246 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3526 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:24557 (24.5 KB)  TX bytes:511479 (511.4 KB)

vnet1     Link encap:Ethernet  HWaddr fe:16:3e:60:93:aa  
          inet6 addr: fe80::fc16:3eff:fe60:93aa/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:199 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2088 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:19763 (19.7 KB)  TX bytes:283739 (283.7 KB)

 

用ifconfig,其实查看的信息比较有限. 下面的信息很多. 注意到169.254.169.254 的IP。

这是由于Amazon的原因,最早metadata是亚马逊提出来的,参见:aws文档。后来很多人给亚马逊定制了一些操作系统的镜像,比如 ubuntu, fedora, centos 等等,而且将里面获取 metadta 的api地址也写死了。所以opentack为了兼容,保留了这个地址 169.254.169.254。然后通过iptables nat映射到真实的api上

# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet 169.254.169.254/32 scope link lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br100 state UP qlen 1000
    link/ether 00:e0:81:d8:43:be brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2e0:81ff:fed8:43be/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:e0:81:d8:43:bf brd ff:ff:ff:ff:ff:ff
7: br100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 00:e0:81:d8:43:be brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.3/24 brd 10.0.0.255 scope global br100
    inet 10.1.199.6/24 brd 10.1.199.255 scope global br100
    inet 10.1.199.29/32 scope global br100
    inet 10.1.199.30/32 scope global br100
    inet6 fe80::44d:5cff:fe46:b1d4/64 scope link 
       valid_lft forever preferred_lft forever
8: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br100 
state UNKNOWN qlen 500
    link/ether fe:16:3e:34:60:de brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:fe34:60de/64 scope link 
       valid_lft forever preferred_lft forever
9: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br100 
state UNKNOWN qlen 500
    link/ether fe:16:3e:60:93:aa brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:fe60:93aa/64 scope link 
       valid_lft forever preferred_lft forever

 

  34 Responses to “Ubuntu12.04 OpenStack Folsom 安装(Nova Network 单网卡)”

  1. 陈老师您好,关注您的blog挺长时间了,您关于openstack的东西帮了我好多忙。
    对于这个jedipunkz的脚本,我有点儿疑问。在controller node和compute node 分开安装的情况下,我看这个脚本在controller node上,关于nova的包装了nova-api nova-cert nova-common novnc nova-compute-kvm nova-consoleauth nova-scheduler nova-novncproxy rabbitmq-server vlan bridge-utils nova-network nova-console websockify novnc,但是在compute node上只装了nova-compute nova-network nova-api-metadata。这儿是不是不太对呀,至少compute node上得有nova-compute-kvm吧,然后controller node上不用装nova-compute-kvm吧。
    谢谢!

    • 依赖会装上的。你试一下就知道了。

      • 我试了allinone,然后确实是能装上的。然后看代码separate node里面的controller跟allinone基本一样。我决定自己改改然后试试~谢谢陈老师了~

  2. cinder的问题解决了吗,我同样装,一直是creating ,

    • 我刚开始也是这样,你重启机器,在命令行下把volume删掉,好像就可以,还没找到原因。

      • 请陈老师确认一下!
        我不知道是不是这个原因 我在/etc/sudoers.d/下新建了一个cinder 文件
        root@r512-2:/etc/sudoers.d# cat cinder
        Defaults:cinder !requiretty

        cinder ALL = (root) NOPASSWD: /usr/bin/cinder-rootwrap /etc/cinder/rootwrap.conf *
        现在已经可以用 cinder 了

        • 今天重装了一次,证明这样是可行的!请教陈老师有没办法用外部的DHCP?

    • 你可以用cinder help,查看帮助。

  3. CONTROLLER_NODE_IP=’172.16.1.11′
    COMPUTE_NODE_IP=’172.16.1.13′
    请问陈老师这个deploy_with_nova-network.conf里以上两个配置需要更改吗?改成本机ip?我是单节点allinone的安装

    • 有注释说明,如果你是all in one,就不需要修改,完全照我文档做就可以。

      • 陈老师,我照做了,建立虚拟机完后状态显示error,我查了nova-computer.log里面也没有error的log只有debug,请问哪里可以去排查错误
        还有第一次装的时候OS_IMAGE_URL=”http://10.1.199.5/image/precise-server-cloudimg-amd64-disk1.img”这个忘记改了,导致重装了系统。。。希望陈老师能把这个改成公网地址

  4. 陈老师,你好。我最近也在搭建openstack,是单网卡的,在设置/etc/network/interfaces时,网卡的ip必须是固定的吗?因为我是在学校实验室搭建的,学校的网络不容许ip设置为静态,只能动态获取。那能不能设置为网卡ip为动态,而设置网桥的ip固定?
    而我在网卡ip动态,网桥静态情况下搭建的openstack,启动实例时虽然状态是active,但是从控制节点却ping不通,后来查看原来实例获取ip时,不是从控制节点上获取,而是想学校的dns申请ip,这个是前面网卡设置的原因吗?

    • 我没测试过。我的理解,固定IP,不是必须的。我在Openstack下测试过Openstack。

      • 谢谢,在nova配置文件中的public_interface=br100,但是很多其他的文档说是单网卡public_interface=eth0,请问这个怎么解释呢?

  5. 陈老师好,已经通过脚本成功搭建,现在想问下您cinder olume问题是否已经得到了解决方案呢?除了命令行删除以外,另外如果想要实现多节点的话,计算节点的部署是否应该修改脚本相应的部分?

    • 这个脚本,支持多节点的部署。cinder的问题,还是没解决。不过这个可以接受。cinder目前其实不实用。

  6. 陈老师好,我是双节点,有2个 问题请教,cinder 建立和删除volume 都不成功,
    要更换VM的网段要如和操作。谢谢!

  7. 陈老师 ,按着脚本已经顺利创建了,提醒一下如果物理机ub12.10执行脚本时候会出现fatal module那个错误,采用ub12.04-2就没事了,可能如您所说的需要降核吧,但是我遇到了问题,您创建的VM可以访问外网么?我尝试了很多次实例无法访问外网也无法彼此互ping,fixed ip可以获取到,floating ip也可以成功,但是就是无法访问。我看了下nova.conf文件里的public interface设置 脚本是br100,您最早那篇essex版本的教程里,设置的都是eth0,这也比较符合实际情况,我于是尝试修改为eth0 可还是不行,所以特此向您验证下您那边是否一切都可行,您的实例是什么版本

    • 这两天我验证一下,不过我是确认一切正常,我当时测试的时候一切正常。

      • 陈老师,我自己也验证了一下,现在都是ok的,vm可以互ping以及访问外网,这次使用的是ub12.04-1部署的,之前是12.04-2,不成功,在12.10物理机上执行同样的脚本就会出现我之前跟您反馈的fatal错误,不知道您验证了么??不过好在现在已然ok,多节点的话继续照做即可是么?有没有什么需要注意的地方···
        ps:我的体重现在达到了82kg,你要加油呀^^

        • 我有一个内网的12.04的源,所以基本测试都在12.04下跑。多节点没啥问题,找脚本提示去做就可以,我验证过。

        • 我的情况和你的很像,我也是在ubuntu12.04-2上装的,根本ping不通实例,请问换为12.04-1就可以了吗?你是否更改了别的配置呢?

  8. 陈老师你好,我按照你的文档安装了2个节点(controller+compute),貌似一切正常,instance也能起来,可以从dashboard里面的vnc访问。只是从别的机器上(包括controller和compute机器)总是 ping 不通起来的虚拟机,更别提 ssh 了。这是我的设置里跟网络相关的部分,你帮忙看看是不是有问题:

    HOST_IP=’192.168.0.10′
    CONTROLLER_NODE_IP=’192.168.0.10′
    COMPUTE_NODE_IP=’192.168.0.11′

    FIXED_RANGE=”192.168.0.0/24″
    FIXED_START_ADDR=”192.168.0.15″
    FLOATING_RANGE=”192.168.1.0/30″
    NETWORK_SIZE=”256″

    • 这是常见问题,这是安全组设置,你看一下我blogEssex安装,里面有提到安全组的设置。

  9. I installed the openstack as the article said ,but after successful installation (no errors and instances active),the server disconnected when OS booted in NVC ,why ?

  10. 地址 auto eth0
    iface eth0 inet static
    address 10.1.199.6
    netmask 255.255.255.0
    network 10.1.199.0
    gateway 10.1.199.1
    dns-nameservers 8.8.8.8 这是你的IP,我的ip跟你的不同,是不是需要改变很多的东西,在下面FLOATING_RANGE=”10.1.199.28/30″

    配置的时候应该怎么改?

  11. 脚本执行到 apt-key adv –recv-keys –keyserver keyserver.ubuntu.com 5EDB1B62EC4926EA这一步时报
    gpg: 下载密钥‘EC4926EA’,从 hkp 服务器 keyserver.ubuntu.com
    gpg: 公钥服务器超时
    gpg: 从公钥服务器接收失败:公钥服务器错误
    这是什么意思啊

 Leave a Reply

(required)

(required)