Nov 012012
 

Openstack Folsom 安装比较复杂,尤其是Quantum部分,新的内容很多。Quantum的租户网络有两种模式:GRE和VLAN模式,这两种方式配置有很大的区别,一个明显的区别就是控制节点,Vlan模式2块网卡,GRE模式需要3块网卡。

英文原文

我基本会参考原文做翻译,下面的和原文差异的地方

  1. 我的网络会会原文不同, 文档我会在真实的环境下验证,由于每个人的网络基本都是不一样,所以文档和IP相关的地方,我基本采用变量,比较灵活的方式,大家可以用sed命令实现修改。很多朋友安装不成功,基本都是因为更换IP,导致有地方没修改,所以提供sed的命令修改。
  2. 对原文提供的两个keystone导入数据的脚本做了细微的修改,主要是采用变量,让他更加灵活。
  3. mysql直接采用IP访问,而不是localhost
  4. keystone的token采用随机生成,而不是password

 

文档修改记录

  • 2012年11月1日:copy以前的folsom的文档,专门针对vlan模式进行修改
  • 2012年11月2日:基本把文档整理完,包括租户网络创建,vnc也已经可以工作。目前存在的问题是:metadata无法工作,密钥无法住人到虚拟机里,还有就是虚拟机网络还不能访问。

 

介绍

  控制节点(2块网卡) 计算节点(2块网卡)
管理网络(eth0) 10.1.199.58/24 10.1.199.6/24
  10.1.199.68/24  
hostname controller compute1
服务 MySQL
RabbitMQ
Nova
Glance
Keystone
Quantum
kvm
quantum client
nova-compute
     

 

要求

  1. 控制节点和计算节点需要2块网卡,计算节点需要支持虚拟化
  2. 全部的命令都是在root下运行

网络拓扑图

 

控制节点

操作系统

安装ubuntu 12.04.1 Server版本,最小化安装,只需要安装SSH server就可以。Cinder 需要一个单独的分区或者硬盘。

目前Folsom进入ubuntu 12.04的官方的源,不过需要你手工添加。源的官方说明

cat <<EOF >>/etc/apt/sources.list
deb  http://ubuntu-cloud.archive.canonical.com/ubuntu precise-proposed/folsom main
deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/folsom main
EOF

运行下面命令

apt-get install ubuntu-cloud-keyring
apt-get update && apt-get -y dist-upgrade

 

Hostname设置(可选)

 

# cat /etc/hostname 
controller

# cat /etc/hosts
127.0.0.1       localhost
10.1.199.58      controller.chenshake.com        controller
10.1.199.6      compute1.chenshake.com  compute1

# hostname
controller

# hostname -f
controller.chenshake.com

 

网络

直接设置 /etc/network/interface

# 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.58
hwaddress ether 00:25:90:2d:7a:42  
netmask 255.255.255.0
network 10.1.199.0
gateway 10.1.199.1
dns-search chenshake.com
dns-nameservers 8.8.8.8

auto eth1
iface eth1 inet static
address 10.1.199.68
netmask 255.255.255.0

重启服务

/etc/init.d/networking restart

设置IP转发

sed -i -r 's/^\s*#(net\.ipv4\.ip_forward=1.*)/\1/' /etc/sysctl.conf
echo 1 > /proc/sys/net/ipv4/ip_forward

检查修改结果

# sysctl -p
net.ipv4.ip_forward = 1

NTP服务器

编辑 /etc/ntp.conf ,在 server ntp.ubuntu.com 下添加两行

server ntp.ubuntu.com
server 127.127.1.0
fudge 127.127.1.0 stratum 10

或者直接运行下面命令

sed -i 's/server ntp.ubuntu.com/server ntp.ubuntu.com\nserver 127.127.1.0\nfudge 127.127.1.0 stratum 10/g' /etc/ntp.conf

重启NTP服务

service ntp restart

环境变量

cat >/root/novarc <<EOF
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=password
export MYSQL_PASS=password
export SERVICE_PASSWORD=password
export RABBIT_PASSWORD=password
export FIXED_RANGE=10.0.0.0/24
export FLOATING_RANGE=$(/sbin/ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d ":" | awk -F "." '{print $1"."$2"."$3}').224/27
export OS_AUTH_URL="http://localhost:5000/v2.0/"
export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
export SERVICE_TOKEN=$(openssl rand -hex 10)
export MASTER="$(/sbin/ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d ":")"
export LOCAL_IP="$(/sbin/ifconfig eth1 | awk '/inet addr/ {print $2}' | cut -f2 -d ":")"
EOF

你可以根据你的需要调整用户的密码。

source novarc
echo "source novarc">>.bashrc

Mysql

下面是我们需要用到的数据库

数据库 用户 密码
mysql root password
nova nova password
keystone keystone password
glance glance password
cinder cinder password
quantum quantum password
     

 

安装

设置自动安装,无需输入密码

cat <<MYSQL_PRESEED | debconf-set-selections
mysql-server-5.5 mysql-server/root_password password $MYSQL_PASS
mysql-server-5.5 mysql-server/root_password_again password $MYSQL_PASS
mysql-server-5.5 mysql-server/start_on_boot boolean true
MYSQL_PRESEED

安装mysql

apt-get -y install mysql-server python-mysqldb

设置

运行远程访问mysql

sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf

重启服务

service mysql restart

创建数据库

mysql -uroot -p$MYSQL_PASS <<EOF
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$MYSQL_PASS';
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '$MYSQL_PASS';
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'IDENTIFIED BY '$MYSQL_PASS';
CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%'IDENTIFIED BY '$MYSQL_PASS';
CREATE DATABASE quantum;
GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'%'IDENTIFIED BY '$MYSQL_PASS';
FLUSH PRIVILEGES;
EOF

RabbitMQ

安装

apt-get -y install rabbitmq-server

设置

修改默认密码

我们把默认密码 guest,改成password

rabbitmqctl change_password guest $RABBIT_PASSWORD

Keystone

安装

apt-get -y install keystone python-keystone python-keystoneclient

配置

编辑 /etc/keystone/keystone.conf

[DEFAULT]
admin_token = d111cf2d97251a9e0422
bind_host = 0.0.0.0
public_port = 5000
admin_port = 35357
compute_port = 8774
verbose = True
debug = True
log_file = keystone.log
log_dir = /var/log/keystone
log_config = /etc/keystone/logging.conf
[sql]
connection = mysql://keystone:password@10.1.199.58:3306/keystone
idle_timeout = 200

或者直接运行下面脚本

sed -i -e " s/# admin_token = ADMIN/admin_token = $SERVICE_TOKEN/g; s/# bind_host = 0.0.0.0/bind_host = 0.0.0.0/g; s/# public_port = 5000/public_port = 5000/g; s/# admin_port = 35357/admin_port = 35357/g; s/# compute_port = 8774/compute_port = 8774/g; s/# verbose = True/verbose = True/g; s/# idle_timeout/idle_timeout/g" /etc/keystone/keystone.conf

使用mysql数据库

sed -i '/connection = .*/{s|sqlite:///.*|mysql://'"keystone"':'"$MYSQL_PASS"'@'"$MASTER"'/keystone|g}' /etc/keystone/keystone.conf

重启服务和初始化数据库

service keystone restart
keystone-manage db_sync

导入keystone数据

keystone-data.sh

wget http://www.chenshake.com/wp-content/uploads/2012/09/keystone-data.sh_.txt
mv keystone-data.sh_.txt keystone-data.sh
bash keystone-data.sh

导入endpoint

keystone-endpoints.sh

wget http://www.chenshake.com/wp-content/uploads/2012/09/keystone-endpoints.sh_.txt
mv keystone-endpoints.sh_.txt keystone-endpoints.sh
bash keystone-endpoints.sh

 

Glance

安装

apt-get -y install glance glance-api python-glanceclient glance-common

配置

编辑/etc/glance/glance-api.conf 和 /etc/glance/glance-registry.conf ,两个文件,都是修改4个地方

sql_connection = mysql://glance:password@10.1.199.58/glance
admin_tenant_name = service
admin_user = glance
admin_password = password

或者直接运行下面脚本实现

sed -i -e " s/%SERVICE_TENANT_NAME%/service/g; s/%SERVICE_USER%/glance/g; s/%SERVICE_PASSWORD%/$SERVICE_PASSWORD/g; " /etc/glance/glance-api.conf /etc/glance/glance-registry.conf
sed -i '/sql_connection = .*/{s|sqlite:///.*|mysql://'"glance"':'"$MYSQL_PASS"'@'"$MASTER"'/glance|g}' /etc/glance/glance-registry.conf /etc/glance/glance-api.conf

编辑 /etc/glance/glance-api.conf

#notifier_strategy = noop
notifier_strategy = rabbit

#rabbit_password = guest
rabbit_password = password

运行下面命令进行修改

sed -i " s/notifier_strategy = noop/notifier_strategy = rabbit/g;s/rabbit_password = guest/rabbit_password = $RABBIT_PASSWORD/g;" /etc/glance/glance-api.conf

运行下面命令

cat <<EOF >>/etc/glance/glance-api.conf
flavor = keystone+cachemanagement
EOF
cat <<EOF >>/etc/glance/glance-registry.conf 
flavor = keystone
EOF

重启服务

service glance-api restart && service glance-registry restart

同步数据库

glance-manage db_sync

下载Image

我们下载CirrOS的image作为测试使用,只有10M。如果是ubuntu官方的image,220M,并且ubuntu官方的image,都是需要使用密钥登陆。

CirrOS

下载image

wget https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img

上传image

glance image-create --name=cirros-0.3.0-x86_64 --public  --container-format=bare \
--disk-format=qcow2 < /root/cirros-0.3.0-x86_64-disk.img

Cirros,是可以使用用户名和密码登陆,也可以使用密钥登陆

user:cirros
password:cubswin:)

 

Ubuntu官方image

下载image

wget http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-disk1.img

上传image

glance image-create --name="Ubuntu 12.04 cloudimg amd64" --public \
--container-format=ovf --disk-format=qcow2 < /root/precise-server-cloudimg-amd64-disk1.img

user:ubuntu

只能使用密钥登陆。

测试

查看image

glance image-list

查看image详细信息

glance image-show 12e2b864-9601-4506-b19d-3f663c0b2e15

Nova

安装

apt-get -y install nova-api nova-cert nova-common \
nova-scheduler python-nova python-novaclient nova-consoleauth novnc nova-novncproxy

