openstack 单节点 ubuntu 12.04 server 安装步骤 转自陈沙克老师博客

前言

由于我们公司的网站网络问题,或者陈沙克老师的博客地址转移问题,并不能访问陈沙克老师的博客故下载下来并记录到此,转载声明并无他意。原文地址http://www.chenshake.com/ubuntu-12-04-openstack-essex-installation-single-node/

TIPS:如果不能使用,可以将问题发给我,一起成长解决问题。谢谢!

 

 

以前使用百度空间的文档有不少错误,这次就重新把文档整理一遍,发布到新的blog上。这其实是用windows live writer本地完成,看看效果如何。

这个文档是描述Openstack Essex安装,把所有的服务安装在一台机器上。包括组件Nova,Keystone, Glance, Dashboard.

文档更新记录

  1. 2012年7月9号更新:加上nova-volume,对文档安装了2遍,基本相信不会有问题。(IP改成10.1.199.17)
  2. 2012年7月11日更新:修改nova.conf, 创建网络的时候,加入multi_host=T参数
  3. 2012年7月12日更新: nova和glance的配置文件,采用租户service,用户glance和nova来启动,这应该才是正确设置,这也是参考作者的原文
  4. 2012年7月20日更新:多节点的测试,基本完成。
  5. 2012年7月23日更新:  修改keystone脚本,去掉demo账号,减少大家的困惑. 验证了一遍多节点的安装, 没发现任何的问题. 参考onestack脚本,把一些修改变成sed修改。
  6. 2012年8月1日更新: 调整一下nova.conf, 多节点测试。
  7. 2012年8月7日更新:把nova.conf 和网卡设置,作为附件提供下载,包括控制节点和计算节点。配置文件
  8. 2012年9月4日更新:加上swift集成keystone和glance,修改了nova.conf 文件,由于文档现在支持目录,也调整一下文章标题的编号。
  9. 2012年9月24日更新:估计这次是最后一次调整,Folsom马上就要正式发布,在发布前,把以前文档有遗憾的地方全部调整了。把默认的密码改成password。基本已经验证了一次,没任何的问题。很多朋友安装失败,基本都是因为修改IP地址导致的,这次调整的命令,让安装过程更加方便,IP设置的地方,采用变量,自动调整。已经反复验证了两遍,没发现任何的问题。
  10. 2012年9月25日更新:马上就要过国庆,所以这次真的是最后一次修改。把最后的遗憾解决掉。mysql的安装,已经不需要输入密码。应该已经很灵活。Fix IP,也是采用变量。大家参考文档安装的时候,只需要修改 novarc, 就可以,别的基本都不需要做任何的修改,唯一还需要调整的就是创建floating 网络的时候,需要根据你的情况,设置一下。
  11. 2012年9月26日更新:实在忍不住,把floating IP,fixIP都设置变量,并且fix IP,是直接取eth0的IP地址的前3位合成,这样可以说,算是全部符合我的要求。
  12. 2012年10月8日更新:把服务账户的密码,也是采用变量,export SERVICE_PASSWORD=password, 这样你可以根据自己的需要调整密码。
  13. 2012年10月16日更新:把单节点,多节点,swift的文档测试了一遍,全部都提供sed命令修改,并且IP地址和密码等设置,全部都是用变量。目前swift可以结合glance工作,不过在dashbord里,snapshot的时候,如果image太大,会导致失败。我使用Cirros的image测试是没问题,ubuntu的image是无法snapshot保存到swift上。说明swift还是有地方需要优化。作为一个POC环境搭建,应该算是基本满足需求。目前在我的实验环境下,使用ubuntu内网的源,从安装OS到全部搭建完成,应该不需要超过30分钟。

目前本文档不包括quantum。

机器名 eth0 eth1 说明
node17 10.1.199.17/24 没有IP bridge 控制节点+计算节点+网络节点+volume+ntp 服务器,
FlatDHCP和multi_host=T
swift
node18 10.1.199.18/24 没有IP Bridge 计算节点+网络节点

英文原文   百度空间原文  计算节点安装

文档改动

  1. Nova,Keystone,Glance,采用mysql
  2. Keystone 的endpoint也导入到mysql里

 

 

