搭建环境:
系统:ubuntu 12.04 desktop LTS
控制节点(Control node:server1):192.168.8.44(200G的主分区+ 10G的Swap分区 + 200G + 200G)
注:其中200G用于nova-volumes,另外200G用于swift
计算节点(Compute node:server2):192.168.8.10
控制节点搭建
一.安装底层OS
待12.04的UbuntuOS安装完毕后 ,使用下列命令安装ssh并更新系统:
sudo apt-get install ssh
sudo apt-get update
sudo apt-get upgrade
安装网桥工具bridge-utils:
sudo apt-get install bridge-utils
二.配置网络
1) 编辑/etc/network/interfaces文件,如下所示:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.8.44
netmask 255.255.255.0
broadcast 192.168.8.255
gateway 192.168.8.254
dns-nameservers 202.120.2.101
注:根据自己所在网络修改上述参数,保证静态IP(static)即可。
2)重启网络:
sudo /etc/init.d/networking restart
三.NTP服务器
安装NTP软件包。这个时间服务器将为所有节点提供支持。OpenStack所有组件的时间都必须同步,于是我们就在Server1上安装NTP服务并且让其他服务器或节点与之保持同步。
sudo apt-get install ntp
译者注:NTP(Network Time Protocol),是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。[来源:百度百科]
打开文件/etc/ntp.conf增加以下三行内容,目的是让本服务器时间与外部服务器时间同步。如果不能访问外网,NTP服务器将使用本机硬件时钟作为第二选择。
server ntp.ubuntu.com
server 127.127.1.0
fudge 127.127.1.0 stratum 10
然后重启NTP使配置生效:
sudo service ntp restart
请确保服务器IP地址可以被DNS解析。如果不能,则在/etc/hosts文件中手工加入。
四.安装数据库
安装mysql-server和python-mysqldb包:
sudo apt-get install mysql-server python-mysqldb
为mysql创建root密码,在此使用"123456”。随后编辑mysql配置文件/etc/mysql/my.cnf,将绑定地址从127.0.0.1改为0.0.0.0,如下所示:
bind-address = 0.0.0.0
重启MySQL服务器让其开始监听所有端口:
sudo restart mysql
创建数据库
我们将要为nova、glance和keystone创建很多东东,各种数据库、表及用户。话音未落,这就开始了:
创建名为“nova”的数据库:
sudo mysql -uroot -p123456 -e 'CREATE DATABASE nova;'(mysql每句语句结束需要用”;“)
新建一个用户,名为“novadbadmin”:
sudo mysql -uroot -p123456 -e 'CREATE USER novadbadmin;'
授予novadbadmin用户nova数据库全部权限:
sudo mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"
(%代表任何非本地主机,localhost代表本机)
sudo mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'localhost';"
为novadbadmin同志创建密码(译者注:密码是nova,后文类似之处不多言,请详见命令):
sudo mysql -uroot -p123456 -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('nova');"
sudo mysql -uroot -p123456 -e "SET PASSWORD FOR 'novadbadmin'@'localhost' = PASSWORD('nova');
Glance登场,还是重复刚才的道道,首先创建一个名为glance的数据库:
sudo mysql -uroot -p123456 -e 'CREATE DATABASE glance;'
然后为这个新建的数据库添加一个用户“glancedbadmin”:
sudo mysql -uroot -p123456 -e 'CREATE USER glancedbadmin;'
接着,光荣授予他本数据库的全部权限:
sudo mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%';"
sudo mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'localhost';"
是的,最后一步,为该用户分配密码:
sudo mysql -uroot -p123456 -e "SET PASSWORD FOR 'glancedbadmin'@'%' = PASSWORD('glance');"
sudo mysql -uroot -p123456 -e "SET PASSWORD FOR 'glancedbadmin'@'localhost' = PASSWORD('glance');"
很烦的,keystone出场了。刚才的大循环,至此开始演绎第三遍:
sudo mysql -uroot -p123456 -e 'CREATE DATABASE keystone;'
sudo mysql -uroot -p123456 -e 'CREATE USER keystonedbadmin;'
sudo mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"
sudo mysql -uroot -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'localhost';"
sudo mysql -uroot -p123456 -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystone')"
sudo mysql -uroot -p123456 -e "SET PASSWORD FOR 'keystonedbadmin'@'localhost' = PASSWORD('keystone')"
现在,MySQL部分的工作结束。
五.keystone
Keystone是OpenStack的认证服务。使用以下命令进行安装:
sudo apt-get install keystone python-keystone python-keystoneclient
打开/etc/keystone/keystone.conf文件,将这一行:
admin_token = ADMIN
改为:
admin_token = admin
(本教程中我们将一直使用admin作为令牌)
本例中,我们使用MySQL来存储keystone配置,则将 /etc/keystone/keystone.conf中的这句配置:
connection = sqlite:////var/lib/keystone/keystone.db
换成:
connection = mysql://keystonedbadmin:keystone@192.168.8.44/keystone
然后,重启Keystone:
sudo service keystone restart
接着,执行以下命令同步数据库:
sudo keystone-manage db_sync
Q:sqlalchemy.exc.OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on '192.16.......
S: the service mysql may not be opened
service mysql restart
最后,有些环境变量是OpenStack运行所必须的:
export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
export SERVICE_TOKEN=admin
当然为了避免下次系统重启后,还得将这些变量再次export,最稳妥的办法就是将其写入~/.bashrc中。
创建租间
使用以下命令创建两个租间,admin和service:
keystone tenant-create --name admin
keystone tenant-create --name service
Q: Expecting authentication method via either a service token, --token or env[SERVICE_TOKEN], or .....
S:
export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
export SERVICE_TOKEN=admin
创建用户
执行以下命令,创建四个用户admin、nova、glance及swift:
keystone user-create --name admin --pass admin --email admin@foobar.com
keystone user-create --name nova --pass nova --email nova@foobar.com
keystone user-create --name glance --pass glance --email glance@foobar.com
keystone user-create --name swift --pass swift --email swift@foobar.com
创建角色
使用命令创建两个角色,admin和Member(译者注:注意是大写M):
keystone role-create --name admin
keystone role-create --name Member
查看租间、用户和角色
刚才建立的租间、用户和角色可以通过如下命令进行查看:
租间列表:
keystone tenant-list
+----------------------------------+--------------------+---------+
| id | name | enabled |
+----------------------------------+--------------------+---------+
| 7f95ae9617cd496888bc412efdceabfd | admin | True |
| c7970080576646c6959ee35970cf3199 | service | True |
+----------------------------------+--------------------+---------+
用户列表:
keystone user-list
+----------------------------------+---------+-------------------+--------+
| id | enabled | email | name |
+----------------------------------+---------+-------------------+--------+
| 1b986cca67e242f38cd6aa4bdec587ca | True | swift@foobar.com | swift |
| 518b51ea133c4facadae42c328d6b77b | True | glance@foobar.com | glance |
| b3de3aeec2544f0f90b9cbfe8b8b7acd | True | admin@foobar.com | admin |
| ce8cd56ca8824f5d845ba6ed015e9494 | True | nova@foobar.com | nova |
+----------------------------------+---------+-------------------+--------+
角色列表:
keystone role-list
+----------------------------------+----------------------+
| id | name |
+----------------------------------+----------------------+
| 2bbe305ad531434991d4281aaaebb700 | admin |
| d983800dd6d54ee3a1b1eb9f2ae3291f | Member |
+----------------------------------+----------------------+
请大家格外注意id列中的值,虽然很长,但随后为用户绑定角色,继而把用户配入租间中时可全靠它们了。
为特定租间中的用户绑定角色
现在我们先为刚刚创建的用户绑定角色,通过如下命令格式可以将特定租间中的特定用户增加角色(译者注:仅是命令格式,随后才是真正执行的命令):
keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID
其中id字段可以通过keystone user-list,keystone role-list和keystone tenant-list命令获得。
下面开始为“admin”租间中的“admin”用户绑定“admin”角色:
keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role 2bbe305ad531434991d4281aaaebb700 --tenant_id 7f95ae9617cd496888bc412efdceabfd
接着执行如下命令,为“service”租间中的“nova”、“glance”、“swift”用户绑定“admin”角色:
keystone user-role-add --user ce8cd56ca8824f5d845ba6ed015e9494 --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
keystone user-role-add --user 518b51ea133c4facadae42c328d6b77b --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
为"admin"租间里的"swift"用户绑定“Member”角色即可,所以相应地执行如下命令:
keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd
注意,在执行自己的安装时,请千万按照实际安装中的id进行设置,照抄本文id必将出错!
创建服务
至此,我们该创建授权用户可以享用的服务了,命令格式如下:
keystone service-create --name service_name --type service_type --description 'Description of the service'
安装上述格式,创建nova-compute、nova-volume、glance、swift、keystone及ec2服务:
keystone service-create --name nova --type compute --description 'OpenStack Compute Service'
keystone service-create --name volume --type volume --description 'OpenStack Volume Service'
keystone service-create --name glance --type image --description 'OpenStack Image Service'
keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'
keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'
keystone service-create --name ec2 --type ec2 --description 'EC2 Service'
刚才创建的每个服务都拥有唯一的id,要查看服务id,使用如下命令即可:
keystone service-list
+----------------------------------+----------+--------------+----------------------------+
| id | name | type | description |
+----------------------------------+----------+--------------+----------------------------+
| 1e93ee6c70f8468c88a5cb1b106753f3 | nova | compute | OpenStack Compute Service |
| 28fd92ffe3824004996a3e04e059d875 | ec2 | ec2 | EC2 Service |
| 7d4ec192dfa1456996f0f4c47415c7a7 | keystone | identity | OpenStack Identity Service |
| 96f35e1112b143e59d5cd5d0e6a8b22d | swift | object-store | OpenStack Storage Service |
| f38f4564ff7b4e43a52b2f5c1b75e5fa | volume | volume | OpenStack Volume Service |
| fbafab6edcab467bb734380ce6be3561 | glance | image | OpenStack Image Service |
+----------------------------------+----------+--------------+----------------------------+
这些id将被用于定义所属服务的入口(endpoint)。
创建入口
创建服务入口的命令格式是:
keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url --internalurl internal_url
使用如下命令创建nova-compute入口:
keystone endpoint-create --region myregion --service_id 1e93ee6c70f8468c88a5cb1b106753f3 --publicurl 'http://192.168.8.44:8774/v2/$(tenant_id)s' --adminurl 'http://192.168.8.44:8774/v2/$(tenant_id)s' --internalurl 'http://192.168.8.44:8774/v2/$(tenant_id)s'
使用如下命令创建nova-volume入口:
keystone endpoint-create --region myregion --service_id f38f4564ff7b4e43a52b2f5c1b75e5fa --publicurl 'http://
|