配置

编辑 /etc/nova/api-paste.ini

[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
auth_host = 10.1.199.58
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = password
signing_dirname = /tmp/keystone-signing-nova

或者直接运行命令

sed -i -e "s/127.0.0.1/$MASTER/g; s/%SERVICE_TENANT_NAME%/service/g;  s/%SERVICE_USER%/nova/g; s/%SERVICE_PASSWORD%/$SERVICE_PASSWORD/g; " /etc/nova/api-paste.ini

创建 /etc/nova/nova.conf 文件,直接copy下面的命令,运行就可以。

cat >/etc/nova/nova.conf <<EOF
[DEFAULT]
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/run/lock/nova
verbose=False
api_paste_config=/etc/nova/api-paste.ini
scheduler_driver=nova.scheduler.simple.SimpleScheduler
s3_host=$MASTER
ec2_host=$MASTER
ec2_dmz_host=$MASTER
rabbit_host=$MASTER
rabbit_password=$RABBIT_PASSWORD
cc_host=$MASTER
nova_url=http://$MASTER:8774/v1.1/
sql_connection=mysql://nova:$MYSQL_PASS@$MASTER/nova
ec2_url=http://$MASTER:8773/services/Cloud
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf

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

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

# Network settings
network_api_class=nova.network.quantumv2.api.API
quantum_url=http://$MASTER:9696
quantum_auth_strategy=keystone
quantum_admin_tenant_name=service
quantum_admin_username=quantum
quantum_admin_password=$SERVICE_PASSWORD
quantum_admin_auth_url=http://$MASTER:35357/v2.0
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver

# Compute #
compute_driver=libvirt.LibvirtDriver

# Cinder #
volume_api_class=nova.volume.cinder.API
osapi_volume_listen_port=5900
EOF

同步数据库

nova-manage db sync

重启服务

service nova-api restart
service nova-cert restart
service nova-consoleauth restart
service nova-scheduler restart
service nova-novncproxy restart

或者

cd /etc/init.d/; for i in $( ls nova-* ); do sudo service $i restart; done

检查服务

nova-manage service list

nova

Open-vSwitch

安装

apt-get install -y openvswitch-switch

配置

设置网络

ovs-vsctl add-br br-ex
ovs-vsctl add-port br-ex eth1

大家可以通过下面命令来查看你创建的效果, 具体的用途,正在学习中.

ovs-vsct -h
ovs-vsctl list-br
ovs-vsctl show

 

Quantum

安装

apt-get -y install quantum-server python-cliff \
quantum-plugin-openvswitch-agent \
quantum-l3-agent quantum-dhcp-agent python-pyparsing

配置

编辑 /etc/quantum/quantum.conf

auth_strategy = keystone
fake_rabbit = False
rabbit_host = 10.1.199.58
rabbit_password = password

或者运行下面命令

sed -i -e " s/# auth_strategy/auth_strategy/g; s/# fake_rabbit/fake_rabbit/g; s/# rabbit_host = localhost/rabbit_host = $MASTER/g; s/# rabbit_password = guest/rabbit_password = $RABBIT_PASSWORD/g" /etc/quantum/quantum.conf

编辑 /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini

#Under the database section
[DATABASE]
sql_connection = mysql://quantum:password@10.1.199.58/quantum

#Under the OVS section
[OVS]
tenant_network_type=vlan
network_vlan_ranges = physnet1:1:4094

或者运行下面命令

sed -i -e " s/# Example: tenant_network_type = gre/tenant_network_type = vlan/g; s/# Example: network_vlan_ranges = physnet1:1000:2999/network_vlan_ranges = physnet1:1:4094/g" /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini 
sed -i '/sql_connection = .*/{s|sqlite:///.*|mysql://'"quantum"':'"password"'@'"$MASTER"'/quantum|g}' /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini

编辑 /etc/quantum/l3_agent.ini 和 /etc/quantum/api-paste.ini

[DEFAULT]
admin_tenant_name = service
admin_user = quantum
admin_password = password

或者运行下面命令

sed -i -e " s/%SERVICE_TENANT_NAME%/service/g; s/%SERVICE_USER%/quantum/g; s/%SERVICE_PASSWORD%/$SERVICE_PASSWORD/g; " /etc/quantum/l3_agent.ini  /etc/quantum/api-paste.ini

重启服务

service quantum-server restart
service quantum-plugin-openvswitch-agent restart
service quantum-dhcp-agent restart
service quantum-l3-agent restart

 

Cinder

安装

apt-get install -y cinder-api cinder-scheduler cinder-volume iscsitarget \
open-iscsi iscsitarget-dkms python-cinderclient

配置

分区

我的硬盘专门一个分区给volume使用

umount /dev/sda5
pvcreate /dev/sda5
vgcreate cinder-volumes /dev/sda5

去掉开机挂载

sed -i '/nova-volume/s/^/#/' /etc/fstab

iscsi

sed -i 's/false/true/g' /etc/default/iscsitarget
service iscsitarget restart
service open-iscsi restart

编辑 /etc/cinder/cinder.conf ,直接运行下面命令就可以.

cat >/etc/cinder/cinder.conf <<EOF
[DEFAULT]
rootwrap_config = /etc/cinder/rootwrap.conf
sql_connection = mysql://cinder:$MYSQL_PASS@$MASTER:3306/cinder
api_paste_confg = /etc/cinder/api-paste.ini
iscsi_helper = ietadm 
volume_group = cinder-volumes
volume_name_template = volume-%s
rabbit_password = $RABBIT_PASSWORD
logdir = /var/log/cinder
verbose = False
auth_strategy = keystone
EOF

编辑 /etc/cinder/api-paste.ini

admin_tenant_name = service
admin_user = cinder 
admin_password = password

或者用下面命令

sed -i -e " s/%SERVICE_TENANT_NAME%/service/g; s/%SERVICE_USER%/cinder/g; s/%SERVICE_PASSWORD%/$SERVICE_PASSWORD/g; " /etc/cinder/api-paste.ini

同步数据库

cinder-manage db sync

重启服务

service cinder-api restart
service cinder-scheduler  restart
service cinder-volume restart

 

Horizon

安装

apt-get -y install apache2 libapache2-mod-wsgi openstack-dashboard memcached python-memcache

配置

编辑 /etc/openstack-dashboard/local_settings.py,删除ubuntu主题,默认的主题有问题,注释掉下面内容

#Comment these lines
#Enable the Ubuntu theme if it is present.
#try:
#    from ubuntu_theme import *
#except ImportError:
#    pass

重启服务

service apache2 restart; service memcached restart

访问

http://10.1.199.58/horizon
user:admin
pass:password
或者
user:demo
pass:password

看一下中文的Dashboard,由于在控制节点没有安装计算服务,所以你是无法创建虚拟机。

 

计算节点

操作系统

操作系统最小化安装,ssh server就可以。

添加Folsom源

cat <<EOF >>/etc/apt/sources.list
deb  http://ubuntu-cloud.archive.canonical.com/ubuntu precise-proposed/folsom main
deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/folsom main
EOF

运行下面命令

apt-get install ubuntu-cloud-keyring
apt-get update && apt-get -y dist-upgrade

网络

# 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
hwaddress ether 00:25:90:2d:7a:42  
netmask 255.255.255.0
network 10.1.199.0
gateway 10.1.199.1
dns-search chenshake.com
dns-nameservers 8.8.8.8

# VMs Networks with OVS in tunnel mode
auto eth1
    iface eth1 inet static
    address 10.0.0.4
    netmask 255.255.255.0

重启网络

/etc/init.d/networking restart

IP转发

sed -i -r 's/^\s*#(net\.ipv4\.ip_forward=1.*)/\1/' /etc/sysctl.conf
echo 1 > /proc/sys/net/ipv4/ip_forward 

环境变量

cat >/root/novarc <<EOF
export CONTROLLER_IP=10.1.199.58
export MASTER="$(/sbin/ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d ":")"
export LOCAL_IP="$(/sbin/ifconfig eth1 | awk '/inet addr/ {print $2}' | cut -f2 -d ":")"
EOF

你根据你的情况,调整控制节点的IP

source novarc
echo "source novarc">>.bashrc

NTP

apt-get -y install ntp

设置

编辑 /etc/ntp.conf, 指向控制节点

server 10.1.199.58

或者运行命令

sed -i -e " s/server ntp.ubuntu.com/server $CONTROLLER_IP/g" /etc/ntp.conf

重启服务

service ntp restart

Hypervisor

apt-get install -y kvm libvirt-bin pm-utils

编辑 /etc/libvirt/qemu.conf ,添加下面内容

cgroup_device_acl = [
    "/dev/null", "/dev/full", "/dev/zero",
    "/dev/random", "/dev/urandom",
    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
    "/dev/rtc", "/dev/hpet","/dev/net/tun",
]

或者运行命令:这个地方用命令修改有点复杂,还没找到太好的办法。

cat <<EOF>>/etc/libvirt/qemu.conf
cgroup_device_acl = [
    "/dev/null", "/dev/full", "/dev/zero",
    "/dev/random", "/dev/urandom",
    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
    "/dev/rtc", "/dev/hpet","/dev/net/tun",
]
EOF

删除默认 virtual bridge

virsh net-destroy default
virsh net-undefine default

允许迁移

编辑 /etc/libvirt/libvirtd.conf, 去掉这三行的注释

listen_tls = 0
listen_tcp = 1
auth_tcp = "none" 

或者运行下面命令

sed -i '/#listen_tls/s/#listen_tls/listen_tls/; /#listen_tcp/s/#listen_tcp/listen_tcp/; /#auth_tcp/s/#auth_tcp/auth_tcp/; /auth_tcp/s/sasl/none/'  /etc/libvirt/libvirtd.conf

编辑 /etc/init/libvirt-bin.conf

env libvirtd_opts="-d -l" 

或者使用命令

sed -i '/env libvirtd_opts/s/-d/-d –l/' /etc/init/libvirt-bin.conf

编辑 /etc/default/libvirt-bin

libvirtd_opts="-d -l"

或者使用命令

sed -i '/libvirtd_opts/s/-d/-d -l/' /etc/default/libvirt-bin

重启服务

service libvirt-bin restart

Open-vSwitch

apt-get install -y openvswitch-switch

创建bridge

ovs-vsctl add-br br-int
ovs-vsctl add-br br-eth1
ovs-vsctl add-port br-eth1 eth1

Quantum

apt-get -y install quantum-plugin-openvswitch-agent

编辑 /etc/quantum/quantum.conf , 修改和控制节点一样,直接从控制直接复制过来

scp root@$CONTROLLER_IP:/etc/quantum/quantum.conf /etc/quantum/quantum.conf

编辑 /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini,可以从控制节点copy过来

scp root@$CONTROLLER_IP:/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini

启动agent

service quantum-plugin-openvswitch-agent restart

Nova

apt-get -y install nova-api-metadata nova-compute-kvm novnc nova-novncproxy

编辑 /etc/nova/api-paste.ini

[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
auth_host = 10.1.199.58
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = password
signing_dirname = /tmp/keystone-signing-nova

或者运行下面命令,直接从控制节点复制过来就可以。

scp root@$CONTROLLER_IP:/etc/nova/api-paste.ini /etc/nova/

编辑 /etc/nova/nova-compute.conf

[DEFAULT]
libvirt_type=kvm
libvirt_ovs_bridge=br-int
libvirt_vif_type=ethernet
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
libvirt_use_virtio_for_bridges=True

或者运行下面命令

cat > /etc/nova/nova-compute.conf <<EOF
[DEFAULT]
libvirt_type=kvm
libvirt_ovs_bridge=br-int
libvirt_vif_type=ethernet
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
libvirt_use_virtio_for_bridges=True
EOF

编辑 /etc/nova/nova.conf。我们可以从控制节点copy过来修改

scp root@$CONTROLLER_IP:/etc/nova/nova.conf /etc/nova/nova.conf

修改vnc

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

或者使用下面命令修改

sed -i 's/^vncserver_proxyclient_address.*$/vncserver_proxyclient_address='"$(/sbin/ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d ":")"'/g' /etc/nova/nova.conf
sed -i 's/^vncserver_listen.*$/vncserver_listen='"$(/sbin/ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d ":")"'/g' /etc/nova/nova.conf

重启服务

service nova-api-metadata restart
service nova-novncproxy restart 
service nova-compute restart

或者

cd /etc/init.d/; for i in $( ls nova-* ); do sudo service $i restart; done

查看服务

nova-manage service list

 

租户网络

这是一个大工程,目前还没办法用脚本来实现,也就只能step by step。不过这个过程,倒是可以帮助你深入了解一下quantum。下面的步骤,大家需要小心就可以。我验证过一次。

查看member roles ID

keystone role-list

查看service 租户的ID

keystone tenant-list

创建一个租户

keystone tenant-create --name project_one

创建一个用户:user_one,roles是成员角色

keystone user-create --name=user_one --pass=user_one --tenant-id $put_id_of_project_one --email=user_one@domain.com
keystone user-role-add --tenant-id $put_id_of_project_one  --user-id $put_id_of_user_one --role-id $put_id_of_member_role

为该租户创建一个网络

quantum net-create --tenant-id $put_id_of_project_one net_proj_one --provider:network_type vlan --provider:physical_network physnet1 --provider:segmentation_id 1024

为租户创建一个子网

quantum subnet-create --tenant-id $put_id_of_project_one net_proj_one 10.10.10.0/24

为租户创建一个路由

quantum router-create --tenant_id $put_id_of_project_one router_proj_one

路由和网络进行关联

quantum router-interface-add $put_router_proj_one_id_here $put_subnet_id_here

创建外部网络(service 租户的ID,通过 keystone tenant-list 查看)

quantum net-create --tenant-id $put_id_of_service_tenant ext_net --router:external=True

编辑/etc/quantum/l3_agent.ini

gateway_external_net_id = $id_of_ext_net
router_id = $your_router_id

设置floating IP

quantum subnet-create --tenant-id $put_id_of_service_tenant --gateway 10.1.199.1 ext_net 10.1.199.224/27 --enable_dhcp=False

设置外部网络路由

quantum router-gateway-set $put_router_proj_one_id_here $put_id_of_ext_net_proj_one_here

更新br-ex

ip addr flush dev br-ex
ip addr add 10.1.199.224/27 dev br-ex
ip link set br-ex up

  69 Responses to “Ubuntu12.04 OpenStack Folsom 安装(VLAN模式)”

  1. 陈老师好:
    请教您,我想在RHEL或CentOS下实验多节点Folsom版本的安装,请问您有什么推荐的参考文档么,中文我一直没有找到合适的。

  2. 陈老师你好,请问您知道怎么使用java代码来控制instance创建 什么的吗?

    • 有专门的java的sdk。你看我blog里的openstack资料的文档里有提到。
      java sdk

      很多朋友经常问,能不能用java来做dashboard开发。我相信如果直接用java来做,肯定是很累的事情。有朋友提供java sdk,并且还搞了一个dashboard,大家可以参考学习学习。

      web http://woorea.github.com/openstack-ui/

      • 谢谢老师的及时回复,但是我发现你上面提供的那个网页里的资源没有提供可以包啊,我网上也找不到,不知道陈老师有没那写类的包,能不能提供给我? 谢谢。

        • java的东西我不懂,不过你好好看看他github里的东西,里面应该有完整的安装文档。

          • 那请问老师,您有尝试过用其他编程语言去访问自己安装的openstack吗?比如说访问过去之后用代码new instance这样。。

  3. 陈老师,您好!我按照您的方式安装了CC节点,可是dashboard登录不进去,页面不跳转,但是用户名密码应该是验证通过了。当输入用户名密码不匹配时,会有错误信息。不知道为什么。。。求帮助

    • 我改天测试测试,这个问题倒是好办,现在是网络还有问题。

      • 是什么问题呢,可以告知一下吗,NC节点装服务特别慢

      • 老陈同志,你的网络问题解决了吗?我的虚拟机不能自动获得IP地址,自己手动指定IP,虚拟机还是不能上网,网络不同,不知道是那里的问题,我的配置过程参考了你的,可能还是quantum配置的vlan的问题??

        • 我看见 一篇文章 如何建立quantum下多节点物理点VLAN虚机IP获取成功,地址是http://jxwpx.blog.51cto.com/15242/887177,他这个方法可以解决咱们的问题吗?

  4. 陈老师,请教一个问题。
    我最近刚开始接触OpenStack,研究得很少,不知道问得对不对。
    我发现OpenStack没有提供一个对运行中的实例动态扩充资源的命令,但是提供了API所以只能通过编程自己实现,是这样么?还是有这样的命令但是我没有发现?
    我觉得很可惜因为这是一个很好的证明云计算概念的场景,比如我一个网站运行在云端,但是只有1个cpu和1G内存,现在由于某种需要,我需要扩充到2个cpu和2G内存,目前基于OpenStack自身无法快速实现。
    对这个您有什么建议?谢谢!
    我说的是Essex版本。

    • 可以这样说,亚马逊的aws,国外的任何一家运营商,都不会提供对运行的实例进行资源扩充。通过调整配置,不是一个解决问题的办法。因为你资源扩充是不能超过一台物理服务器本身。彻底解决,还是通过横向的扩展。如果单纯技术来说,实现这个功能并不难。但是真正运营,这种功能会带来很大麻烦。

  5. 想不到这么快就有了回复。。。横向的扩展是什么意思呢?
    对于我所说的场景,客户需要动态扩充所需资源,应该怎么满足这种需求?

    • 横向就是用多个vm来做负载均衡,不过这个改动比较大。对于openstack,有resize的功能,可以更改配置,不过是需要你重新启动的。
      客户的需求,不见得是真实的需求。自己冷静想想。在物理服务器上,你的配置不够的话,怎么办,是热插拔加内存,你试过吗。客户肯定会说,我有这样的需求。

      • 这个横向扩展我能理解,物理服务器我也能理解,肯定不能热插拔。
        但是我在想,云计算,跟传统的方式有什么根本性区别呢?NIST对云计算的定义,有一个特性是Rapid elasticity,快速的弹性响应,我的理解是应该能够提供这种短期增加对资源需求量大的服务,比如12306的春运期间对硬件资源的需求量在短期内暴增,是个典型场景。而且对用户是透明的,服务不能断。
        我不知道我理解得对不对。我记得曾经查到国外有人说微软的Azure是有这个功能。但是Azure目前不在中国销售,而且似乎也不是IaaS。

        OpenStack通过resize更改配置的方式,能稍微展开说一下么,重启也没关系。我记得这是个API接口方法,需要编程的。谢谢了。

  6. 陈老师:
    您好!
    请教一个问题,我现在卡在了VNC那一块了,nova-novncproxy怎么都运行不起来,查了很多资料都没啥帮助。之前看您在VNC这块也遇到点问题,所以我想请教一下。
    我的nova.conf文件中关于novnc部分的配置是
    # novnc
    vnc_enabled=true
    novncproxy_base_url=http://10.50.4.28:6080/vnc_auto.html
    xvpvncproxy_base_url=http://10.50.4.28:6081/console
    xvpvncproxy_port=6081
    novncproxy_port=6080
    vncserver_proxyclient_address=127.0.0.1
    vncserver_listen=0.0.0.0
    其中10.50.4.28为主机IP地址。
    我想问一下,我这个配置有什么问题吗?
    如果不是配置的问题,陈老师能给点建议,帮助我找出为什么服务运行不起来的原因吗?
    我还想请教一下,陈老师之前遇到了哪些问题,然后怎么解决的,分享一下,可以吗?

  7. 陈老师好,我的问题是:在服务器上运行ubuntu12 上安装openstack,起初一切正常,安装多借点后,创建实例一直显示失败,查看日期显示2012-11-26 07:57:57 WARNING nova.compute.manager [-] Found 2 in the database and 1 on the hypervisor.
    2012-11-26 07:57:59 WARNING nova.compute.manager [-] [instance: 12505bdd-bc9d-4967-af5b-b2bfb6f5f321] Instance found in database but not known by hypervisor. Setting power state to NOSTATE
    ,不知道这是什么原因,盼望回复。谢谢。

    • 创建实例失败,倒是简单,一般会和nova.conf 设置有关。根据提示,是很难知道原因的。只能靠你自己慢慢查。

      • 陈老师再问一下,有问题的时候,我把nova数据删除了,又重新创建,再对其进行同步,这样做会有问题吗?

  8. 陈老师,我现在安装了一个openstack的F版,在创建实例的时候,一直分配不上IP,我再看openvswitch的服务的时候,发现Module brcompat not found,这两个有关系么?IP分配不上,一般和哪个组件有关?

  9. 陈老师好,我用的时ubuntu 12.10 amd64位server版的安装openstack,安装nova,glance,keystone都没有出问题。安装quantum时出现了问题(连续装了3次了都是同一个问题)。就是当配置这一步ovs-vsctl add-port br-ex eth2后,无法链接公网(ping http://www.baidu.com 不通)。当删掉端口ovs-vsctl del-port br-ex eth2后,就立刻可以链接到公网了(ping http://www.baidu.com 通)。我的参考文档是http://docs.openstack.org/folsom/basic-install/content/basic-install_controller.html,而且我也用ubuntu 12.04装过,也是同样的问题,不知到您安装后,是否还能链接到外网。我用了3个网卡,eth0和eth1是按照参考文档配置的,eth2设置成我自己的ip地址(58.198.100.194)用以链接的外网。

    • 我好像也是这个问题。我现在虚拟机是可以访问,不过虚拟机是无法访问外网。没搞清楚什么原因导致。quantum还是不够熟悉。

      • 谢谢您的答复,quantum这部分是太复杂了,我现在创建的虚拟机还不能用VNC连上去,正在继续中…..

    • 用ovs-vsctl show查看一下 你的eth2, 如果显示的是internal的话,执行ovs-vsctl set interface eth2 type=external。应该就可以连上外网了

      • 谢谢啊。我周一验证一下,给你反馈。

        • use_namespace设为True,应该不用设router_id了吧。我现在分配floatingip之后能连外网了。br-ex还是internal。

  10. 陈老师 您好
    问个问题 quantum 这部分太过复杂 ,如果选择使用nova-network 的话,安照您的文档应该修改什么地方呢??

    • 装nova network倒是简单,你唯一需要处理的是keystone的endpoint导入,里面是包括quantum,你需要去掉quantum就可以了。看一下那个endpoint的导入脚本,修改一下就ok。

  11. 最后配置用户网络的时候出现了错误,
    root@opens:~# quantum net-create –tenant-id 3b6c464ea3124f82990bad607ab42835 net_proj_one –provider:network_type vlan –provider:physical_network physnet1 –provider:segmentation_id 1024
    [Errno 111] Connection refused

    请问是这些参数吗?provider:network_type vlan –provider:physical_network physnet1 –provider:segmentation_id 1024
    可能是什么原因的错误

  12. 您好 陈老师 请问下 cinder 启动服务兵力 ,执行 nova-manage service list 查找不到这个服务呢 ? 查看log也没有报错 谢谢

    • 你比较细心。我的理解,现在volume单独成cinder volume,就无法用nova-manage查看,网络也是一样的道理。

  13. 您好 陈老师 还想问下 关于 volumes 的问题 ,如果我使用cinder list 就可以查看到创建的volumes ,使用nova volume-list 就会报错 拒绝连接,
    ERROR: ConnectionRefused: ‘[Errno 111] Connection refused’
    使用debug参数查看
    REQ: curl -i http://192.168.4.164:8776/v1/562ea6f390d1426ebef83557c3c427e1/volumes/detail -X GET -H “X-Auth-Project-Id: openstackDemo” -H “User-Agent: python-novaclient” -H “Accept: application/json” -H “X-Auth-Token: 05b524fe8a4a43829be33ec9d66a63ac”

    connect: (192.168.4.164, 8776)
    connect fail: (u’192.168.4.164′, 8776)
    RESP:{‘status’: ‘400’, ‘content-length’: 30, ‘content-type’: ‘text/plain’} [Errno 111] Connection refused
    就会发现去访问的 192.168.4.164这台主机 , 使用cinder list 访问的是192.168.4.165 正确主机 ,endpoint中设置的也是 165这台主机
    | aceffcd3af564b039a459c820eebe078 | RegionOne | http://192.168.4.165:8776/v1/%(tenant_id)s | http://192.168.4.165:8776/v1/%(tenant_id)s | http://192.168.4.165:8776/v1/%(tenant_id)s

    请问你遇到过这种情况吗 ? endpoint中的数据 中 ip 是后来更改为 4.165的 之前是4.164 谢谢

    • nova volume,已经是不能用了。

      • 哦 是这样啊 ,以为这个功能保留 调用cinder 的接口呢

      • 谢谢您

      • 您好 陈老师
        在使用cinder 创建虚拟机时,会出现 创建成功后状态值 为error ,查看发现 lvm 已创建成功 ,不知道您测试时有没有发现 ,查了一些资料,在创建虚拟机时, 如果不在配置文件中 添加 参数 state_path = /var/lib/cinder 时 会报以下错误
        [Errno 13] Permission denied: ‘/usr/lib/python2.7/dist-packages/volumes’
        因为创建的lvm会把 信息 写到一个文件中 /usr/lib/python2.7/dist-packages/volumes/volume-9542bc68-0bd4-4036-8120-a0a48653bca1 内容如下:

        backing-store /dev/cinder-volumes/volume-9542bc68-0bd4-4036-8120-a0a48653bca1

        在/etc/tgt/targets.conf 配置中 会 include /etc/tgt/conf.d/*.conf 下面的配置文件
        cat /etc/tgt/conf.d/cinder_tgt.conf 内容如下:
        include /var/lib/cinder/volumes/*

        如果找不到lvm信息文件 状态值就会为 error

        • 你照我的配置,应该不会出现创建虚拟机错误的问题。现在主要的问题是quantum的网络。cinder 是有问题,无法attach到虚拟机里,不过这应该都好办。

          • 不好意思 打错了, 是创建volume 时 ,quantum 我没有使用 ,使用的是nova network

  14. 陈老师,你好! 我是用ubuntu12.10部署的,创建了kvm虚拟机,从dashboard上登陆但发现创建的instance 没有成功用dhcp服务器分配fixed ip,本地物理交换机不支持vlan模式。请问是这个原因吗?谢谢

  15. 您好 陈老师 因为我 使用nova network ,没有使用qumte, 在创建虚拟机时不成功,会出现以下错误:

    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] instance[‘uuid’])
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] File “/usr/lib/python2.7/dist-packages/nova/virt/libvirt/vif.py”, line 136, in create_ovs_vif_port
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] run_as_root=True)
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] File “/usr/lib/python2.7/dist-packages/nova/utils.py”, line 198, in execute
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] cmd=’ ‘.join(cmd))
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] ProcessExecutionError: Unexpected error while running command.
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] Command: sudo nova-rootwrap /etc/nova/rootwrap.conf ovs-vsctl — –may-exist add-port br-int qvo159e8239-17 — set Interface qvo159e8239-17 external-ids:iface-id=159e8239-17d4-42f1-a088-c42888d8e5a7 external-ids:iface-status=active external-ids:attached-mac=fa:16:3e:3a:31:87 external-ids:vm-uuid=e10d7ef6-0a8a-4a88-99bc-e42346ca33aa
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] Exit code: 1
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] Stdout: ”
    2012-12-27 17:11:34 TRACE nova.compute.manager [instance: e10d7ef6-0a8a-4a88-99bc-e42346ca33aa] Stderr: ‘Traceback (most recent call last):\n File “/usr/bin/nova-rootwrap”, line 80, in \n env=filtermatch.get_environment(userargs))\n File “/usr/lib/python2.7/subprocess.py”, line 679, in __init__\n errread, errwrite)\n File “/usr/lib/python2.7/subprocess.py”, line 1249, in _execute_child\n raise child_exception\nOSError: [Errno 2] No such file or directory\n’

    创建虚拟命令失败 可以从报错信息中看到 在创建虚拟机时 使用了 ova-rootwrap /etc/nova/rootwrap.conf ovs-vsctl — –may-exist add-port br-int qvo159e8239-17 — set Interface qvo159e8239-17 external-ids:iface-id=159e8239-17d4-42f1-a088-c42888d8e5a7 external-ids:iface-status=active external-ids:attached-mac=fa:16:3e:3a:31:87 external-ids:vm-uuid=e10d7ef6-0a8a-4a88-99bc-e42346ca33aa 其中有Open-vSwitch 的命令 ovs-vsctl

    请问这种情况应该怎么修改呢 ? 谢谢

  16. 陈老师:您好
    我对您的网络设置中的dns-search=chenshake.com不太理解,我不知道怎样根据我的情况做相应的改变。
    我是通过拨号上外网的。在VMwareworkstation中进行试验,网络应该怎么配置?期待您的指导。谢谢!

  17. 您好 陈老师 请问cinder 创建好后 怎么附加到实例呢???

    • 有专门的命令,最简单的是在dashboard里操作。不过目前好像cinder 有问题,我没成功。

      • 使用 cinder help 中并未看到相关命令,dashboard 没有安装,还是习惯使用命令来管理

  18. 沙克老师,keystone-endpoints.sh 中 MYSQL_PASSWORD=password,需要改成MYSQL_PASSWORD=$MYSQL_PASS

  19. 沙克老师,在 /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini 需要 将sql_connection = mysql://quantum:password@10.1.199.58/quantum 中的 password 设置为变量!

  20. 求问计算节点为什么需要两块网卡?是不是vlan模式要求?

  21. 请教陈老师:
    cinder的安装过程中需要有一个分区,这个分区是在安装ubuntu系统是就需要做好的吗?在ubuntu系统安装过程中有一个对于硬盘的配置步骤,是“use the entire disk and lvm”还是“manual”?
    cinder这块的配置不是很明白,求教!

    • 简单作法可以用一个文件来模拟。cinder目前不稳定,其实可以跳过,不去测试。

  22. 陈老师你好,
    我按照github上OpenStack-Folsom-Install-guide安装好了之后发现我Controller上的NTP服务隔断时间总是要自动中断,从而导致我的controller和compute的时钟不同步而启动失败。我想问下这是什么原因啊?

    遇到这种问题,我只能这样处理
    CC:(100.10.10.51)
    #service ntp restart
    Node:
    #service ntp stop
    #ntpdate -u 100.10.10.51
    #service ntp start
    #service nova-compute restart
    但是过一会CC上的ntp有会down掉。不知道是什么原因。

  23. 沙克是位好同志

  24. 陈老师,keystone的两个脚本需要修改了。keystone命令的参数变量改了,需要:
    修改脚本中的参数”–user-id”为”–user”
    修改脚本中的参数”–role-id”为”–role”
    修改脚本中的参数”–tenant-id”为”–tenant_id”

  25. keystone-endpoints.sh 脚本中的–service-id参数也没有了,不知道应该用哪个代替?

 Leave a Reply

(required)

(required)