基本介绍

Openstack的网络比较复杂,也很难理解。大家可以直接看http://www.mirantis.com/blog/openstack-networking-flatmanager-and-flatdhcpmanager/

flat-dhcp-networking-diagrams-4

上图的例子:10.0.0.0/24, 是fix IP的网络。这是multihost=true的设置。这个图是可以很好帮助大家理解Openstack的网络。

  • 我文档和这个图有点不一样,我是使用eth1做为bridge,而不是eth0
  • 虚拟机间互相通讯,是直接通过br100通信
  • 和外网通信,才需要通过另外一块网卡,floating IP。

 

准备系统

安装ubuntu 12.04

最小化安装,只需要安装ssh server就可以。

apt-get update && apt-get -y dist-upgrade

设置网络

Eth0: 10.1.199.17

Eth1: 不需要设置IP

编辑 /etc/network/interfaces,需要注意一点是对于ubuntu 12.04,dns的设置,推荐在网卡设置。

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.1.199.17
hwaddress ether 00:25:90:67:ce:64
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 manual
up ifconfig eth1 up

查看当前网卡情况

# mii-tool 
eth0: negotiated 1000baseT-FD flow-control, link ok
eth1: negotiated 1000baseT-FD flow-control, link ok

设置hostname (可选)

这是我的习惯,Openstack基本是不需要使用hostname。大家可以忽略。

# cat /etc/hostname 
node17

# cat /etc/hosts
127.0.0.1       localhost
10.1.199.17       node17.chenshake.com    node17

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

# hostname
node17

# hostname -f
node17.chenshake.com

 

NTP服务器

对于单节点来说,NTP服务器,并不是必须的。如果是多台机器的环境。就需要设置所有的节点,都吧ntp服务指向相同的一个ntp服务器上。

apt-get -y install ntp

设置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

上面设置 server 127.127.1.0 的含义,大家可以参考文档

设置ISCSI (可选)

这是为Nova-volume服务使用的。不过目前nova-volume并不稳定,大家测试一下就可以。未来的Folsom版本,将会有新的组件来替代Nova-volume。

如果你不测试nova volume,可以不安装

apt-get -y install tgt

nova-compute节点,需要安装ISCSI客户端

apt-get install -y open-iscsi open-iscsi-utils

Nova-volume (可选)

如果你没有单独的分区,那么就不建议你测试,采用文件模拟的方式,基本是不可行。

我安装系统的时候,创建了一个nova-volume的分区,我先umount,再创建一个volume,名字为nova-volumes。nova的默认使用的volume的名字就是叫 nova-volumes. 如果你希望改变,就需要指定在nova.conf 文件里。

查看分区情况

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda8       623G  941M  591G   1% /
udev            2.0G  4.0K  2.0G   1% /dev
tmpfs           790M  276K  789M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
/dev/sda1       138M   30M  101M  23% /boot
/dev/sda7        97G  188M   92G   1% /nova-volume
/dev/sda6        97G  188M   92G   1% /swift

 

创建nova-volumes 卷

umount /dev/sda7
pvcreate /dev/sda7
vgcreate nova-volumes /dev/sda7

编辑 /etc/fstab , 注释掉nova-volumes开机加载,否则会导致你开机无法启动。我是安装过程,直接创建了一个nova-volume的分区

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

 

Bridge

目前Openstack的网络是通过linux的bridge和iptables来实现的。

apt-get -y install bridge-utils

重启网络

/etc/init.d/networking restart

RabbitMQ和Memcache 等

RabbitMQ是用来做调度使用。Memcache是给Dashboard使用。

apt-get install -y rabbitmq-server memcached python-memcache kvm libvirt-bin curl

环境变量

大家经常参考文档安装不成功,基本都是因为你修改的IP地址或者你更改了我文档默认的密码。为了让文档更加灵活,所以需要设置一下环境变量。

你可以根据你的实际情况修改admin的密码和mysql的密码。下面文档和数据库相关的密码都是相同,你只需要修改novarc就可以。

运行完下面的命令,你再对novarc进行修改。

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 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 ":")"
EOF

根据你的需求进行调整,

我的novarc的内容

# cat novarc 
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=password
export MYSQL_PASS=password
export SERVICE_PASSWORD=password
export FIXED_RANGE=10.0.0.0/24
export FLOATING_RANGE=10.1.199.224/27
export OS_AUTH_URL="http://localhost:5000/v2.0/"
export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
export SERVICE_TOKEN=d5d892e6de00a922f9fb
export MASTER="10.1.199.17"

确认没有问题或者进行修改,运行

source novarc
echo "source novarc">>.bashrc

MYSQL

在Openstack组件里,Nova,Keystone, Glance, 都需要用到数据库。所以我们需要创建相关的数据库和用户。

 

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

 

安装

mysql自动安装

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

Openstack都是Python写的,所以你需要python-mysqldb,安装过程,就不会提示你输入root密码

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

配置

编辑/etc/mysql/my.cnf, 允许网络访问mysql

#bind-address           = 127.0.0.1
bind-address            = 0.0.0.0

或者直接运行下面命令

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

重启mysql服务

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';
FLUSH PRIVILEGES;
EOF

 

Keystone

Keystone是Openstack的核心,所有的组件,都需要通过keystone进行认证和授权。

租户(tenant) 用户 密码  
admin admin password  
service nova password  
  glance password  
       
       

安装

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

配置

编辑/etc/keystone/keystone.conf,需要修改

  • keystone的默认token是ADMIN,我这里修改成随机生成,查看novarc获得
  • 默认是采用sqlite连接,我们需要改成mysql
[DEFAULT]
#bind_host = 0.0.0.0
public_port = 5000
admin_port = 35357
#admin_token = ADMIN
admin_token = d5d892e6de00a922f9fb

[sql]
#connection = sqlite:////var/lib/keystone/keystone.db
connection = mysql://keystone:[email protected]/keystone

 

或者运行下面命令,很多朋友都是因为修改错误导致错误,建议直接使用下面命令进行修改。

 

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

重启服务

service keystone restart

同步keystone数据库

keystone-manage db_sync

keystone的数据库,需要导入数据和endpoint,你可以一步一步用命令行导入,可以参考keystone白皮书

为了方便,你可以直接使用下面2个脚本来进行全部的设置。

  1. keystone_data.sh导入用户信息
  2. endpoints.sh 设置endpoint

Keystone Data

wget http://www.chenshake.com/wp-content/uploads/2012/07/keystone_data.sh_.txt
mv keystone_data.sh_.txt keystone_data.sh
bash keystone_data.sh

没任何输出,就表示正确,可以通过下面命令检查

echo $?

显示0,就表示脚本正确运行,千万不要重复运行脚本。

Endpoint 导入

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

需要注意的是,这个脚本是假设你的glance服务和swift都是安装相同的服务器,如果你的glance在不同的服务器,你需要调整一下endpoint,可以在数据库里调整。

 

测试

可以使用curl命令来测试。

命令的格式如下

curl -d '{"auth": {"tenantName": "adminTenant", "passwordCredentials":\
{"username": "adminUser", "password": "secretword"}}}' -H "Content-type:\
application/json" http://IP:35357/v2.0/tokens | python -mjson.tool

你需要替换一下。

curl -d '{"auth": {"tenantName": "admin", "passwordCredentials":{"username": "admin", "password": "password"}}}' -H "Content-type:application/json" http://$MASTER:35357/v2.0/tokens | python -mjson.tool

你就可以获得一个24小时的token。(注意,上面的脚本没有创建demo用户,所以没法用demo账号去测试)

 "token": {
            "expires": "2012-09-27T02:09:37Z", 
            "id": "c719448800214e189da04772c2f75e23", 
            "tenant": {
                "description": null, 
                "enabled": true, 
                "id": "dc7ca2e51139457dada2d0f7a3719476", 
                "name": "admin"
            }

通过下面命令,可以检查keystone的设置是否正确。

root@node17:~# keystone user-list
+----------------------------------+---------+----------------------+--------+
|                id                | enabled |        email         |  name  |
+----------------------------------+---------+----------------------+--------+
| 1189d15892d24e00827e707bd2b7ab07 | True    | [email protected]  | admin  |
| cca4a4ed1e8842db99239dc98fb1617f | True    | [email protected] | glance |
| daccc34eacc7493989cd13df93e7f6bc | True    | [email protected]  | swift  |
| ee57b02c535d44f48943de13831da232 | True    | [email protected]   | nova   |
+----------------------------------+---------+----------------------+--------+

 

root@node17:~# keystone endpoint-list
+----------------------------------+-----------+-----------------------------------------------+-----------------------------------------------+------------------------------------------+
|                id                |   region  |                   publicurl                   |                  internalurl                  |                 adminurl                 |
+----------------------------------+-----------+-----------------------------------------------+-----------------------------------------------+------------------------------------------+
| 0b04e1baac1a4c9fb07490e0911192cf | RegionOne | http://10.1.199.17:5000/v2.0 | http://10.1.199.17:5000/v2.0 | http://10.1.199.17:35357/v2.0 |
| 0d3315627d52419fa08095f9def5d7e4 | RegionOne | http://10.1.199.17:8776/v1/%(tenant_id)s | http://10.1.199.17:8776/v1/%(tenant_id)s | http://10.1.199.17:8776/v1/%(tenant_id)s |
| 1c92290cba9f4a278b42dbdf2802096c | RegionOne | http://10.1.199.17:9292/v1 | http://10.1.199.17:9292/v1 | http://10.1.199.17:9292/v1 |
| 56fe83ce20f341d99fc576770c275586 | RegionOne | http://10.1.199.17:8774/v2/%(tenant_id)s | http://10.1.199.17:8774/v2/%(tenant_id)s | http://10.1.199.17:8774/v2/%(tenant_id)s |
| 5fb51aae00684e56818869918f86b564 | RegionOne | http://10.1.199.17:8080/v1/AUTH_%(tenant_id)s | http://10.1.199.17:8080/v1/AUTH_%(tenant_id)s | http://10.1.199.17:8080/v1 |
| aaac7663872d493b85d9e583329be9ed | RegionOne | http://10.1.199.17:8773/services/Cloud | http://10.1.199.17:8773/services/Cloud | http://10.1.199.17:8773/services/Admin |
+----------------------------------+-----------+-----------------------------------------------+-----------------------------------------------+------------------------------------------+

可以使用下面命令来查看结果

keystone tenant-list
keystone user-list
keystone role-list

Glance

Glance是提供镜像管理服务,可以理解成一个中间件,后面的存储可以是本地存储,也可以使用swift存储。

安装

apt-get install -y glance glance-api glance-client glance-common glance-registry python-glance

配置

编辑 /etc/glance/glance-api-paste.ini,/etc/glance/glance-registry-paste.ini,两个文件,都是修改文档最后3行

#admin_tenant_name = %SERVICE_TENANT_NAME%
#admin_user = %SERVICE_USER%
#admin_password = %SERVICE_PASSWORD%
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-paste.ini
sed -i -e " s/%SERVICE_TENANT_NAME%/service/g; s/%SERVICE_USER%/glance/g; s/%SERVICE_PASSWORD%/$SERVICE_PASSWORD/g; " /etc/glance/glance-registry-paste.ini

编辑/etc/glance/glance-registry.conf改成使用mysql验证

#sql_connection = sqlite:////var/lib/glance/glance.sqlite
sql_connection = mysql://glance:[email protected]/glance

或者运行下面命令实现修改

 

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

编辑/etc/glance/glance-registry.conf 和 /etc/glance/glance-api.conf,都在文件末尾添加两行

[paste_deploy]
flavor = keystone

或者运行下面命令,完成修改

cat <<EOF >>/etc/glance/glance-api.conf
[paste_deploy]
flavor = keystone
EOF
cat <<EOF >>/etc/glance/glance-registry.conf 
[paste_deploy]
flavor = keystone
EOF

 

重启glance服务

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

同步glance数据库

# glance-manage version_control 0
# glance-manage db_sync
/usr/lib/python2.7/dist-packages/glance/registry/db/migrate_repo/versions/003_add_disk_format.py:47: SADeprecationWarning: useexisting is deprecated.  Use extend_existing.
  useexisting=True)

看到下面的输出,表示正常的。

重启glance服务

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

测试

glance index

没有输出,表示正常,因为目前还没有镜像。

下载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 add name=cirros-0.3.0-x86_64 is_public=true  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 add name="Ubuntu 12.04 cloudimg amd64" is_public=true container_format=ovf \
disk_format=qcow2 < /root/precise-server-cloudimg-amd64-disk1.img

 

user:ubuntu

只能使用密钥登陆。

查看image

# glance index
ID                                   Name                           Disk Format          Container Format     Size          
------------------------------------ ------------------------------ -------------------- -------------------- --------------
5dcf84a0-b491-4710-8d7a-5531bce0dedc cirros-0.3.0-x86_64            qcow2                bare                        9761280
f4f62d8a-3e5b-4136-8547-ce3cb79771aa Ubuntu 12.04 cloudimg amd64    qcow2                ovf                       230817792

 

Nova

安装

apt-get install -y nova-api nova-cert nova-common nova-objectstore \
nova-scheduler nova-volume nova-consoleauth novnc python-nova python-novaclient \
nova-compute nova-compute-kvm  nova-network

如果你希望控制节点,不打算跑计算服务,装完后,把nova compute的服务停掉也可以。

 

配置

编辑 /etc/nova/api-paste.ini , 修改末尾3行

#admin_tenant_name = %SERVICE_TENANT_NAME%
#admin_user = %SERVICE_USER%
#admin_password = %SERVICE_PASSWORD%
admin_tenant_name = service
admin_user = nova
admin_password = password

或者运行下面命令进行修改

sed -i -e " 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 文件,

下面是我的nova.conf 文件的配置。需要注意的一点是Essex版本的nova,配置文件不需要前面加上 — 。日后我会逐步调整nova.conf 文件,让他更加可读和方便大家理解。

为了简单,大家直接copy下面内容,运行就可以。

如果你是在虚拟机里安装,你需要吧 libvirt_type=kvm 改成 ibvirt_type=qemu

cat >/etc/nova/nova.conf <<EOF
[DEFAULT]
###### LOGS/STATE
#verbose=True
verbose=False

###### AUTHENTICATION
auth_strategy=keystone

###### SCHEDULER
#--compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
scheduler_driver=nova.scheduler.simple.SimpleScheduler

###### VOLUMES
volume_group=nova-volumes
volume_name_template=volume-%08x
iscsi_helper=tgtadm

###### DATABASE
sql_connection=mysql://nova:$MYSQL_PASS@$MASTER/nova

###### COMPUTE
libvirt_type=kvm
#libvirt_type=qemu
connection_type=libvirt
instance_name_template=instance-%08x
api_paste_config=/etc/nova/api-paste.ini
allow_resize_to_same_host=True
libvirt_use_virtio_for_bridges=true
start_guests_on_host_boot=true
resume_guests_state_on_host_boot=true

###### APIS
osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
allow_admin_api=true
s3_host=$MASTER
cc_host=$MASTER

###### RABBITMQ
rabbit_host=$MASTER

###### GLANCE
image_service=nova.image.glance.GlanceImageService
glance_api_servers=$MASTER:9292

###### NETWORK
network_manager=nova.network.manager.FlatDHCPManager
force_dhcp_release=True
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
public_interface=eth0
flat_interface=eth1
flat_network_bridge=br100
fixed_range=$FIXED_RANGE
multi_host=true

###### NOVNC CONSOLE
novnc_enabled=true
novncproxy_base_url= http://$MASTER:6080/vnc_auto.html
vncserver_proxyclient_address=$MASTER
vncserver_listen=$MASTER

########Nova
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova

#####MISC
use_deprecated_auth=false
root_helper=sudo nova-rootwrap
EOF

设置目录权限

chown -R nova:nova /etc/nova

重启所有服务

service rabbitmq-server restart
service libvirt-bin restart
service nova-scheduler restart
service nova-network restart
service nova-cert restart
service nova-compute restart
service nova-api restart
service nova-objectstore restart
service nova-volume restart

由于服务数量比较多,创建一个脚本 restart.sh 来重启所有服务。

#!/bin/bash
for a in rabbitmq-server libvirt-bin nova-network nova-cert nova-compute \
nova-api nova-objectstore nova-scheduler nova-volume \
novnc  nova-consoleauth; do service "$a" stop; done
for a in rabbitmq-server libvirt-bin nova-network nova-cert nova-compute \
nova-api nova-objectstore nova-scheduler nova-volume \
novnc  nova-consoleauth; do service "$a" start; done

 

运行脚本

bash restart.sh
Stopping rabbitmq-server: rabbitmq-server.
libvirt-bin stop/waiting
nova-network stop/waiting
nova-cert stop/waiting
nova-compute stop/waiting
nova-api stop/waiting
nova-objectstore stop/waiting
nova-scheduler stop/waiting
nova-volume stop/waiting
 * Stopping OpenStack NoVNC proxy nova-novncproxy                 [ OK ] 
nova-consoleauth stop/waiting
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
libvirt-bin start/running, process 9683
nova-network start/running, process 9703
nova-cert start/running, process 9713
nova-compute start/running, process 9724
nova-api start/running, process 9734
nova-objectstore start/running, process 9744
nova-scheduler start/running, process 9759
nova-volume start/running, process 9775
 * Starting OpenStack NoVNC proxy  nova-novncproxy                 [ OK ] 
nova-consoleauth start/running, process 9839

 

同步数据库

nova-manage db sync

会有一堆的输出,不过应该是没问题的。nova数据库里已经有相应的表,就表示正确。

# nova-manage db sync
2012-07-19 18:43:34 WARNING nova.utils [-] /usr/lib/python2.7/dist-packages/sqlalchemy/pool.py:639: SADeprecationWarning: The 'listeners' argument to Pool (and create_engine()) is deprecated.  Use event.listen().
  Pool.__init__(self, creator, **kw)

2012-07-19 18:43:34 WARNING nova.utils [-] /usr/lib/python2.7/dist-packages/sqlalchemy/pool.py:145: SADeprecationWarning: Pool.add_listener is deprecated.  Use event.listen()
  self.add_listener(l)

2012-07-19 18:43:34 AUDIT nova.db.sqlalchemy.fix_dns_domains [-] Applying database fix for Essex dns_domains table.

创建Fix IP

FIX IP,就是分配给虚拟机的实际IP地址。这些数据都会写入数据库。$FIXED_RANGE 在novarc里设置。

nova-manage network create private --fixed_range_v4=$FIXED_RANGE \
 --num_networks=1 --bridge=br100 --bridge_interface=eth1 \
--network_size=256 --multi_host=T

创建floating IP

所谓Floating IP,是亚马逊EC2的定义。简单说,就是公网的IP。他其实是通过类似防火墙类似,做一个映射。实际上是通过iptables来实现映射.

nova-manage floating create --ip_range=$FLOATING_RANGE

重启nova服务

bash restart.sh 
libvirt-bin stop/waiting
nova-network stop/waiting
nova-cert stop/waiting
nova-compute stop/waiting
nova-api stop/waiting
nova-objectstore stop/waiting
nova-scheduler stop/waiting
nova-volume stop/waiting
 * Stopping OpenStack NoVNC proxy nova-novncproxy                                           [ OK ] 
nova-consoleauth stop/waiting
libvirt-bin start/running, process 23232
nova-network start/running, process 23252
nova-cert start/running, process 23262
nova-compute start/running, process 23273
nova-api start/running, process 23285
nova-objectstore start/running, process 23303
nova-scheduler start/running, process 23321
nova-volume start/running, process 23336
 * Starting OpenStack NoVNC proxy  nova-novncproxy                                          [ OK ] 
nova-consoleauth start/running, process 23386

 

 

测试

可以尝试用下面命令去检查nova的状况

nova-manage service list

nova-manage

下面命令可以参考,详细的命令使用,可以参考 Openstack命令集

nova list
nova image-list
nova floating-ip-create
nova flavor-list
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
nova secgroup-list
nova secgroup-list-rules default

命令行创建虚拟机的过程

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

 

这个时候,你在服务器上可以直接ssh到虚拟机上,ubuntu的虚拟机,用户是ubuntu。虚拟机的Ip

# nova list
+--------------------------------------+-------+--------+------------------+
|                  ID                  |  Name | Status |     Networks     |
+--------------------------------------+-------+--------+------------------+
| 61e93d62-c926-46fa-8e0c-48073b7e58b0 | test1 | ACTIVE | private=10.0.0.2 |
| 6976e539-32d9-48a6-9fb5-28a3cdb55f71 | test2 | ACTIVE | private=10.0.0.4 |
+--------------------------------------+-------+--------+------------------+

在服务器上直接ssh到虚拟机,如果你在远程,就需要分配floating IP。

ssh -i oskey.priv [email protected]

登陆虚拟机后,你可以查看一下路由

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.0.0.3        0.0.0.0         UG    100    0        0 eth0
10.0.0.0        *               255.255.255.0   U     0      0        0 eth0

显示网关是10.0.0.3,这个时候,你看一下

 

root@node07:~# ifconfig
br100     Link encap:Ethernet  HWaddr 00:e0:81:d8:4a:23  
          inet addr:10.0.0.3  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::ccfc:5aff:fef5:4345/64 Scope:Link

结合上面的那个图,应该可以很好的帮助你的理解。如果你安装多节点,就更容易深入理解。

 

需要注意的是:br100的IP,需要你创建第一个虚拟机,他才会获得IP。

Dashobard

安装

apt-get install -y apache2 libapache2-mod-wsgi openstack-dashboard

重启nova api

restart nova-api

这个时候,就可以访问dashboard。

测试

登陆dashobard

http://10.1.199.17
user:admin
pass:password

Swift

由于swift的文档比较长,所以单独一个文档

http://www.chenshake.com/swift-single-version/

 

附录

理解project和user关系

上面需要注意的一个地方,就是 project的含义。以前的版本是tenant,租户意思,基本可以理解成企业。

你可以创建用户,用户属于一个project。创建用户的时候,就需要设置密码。

创建虚拟机

下面的流程,是复制我以前的文档,内容是没问题的。

1:设置安全组 Security group

安全组,其实就是虚拟机前面的防护墙。默认是关闭所有的包。需要打开防护墙。为了简单,我们把default的防护墙,端口全部打开。生产环境就不要这样操作。默认是default规则,直接修改default就可以。默认default,是阻止所有的访问。

安全组设置

 

2:创建密钥

为了安全考虑,ubuntu提供的模板,都是采用密钥登录。简单点说,你创建一对公钥和私钥。私钥下载到本地保存,公钥存放在服务器上,创建虚拟机的时候,会把公钥注入到虚拟机里。

这个时候,你如果有私钥,就可以直接登录。

下载私钥

点击create keypair,就会提示你下载私钥。私钥是pem后缀。

3:创建vm

创建vm的时候,你会选择keypair,安全组。

创建完成后,得到其实是一个内网IP

4:floating IP

给虚拟机分配一个 floating IP,可以理解成是公网的IP

关联vm

需要等待大概1分钟,才能看到关联后的结果

floating IP

 

5:ssh 访问vm

这个看你的客户端是什么,linux,SecureCRT,putty,都有所不同。

对于ubuntu提供的image,ssh的用户名是:ubuntu,

SecureCRT 6.x版本

对于6.x版本,已经可以直接使用pem后缀的密钥

secureCRT

putty登录

对于putty,需要对密钥进行转换。

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

到官方网站下载:PuTTYgen这个工具

PUTTYGEN,通过load,找到刚才下载的私钥,注意,要选择全部文件,才可以找到。通过转换,选择保存私钥就可以

putty

存放到本地。

设置putty使用密钥

putty使用密钥

 

linux客户端ssh登录vm

如果你是linux服务器上,你可以上传密钥到服务器上

ssh -i key_for_openstack.pem [email protected]

就可以直接登录虚拟机。

你可能感兴趣的:(openstack,陈沙克,桌面虚拟)