openstack官方翻译+实践

注意:
    近期开始向OpenStack进军,请大家继续关注。也希望各位提出批评和改进意见,弥补我的不足。对于OpenStack我是个新手,一来以前都飘在CentOS中,这次对于拿Ubuntu做Server还有点不适应;二来OpenStack绝对是个Big Guy,构建复杂,内容庞大,仅仅安装就很麻烦。同时它又非常灵活,经常让我云里雾里。
    昨天对照着最新的官方教程进行了安装,结果OK,用Server2制作Ubuntu Desktop和Win7上传后,都能正常打开,但每个instance都没有网卡,让人觉得奇怪。后来感觉还是没有把官方教程吃透的原因。晚上开始挑灯夜战,自己开始翻译官方教程。我认为只有踏踏实实地学习,才能真正搞懂它。

    以下是官方教程原链接处:

    以下是我对照原教程翻译的博客文章《OpenStack云计算----快速入门之》章节:


    从这里开始,是部分的安装手记,请参考官方教程参看下面的过程。

一、安装Ubuntu
1、DVD:Ubuntu 12.04 Server版

2、分区:
    490G的主分区   +    16G的SWAP(其实还能减少,服务器16G内存)  +  490G空闲空间
注:490G的空闲空间用于OpenStack的Swift数据存储。同时一定要给主分区格式化,并且将boot写入。

3、安装语言,选择“English”,因为汉化不太好,尤其是到Openstack后,故直接选择英语,避免各种乱码方块出现

4、不适用代理服务器,因为本身就已经有外网IP,自身就可以连入Internet

5、选择“不使用自动更新 No auto Update”

6、只安装OpenSSH服务。

7、等待安装结束。重启,进入第二阶段。

二、安装OpenStack

1、使用putty,远程连接:

login as: localadmin
localadmin@122.xxx.144.xxx's password:
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Wed Jul  4 15:13:59 CST 2012

  System load:  0.0                Processes:           109
  Usage of /:   1.7% of 458.53GB   Users logged in:     1
  Memory usage: 0%                 IP address for eth0: 122.204.144.220
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/

58 packages can be updated.
29 updates are security updates.


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Last login: Wed Jul  4 15:08:33 2012
localadmin@server1:~$

2、现在更新系统:
localadmin@server1:~$sudo apt-get update
localadmin@server1:~$sudo apt-get upgrade

3、编辑网卡:
localadmin@server1:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 122.204.144.220
        netmask 255.255.255.128
        broadcast 122.204.144.255
        gateway 122.204.144.129
        dns-nameservers 218.104.111.114
auto eth1
iface eth1 inet static
        address 192.168.3.1
        netmask 255.255.255.0
        network 192.168.3.0
        broadcast 192.168.3.255
localadmin@server1:~$

4、重启network网络服务:
localadmin@server1:~$ sudo /etc/init.d/networking restart
 * Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces
 * Reconfiguring network interfaces...                                          ssh stop/waiting
ssh start/running, process 11988
ssh stop/waiting
ssh start/running, process 12029
                                                                         [ OK ]
localadmin@server1:~$

5、NTP是用来使系统和一个精确的时间源保持时间同步的协议。建议大家在自己管理的网络中建立至少一台时间服务器来同步本地时间,这样可以使得在不同的系统上处理和收集日志和管理更加容易。

建立NTP时间服务器:
localadmin@server1:~$ sudo apt-get install ntp
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  libcap2 libopts25
Suggested packages:
  ntp-doc
The following NEW packages will be installed:
  libcap2 libopts25 ntp
0 upgraded, 3 newly installed, 0 to remove and 3 not upgraded.
Need to get 684 kB of archives.
After this operation, 1,765 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise/main libcap2 amd64 1:2.22-1ubuntu3 [12.0 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise/main libopts25 amd64 1:5.12-0.1ubuntu1 [59.9 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main ntp amd64 1:4.2.6.p3+dfsg-1ubuntu3.1 [612 kB]
Fetched 684 kB in 5s (137 kB/s)
Selecting previously unselected package libcap2.
(Reading database ... 48908 files and directories currently installed.)
Unpacking libcap2 (from .../libcap2_1%3a2.22-1ubuntu3_amd64.deb) ...
Selecting previously unselected package libopts25.
Unpacking libopts25 (from .../libopts25_1%3a5.12-0.1ubuntu1_amd64.deb) ...
Selecting previously unselected package ntp.
Unpacking ntp (from .../ntp_1%3a4.2.6.p3+dfsg-1ubuntu3.1_amd64.deb) ...
Processing triggers for ureadahead ...
Processing triggers for man-db ...
Setting up libcap2 (1:2.22-1ubuntu3) ...
Setting up libopts25 (1:5.12-0.1ubuntu1) ...
Setting up ntp (1:4.2.6.p3+dfsg-1ubuntu3.1) ...
 * Starting NTP server ntpd                                              [ OK ]
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

6、修改NTP服务器配置文件:
localadmin@server1:~$ sudo vi /etc/ntp.conf
localadmin@server1:~$ cat /etc/ntp.conf
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift


# Enable this if you want statistics to be logged.
#statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# Specify one or more NTP servers.

# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

# Use Ubuntu's ntp server as a fallback.
server ntp.ubuntu.com
server 127.127.1.0

fudge 127.127.1.0

# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
# details.  The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>
# might also be helpful.
#
# Note that "restrict" applies to both servers and clients, so a configuration
# that might be intended to block requests from certain clients could also end
# up blocking replies from your own upstream servers.

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

# Clients from this (example!) subnet have unlimited access, but only if
# cryptographically authenticated.
#restrict 192.168.123.0 mask 255.255.255.0 notrust


# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255

# If you want to listen to time broadcasts on your local subnet, de-comment the
# next lines.  Please do this only if you trust everybody on the network!
#disable auth
#broadcastclient
localadmin@server1:~$

7、重启NTP服务:
localadmin@server1:~$ sudo service ntp restart
 * Stopping NTP server ntpd                                              [ OK ]
 * Starting NTP server ntpd                                              [ OK ]
localadmin@server1:~$

8、安装mysql-server:
localadmin@server1:~$ sudo apt-get install mysql-server python-mysqldb
在接下来的root密码确认中,本例输入了两次“123456”
然后修改mysql的bind-address,将其改成0.0.0.0,并重启mysql服务。

localadmin@server1:~$ sudo vi /etc/mysql/my.cnf
localadmin@server1:~$ sodo service mysql restart






******************************   keystone   *************************************
localadmin@server1:~$ sudo vi /etc/keystone/keystone.conf
localadmin@server1:~$ sudo service keystone restart
keystone stop/waiting
keystone start/running, process 15711
localadmin@server1:~$ sudo keystone-manage db_sync
localadmin@server1:~$ export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
localadmin@server1:~$ export SERVICE_TOKEN=admin
localadmin@server1:~$ keystone tenant-create --name admin
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | None                             |
| enabled     | True                             |
| id          | eedbbd34067f46e6a47122301f5a9ee9 |
| name        | admin                            |
+-------------+----------------------------------+
localadmin@server1:~$ keystone tenant-create --name service
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | None                             |
| enabled     | True                             |
| id          | a9b5e4cf02804dac8fb5ef9f2491533e |
| name        | service                          |
+-------------+----------------------------------+
localadmin@server1:~$
localadmin@server1:~$ keystone user-create --name admin --pass admin --email admin@foobar.com
+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property |                                                          Value                                                          |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email    | admin@foobar.com                                                                                                        |
| enabled  | True                                                                                                                    |
| id       | 09758dc348004bbcbe148a1dd9259b99                                                                                        |
| name     | admin                                                                                                                   |
| password | $6$rounds=40000$A5e8YUjukrp8dcou$iKKp0u7RTyVFxjF2sXcHcnf1M9YGP7UQV0u124ufTkL8f523VWtYWK08gOmLc0E4lPjWfJf2jgYrXpsQVm.kH. |
| tenantId | None                                                                                                                    |
+----------+-------------------------------------------------------------------------------------------------------------------------+
localadmin@server1:~$ keystone user-create --name nova --pass nova   --email nova@foobar.com
+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property |                                                          Value                                                          |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email    | nova@foobar.com                                                                                                         |
| enabled  | True                                                                                                                    |
| id       | 5a9b32098688403fa6db76b1b66d282c                                                                                        |
| name     | nova                                                                                                                    |
| password | $6$rounds=40000$oKfHA5oymDisoNGD$j1jSERMHOtwHij2C5S4otDwdnox0opHiVOBUwBF5RPNThxgXTFgqEgz80T5lvr4LIuO4oiSx1VCrMEtvIWcii1 |
| tenantId | None                                                                                                                    |
+----------+-------------------------------------------------------------------------------------------------------------------------+
localadmin@server1:~$ keystone user-create --name glance --pass glance   --email glance@foobar.com
+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property |                                                          Value                                                          |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email    | glance@foobar.com                                                                                                       |
| enabled  | True                                                                                                                    |
| id       | c525c1e363ec4ef6bcaf329bac378c9a                                                                                        |
| name     | glance                                                                                                                  |
| password | $6$rounds=40000$ROLObYXKC8kSMmJ1$gQGNK3cNOvbo4Nekp48/COj.5cQitg1hTi3Ur9L.YClMShfC3aKnybVR/ybYZa3QiOCQSFYuggrW.u6lY/JB40 |
| tenantId | None                                                                                                                    |
+----------+-------------------------------------------------------------------------------------------------------------------------+
localadmin@server1:~$ keystone user-create --name swift --pass swift   --email swift@foobar.com
+----------+-------------------------------------------------------------------------------------------------------------------------+
| Property |                                                          Value                                                          |
+----------+-------------------------------------------------------------------------------------------------------------------------+
| email    | swift@foobar.com                                                                                                        |
| enabled  | True                                                                                                                    |
| id       | de31da4c26ec4e32b1a0dddfd4242594                                                                                        |
| name     | swift                                                                                                                   |
| password | $6$rounds=40000$hC8rxm6qRaU29bCS$3u1Lby5iOmjt07lK.G.HZJh3Ab0Im3Yrfi/4n/p7OL7UAjIPLIDJtVclbHIVSlw7Ykv4lTo33ohUWkZ84rowE. |
| tenantId | None                                                                                                                    |
+----------+-------------------------------------------------------------------------------------------------------------------------+
localadmin@server1:~$
localadmin@server1:~$ keystone role-create --name admin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
| id       | eb150d45c71c459bba5515427f103e47 |
| name     | admin                            |
+----------+----------------------------------+
localadmin@server1:~$ keystone role-create --name Member
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
| id       | 9170bee284f14de1ad61e1b00f388636 |
| name     | Member                           |
+----------+----------------------------------+
localadmin@server1:~$
localadmin@server1:~$ keystone tenant-list
+----------------------------------+---------+---------+
|                id                |   name  | enabled |
+----------------------------------+---------+---------+
| a9b5e4cf02804dac8fb5ef9f2491533e | service | True    |
| eedbbd34067f46e6a47122301f5a9ee9 | admin   | True    |
+----------------------------------+---------+---------+
localadmin@server1:~$ keystone user-list
+----------------------------------+---------+-------------------+--------+
|                id                | enabled |       email       |  name  |
+----------------------------------+---------+-------------------+--------+
| 09758dc348004bbcbe148a1dd9259b99 | True    | admin@foobar.com  | admin  |
| 5a9b32098688403fa6db76b1b66d282c | True    | nova@foobar.com   | nova   |
| c525c1e363ec4ef6bcaf329bac378c9a | True    | glance@foobar.com | glance |
| de31da4c26ec4e32b1a0dddfd4242594 | True    | swift@foobar.com  | swift  |
+----------------------------------+---------+-------------------+--------+
localadmin@server1:~$ keystone role-list
+----------------------------------+--------+
|                id                |  name  |
+----------------------------------+--------+
| 9170bee284f14de1ad61e1b00f388636 | Member |
| eb150d45c71c459bba5515427f103e47 | admin  |
+----------------------------------+--------+
localadmin@server1:~$
localadmin@server1:~$ keystone user-role-add --user 09758dc348004bbcbe148a1dd9259b99 --role eb150d45c71c459bba5515427f103e47 --tenant_id eedbbd34067f46e6a47122301f5a9ee9
localadmin@server1:~$ keystone user-role-add --user 5a9b32098688403fa6db76b1b66d282c --role eb150d45c71c459bba5515427f103e47 --tenant_id a9b5e4cf02804dac8fb5ef9f2491533e
localadmin@server1:~$ keystone user-role-add --user c525c1e363ec4ef6bcaf329bac378c9a --role eb150d45c71c459bba5515427f103e47 --tenant_id a9b5e4cf02804dac8fb5ef9f2491533e
localadmin@server1:~$ keystone user-role-add --user de31da4c26ec4e32b1a0dddfd4242594 --role eb150d45c71c459bba5515427f103e47 --tenant_id a9b5e4cf02804dac8fb5ef9f2491533e
localadmin@server1:~$ keystone user-role-add --user 09758dc348004bbcbe148a1dd9259b99 --role 9170bee284f14de1ad61e1b00f388636 --tenant_id eedbbd34067f46e6a47122301f5a9ee9
localadmin@server1:~$ keystone service-create --name nova --type compute --description 'OpenStack Compute 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'+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | OpenStack Compute Service        |
| id          | 9585824540ef41389255dfd067e7f5c9 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+
localadmin@server1:~$ keystone service-create --name volume --type volume --description 'OpenStack Volume Service'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | OpenStack Volume Service         |
| id          | e80dacd3e70b470680964a2db26a2fc2 |
| name        | volume                           |
| type        | volume                           |
+-------------+----------------------------------+
localadmin@server1:~$ keystone service-create --name glance --type image --description 'OpenStack Image Service'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | OpenStack Image Service          |
| id          | 4bd9e223e4b5499293e5dfc576aed5c4 |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+
localadmin@server1:~$ keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | OpenStack Storage Service        |
| id          | d9135dfee297423d9709949ddb8ff784 |
| name        | swift                            |
| type        | object-store                     |
+-------------+----------------------------------+
localadmin@server1:~$ keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | OpenStack Identity Service       |
| id          | 133793c8df604ea1b7849439faae4553 |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+
localadmin@server1:~$ keystone service-create --name ec2 --type ec2 --description 'EC2 Service'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | EC2 Service                      |
| id          | a234e9950dab4bdfaf974c52809c9b36 |
| name        | ec2                              |
| type        | ec2                              |
+-------------+----------------------------------+
localadmin@server1:~$ keystone service-list
+----------------------------------+----------+--------------+----------------------------+
|                id                |   name   |     type     |        description         |
+----------------------------------+----------+--------------+----------------------------+
| 133793c8df604ea1b7849439faae4553 | keystone | identity     | OpenStack Identity Service |
| 4bd9e223e4b5499293e5dfc576aed5c4 | glance   | image        | OpenStack Image Service    |
| 9585824540ef41389255dfd067e7f5c9 | nova     | compute      | OpenStack Compute Service  |
| a234e9950dab4bdfaf974c52809c9b36 | ec2      | ec2          | EC2 Service                |
| d9135dfee297423d9709949ddb8ff784 | swift    | object-store | OpenStack Storage Service  |
| e80dacd3e70b470680964a2db26a2fc2 | volume   | volume       | OpenStack Volume Service   |
+----------------------------------+----------+--------------+----------------------------+
localadmin@server1:~$sudo apt-get install glance glance-api glance-client glance-common glance-registry python-glance

localadmin@server1:~$ sudo vi /etc/glance/glance-api.conf
localadmin@server1:~$ sudo vi /etc/glance/glance-api-paste.ini
localadmin@server1:~$ sudo vi /etc/glance/glance-registry-paste.ini
localadmin@server1:~$ sudo vi /etc/glance/glance-registry.conf
localadmin@server1:~$ sudo vi /etc/glance/glance-api.conf
localadmin@server1:~$ sudo glance-manage version_control 0
localadmin@server1:~$ sudo 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)
localadmin@server1:~$
localadmin@server1:~$ sudo restart glance-api
glance-api start/running, process 16615
localadmin@server1:~$ sudo restart glance-registry
glance-registry start/running, process 16635
localadmin@server1:~$ export SERVICE_TOKEN=admin
localadmin@server1:~$ export OS_TENANT_NAME=admin
localadmin@server1:~$ export OS_USERNAME=admin
localadmin@server1:~$ export OS_PASSWORD=admin
localadmin@server1:~$ export OS_AUTH_URL="http://localhost:5000/v2.0/"
localadmin@server1:~$ export SERVICE_ENDPOINT=http://localhost:35357/v2.0
localadmin@server1:~$ glance index
localadmin@server1:~$ echo $?
0
localadmin@server1:~$



localadmin@server1:~$ sudo chown -R nova:nova /etc/nova
localadmin@server1:~$ sudo chmod 644 /etc/nova/nova.conf
localadmin@server1:~$ sudo vi /etc/nova/api-paste.ini
localadmin@server1:~$ sudo nova-manage db sync
2012-07-04 17:49:29 DEBUG nova.utils [-] backend <module 'nova.db.sqlalchemy.migration' from '/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/migration.pyc'> from (pid=1302) __get_backend /usr/lib/python2.7/dist-packages/nova/utils.py:658
2012-07-04 17:50:46 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-04 17:50:46 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-04 17:50:46 AUDIT nova.db.sqlalchemy.fix_dns_domains [-] Applying database fix for Es*** dns_domains table.
localadmin@server1:~$
localadmin@server1:~$ export OS_TENANT_NAME=admin
localadmin@server1:~$ export OS_USERNAME=admin
localadmin@server1:~$ export OS_PASSWORD=admin
localadmin@server1:~$ export OS_AUTH_URL="http://localhost:5000/v2.0/"
localadmin@server1:~$ sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-jectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart nova-consoleauth;
libvirt-bin start/running, process 22987
nova-network start/running, process 1514
nova-compute start/running, process 1524
nova-api start/running, process 1533
restart: Unknown job: nova-jectstore
nova-scheduler start/running, process 1544
restart: Unknown instance:
nova-consoleauth start/running, process 1559

localadmin@server1:~$ sudo nova-manage service list
2012-07-04 17:53:20 DEBUG nova.utils [req-054484fc-ba70-494a-b932-b1760592096b None None] backend <module 'nova.db.sqlalchemy.api' from '/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/api.pyc'> from (pid=1683) __get_backend /usr/lib/python2.7/dist-packages/nova/utils.py:658
Binary           Host                                 Zone             Status     State Updated_At
nova-consoleauth server1                              nova             enabled    :-)   2012-07-04 09:53:16
nova-compute     server1                              nova             enabled    :-)   2012-07-04 09:53:10
nova-scheduler   server1                              nova             enabled    :-)   2012-07-04 09:53:17
nova-network     server1                              nova             enabled    :-)   2012-07-04 09:53:17
localadmin@server1:~$
localadmin@server1:~$ sudo apt-get install openstack-dashboard
localadmin@server1:~$ sudo service apache2 restart
 * Restarting web server apache2                                                                                                         apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting .apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
                                                                                                                                  [ OK ]
localadmin@server1:~$



***************************   swift   ****************************

localadmin@server1:~$ sudo apt-get install swift swift-proxy swift-account swift-container swift-object
localadmin@server1:~$ sudo apt-get install xfsprogs curl python-pastedeploy



《OpenStack Starter Guide for Ubuntu 12.04 -Compute, Object Storage (all-in-one), Image, and Identity services plus Dashboard官方教程翻译版


OpenStack云计算快速入门(1)


    

    该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装。我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解。我不是英语专业,我觉着搞技术最重要的就是理解,而不是四级和考研中那烦人的英译汉,所以我的目标是忠于原意、通俗表达,Over。英文原文在这里(http://docs.openstack.org/es@***/openstack-compute/starter/content/ ,请将ex@***中的@去掉,CU屏蔽的F词,下面步入正题:



第一部分 OpenStack及其构成简介



一、云计算


    云计算是一种计算模型,它将诸如运算能力、存储、网络和软件等资源抽象成为服务,以便让用户通过互联网远程享用,付费的形式也如同传统公共服务设施一样。因需而定、提供方便、动态改变和无限的虚拟化扩展能力是云计算的几个重要特征。

不同的“云”对应着不同的基础设施。下面是三种广义的“云”:

基础设施即服务(IaaS

平台即服务(PaaS

软件即服务(SaaS


译者注:Open为开放之意,Stack则是堆砌,OpenStack合起来如其名,就是许多Open的Softwares堆积的集合,但1 + 1 > 2,系统的功能更为强大。


二、OpenStack


(一)OpenStack概要


OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立、运行自己的云计算和存储设施。RackspaceNASA是最初重要的两个贡献者,前者提供了“云文件”平台代码,该平台增强了OpenStack对象存储部分的功能,而后者带来了“Nebula”平台形成了OpenStack其余的部分。而今,OpenStack基金会已经有150多个会员,包括很多知名公司如“CanonicalDELLCitrix”等。

以下是5OpenStack的重要构成部分:

Nova - 计算服务

Swift - 存储服务

Glance - 镜像服务

Keystone - 认证服务

Horizon - UI服务

1 OpenStack基本构架


下图展示了KeystoneDashboard二者与其它OpenStack部分的交互。



(二)OpenStack计算设施----Nova


NovaOpenStack计算的弹性控制器。OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。虽然Nova本身并不提供任何虚拟能力,但是它将使用libvirt API与虚拟机的宿主机进行交互。Nova通过Web服务API来对外提供处理接口,而且这些接口与AmazonWeb服务接口是兼容的。


功能及特点

实例生命周期管理

计算资源管理

网络与授权管理

基于RESTAPI

异步连续通信

支持各种宿主:XenXenServer/XCPKVMUMLVMware vSphereHyper-V


OpenStack计算部件

Nova弹性云包含以下主要部分:

API Servernova-api

消息队列(rabbit-mq server

运算工作站(nova-compute

网络控制器(nova-network

卷管理(nova-volume

调度器(nova-scheduler


API服务器(nova-api

API服务器提供了云设施与外界交互的接口,它是外界用户对云实施管理的唯一通道。通过使用web服务来调用各种EC2API,接着API服务器便通过消息队列把请求送达至云内目标设施进行处理。作为对EC2-api的替代,用户也可以使用OpenStack的原生API,我们把它叫做“OpenStack API”。


消息队列(Rabbit MQ Server

OpenStack内部在遵循AMQP(高级消息队列协议)的基础上采用消息队列进行通信。Nova对请求应答进行异步调用,当请求接收后便则立即触发一个回调。由于使用了异步通信,不会有用户的动作被长置于等待状态。例如,启动一个实例或上传一份镜像的过程较为耗时API调用就将等待返回结果而不影响其它操作,在此异步通信起到了很大作用,使整个系统变得更加高效。


运算工作站(nova-compute

    运算工作站的主要任务是管理实例的整个生命周期。他们通过消息队列接收请求并执行,从而对实例进行各种操作。在典型实际生产环境下,会架设许多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署。


网络控制器(nova-network

网络控制器处理主机的网络配置,例如IP地址分配,配置项目VLAN,设定安全群组以及为计算节点配置网络。


卷工作站(nova-volume

卷工作站管理基于LVM的实例卷,它能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。卷管理为何如此重要?因为它提供了一种保持实例持续存储的手段,比如当结束一个实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。

因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。


调度器(nova-scheduler

调度器负责把nova-API调用送达给目标。调度器以名为“nova-schedule”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。

目前nova调度器使用了几种基本的调度算法:

随机化:主机随机选择可用节点;

可用化:与随机相似,只是随机选择的范围被指定;

简单化:应用这种方式,主机选择负载最小者来运行实例。负载数据可以从别处获得,如负载均衡服务器。



(三)OpenStack镜像服务器----Glance

OpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统,我们可以将镜像存储到以下任意一种存储中:

本地文件系统(默认)

OpenStack对象存储

S3直接存储

S3对象存储(作为S3访问的中间渠道)

HTTP(只读)


功能及特点

提供镜像相关服务


Glance构件

Glance控制器

Glance注册器



(四)OpenStack存储设施----Swift


SwiftOpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web ServiceS3简单存储服务。Swift具有跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。


功能及特点

海量对象存储

大文件(对象)存储

数据冗余管理

归档能力-----处理大数据集

为虚拟机和云应用提供数据容器

处理流媒体

对象安全存储

备份与归档

良好的可伸缩性


Swift组件

Swift账户

Swift容器

Swift对象

Swift代理

Swift RING


Swift代理服务器

用户都是通过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。

此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求。


Swift对象服务器

对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)。

注意:xattr格式被Linux中的ext3/4XFSBtrfsJFSReiserFS所支持,但是并没有有效测试证明在XFSJFSReiserFSReiser4ZFS下也同样能运行良好。不过,XFS被认为是当前最好的选择。


Swift容器服务器

容器服务器将列出一个容器中的所有对象,默认对象列表将存储为SQLite文件(译者注:也可以修改为MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。

Swift账户服务器

账户服务器与容器服务器类似,将列出容器中的对象。


Ring(索引环)

Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,类似于查找及定位不同集群的实体真实物理位置的索引服务。这里所谓的实体指账户、容器、对象,它们都拥有属于自己的不同的Rings


(五)OpenStack认证服务(Keystone


Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工作,主要对(但不限于)SwiftGlanceNova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定。如下图所示:


Keystone采用两种授权方式,一种基于用户名/密码,另一种基于令牌(Token)。除此之外,Keystone提供以下三种服务:

l 令牌服务:含有授权用户的授权信息

目录服务:含有用户合法操作的可用服务列表

策略服务:利用Keystone具体指定用户或群组某些访问权限


认证服务组件

服务入口:如NovaSwiftGlance一样每个OpenStack服务都拥有一个指定的端口和专属的URL,我们称其为入口(endpoints)。


区位:在某个数据中心,一个区位具体指定了一处物理位置。在典型的云架构中,如果不是所有的服务都访问分布式数据中心或服务器的话,则也称其为区位。


用户:Keystone授权使用者

译者注:代表一个个体,OpenStack以用户的形式来授权服务给它们。用户拥有证书(credentials),且可能分配给一个或多个租户。经过验证后,会为每个单独的租户提供一个特定的令牌。[来源:http://blog.sina.com.cn/s/blog_70064f190100undy.html ]


服务:总体而言,任何通过Keystone进行连接或管理的组件都被称为服务。举个例子,我们可以称GlanceKeystone的服务。


角色:为了维护安全限定,就云内特定用户可执行的操作而言,该用户关联的角色是非常重要的。

译者注:一个角色是应用于某个租户的使用权限集合,以允许某个指定用户访问或使用特定操作。角色是使用权限的逻辑分组,它使得通用的权限可以简单地分组并绑定到与某个指定租户相关的用户。 


l 租间:租间指的是具有全部服务入口并配有特定成员角色的一个项目。

译者注:一个租间映射到一个Nova的“project-id”,在对象存储中,一个租间可以有多个容器。根据不同的安装方式,一个租间可以代表一个客户、帐号、组织或项目。



(六)OpenStack管理的Web接口----Horizon


Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。总之,Horizon具有如下一些特点:

实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等

访问与安全管理:创建安全群组,管理密匙对,设置浮动IP

偏好设定:对虚拟硬件模板可以进行不同偏好设定

镜像管理:编辑或删除镜像

查看服务目录

管理用户、配额及项目用途

用户管理:创建用户等

卷管理:创建卷和快照

对象存储处理:创建、删除容器和对象

为项目下载环境变量



分类: 云计算

OpenStack云计算----快速入门(2)


    该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装。



第二部分 OpenStack安装与配置


一、引言


本章内容讲解如何在3台物理机上搭建最小化云平台,这3台机器分为称为Server1Server2Client1,之后的各章也是如此。Server1承载着NovaGlanceSwiftKeystoneHorizonOpenStackWeb UI)服务。Server2只用来运行实例管理的nova运算工作站。由于OpenStack组件采用分布式结构,其中的任何一部分或几个部分都可以安装在任意服务器上。


Client1并不是安装所必须的,在本例中,它仅用来制作打包镜像,并使用它访问HorizonWeb上管理OpenStack设施。于是就避免了使用服务器来完成镜像打包等诸如此类的任务了,而且在制作桌面系统镜像时如果包含视窗界面的话,我们也只能相应地使用有GUI的电脑来完成,故而最好还是别在服务器上玩火了吧。建议Client1支持虚拟化技术,以便在制作完镜像打包时可以运行KVM



    OpenStack安装需要设定主机名、IP地址等,按你实际的环境进行配置。下表是译者安装的网络参数清单:


     以下是教程中网络设置参数,本教程均采用这些参数,但在实际安装中请参照上表进行设置

二、Server1


    正如上表所示,Server1包含了所有的Nova服务:nova-computenova-apinova-volumenova-network以及GlanceSwiftKeystoneHorizon。这台服务器上需要双网卡。


(一)安装底层OS


不必多想,请参照下述说明,记住相关参数,选择64Ubuntu12.04版,进行安装。

创建的第一个用户命名为“localadmin

eth0eth1设定IP及其相关参数

    在安装服务包中,仅选择“Openssh-server”作为预装项


因为Server1上也将安装nova-volume软件,而nova-volume需要一块专用分区,所以在安装Ubuntu Server时请选择手动分区,并另行创建一块合适大小的分区。从本章起,教程都将以/dev/sda6作为这块分区。你可以根据自己分区的实际情况进行修改。此外,请使用fdisk工具将该分区需要格式化为LVM8e)格式,这一操作在安装中或刚安装完毕格式化均可。进一步,如果你还计划在这台服务器上再新建一个分区配给Swift的话,那么就新建一块分区并参照本章后文“安装Swift”一节相关内容进行安装。

12.04的UbuntuOS安装完毕后 ,使用下列命令更新系统:

    sudo apt-get update

    sudo apt-get upgrade


安装网桥工具bridge-utils

sudo apt-get install bridge-utils


(二)配置网络


编辑/etc/network/interfaces文件,如下所示:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

  address 10.10.10.2

  netmask 255.255.255.0

  broadcast 10.10.10.255

  gateway 10.10.10.1

  dns-nameservers 10.10.8.3

auto eth1

iface eth1 inet static

  address 192.168.3.1

  netmask 255.255.255.0

  network 192.168.3.0

  broadcast 192.168.3.255


随后重新启动网络:

sudo /etc/init.d/networking restart


(三)NTP服务器


安装NTP软件包。这个时间服务器将为所有节点提供支持。OpenStack所有组件的时间都必须同步,于是我们就在Server1上安装NTP服务并且让其他服务器或节点与之保持同步。

    sudo apt-get install ntp

译者注:NTPNetwork 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文件中手工加入。


(四)数据库


我们有很多选择:MySQLPostgreSQL或者SQLite等都能很好地对NovaGlance提供数据支持。究竟选哪个,自己定吧。本例中采用MySQL


MySQL

安装mysql-serverpython-mysqldb包:

sudo apt-get install mysql-server python-mysqldb


mysql创建root密码,在此使用“mygreatsecret”。随后编辑mysql配置文件/etc/mysql/my.cnf,将绑定地址从127.0.0.1改为0.0.0.0,如下所示:

bind-address = 0.0.0.0


重启MySQL服务器让其开始监听所有端口:

sudo restart mysql


创建数据库

我们将要为novaglancekeystone创建很多东东,各种数据库、表及用户。话音未落,这就开始了:


创建名为“nova”的数据库:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'


新建一个用户,名为“novadbadmin”:

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'


授予novadbadmin用户nova数据库全部权限:

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"


novadbadmin同志创建密码(译者注:密码是novasecret,后文类似之处不多言,请详见命令):

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"


Glance登场,还是重复刚才的道道,首先创建一个名为glance的数据库:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'


然后为这个新建的数据库添加一个用户“glancedbadmin”:

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER glancedbadmin;'


接着,光荣授予他本数据库的全部权限:

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%';"


是的,最后一步,为该用户分配密码:

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'glancedbadmin'@'%' = PASSWORD('glancesecret');"


很烦的,keystone出场了。刚才的大循环,至此开始演绎第三遍:

sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'

sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'

sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"

sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret')"

现在,MySQL部分的工作结束。


(五)Keystone


KeystoneOpenStack的认证服务。使用以下命令进行安装:

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:keystonesecret@10.10.10.2/keystone


然后,重启Keystone

sudo service keystone restart


接着,执行以下命令同步数据库:

sudo keystone-manage db_sync


最后,有些环境变量是OpenStack运行所必须的:

export SERVICE_ENDPOINT="http://localhost:35357/v2.0"

export SERVICE_TOKEN=admin

当然为了避免下次系统重启后,还得将这些变量再次export,最稳妥的办法就是将其写入~/.bashrc中。


创建租间

使用以下命令创建两个租间,adminservice

keystone tenant-create --name admin

keystone tenant-create --name service


创建用户

执行以下命令,创建四个用户adminnovaglanceswift

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


创建角色

使用命令创建两个角色,adminMember译者注:注意是大写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-listkeystone role-listkeystone 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


HorizonSwift只“Member”角色即可,所以相应地执行如下命令:

keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd

注意,在执行自己的安装时,请千万按照实际安装中的id进行设置,照抄本文id必将出错!


创建服务

至此,我们该创建授权用户可以享用的服务了,命令格式如下:

keystone service-create --name service_name --type service_type --description 'Description of the service'


安装上述格式,创建nova-computenova-volumeglanceswiftkeystoneec2服务:

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://10.10.10.2:8774/v2/$(tenant_id)s' --adminurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --internalurl 'http://10.10.10.2:8774/v2/$(tenant_id)s'

使用如下命令创建nova-volume入口:

keystone endpoint-create --region myregion --service_id f38f4564ff7b4e43a52b2f5c1b75e5fa --publicurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --adminurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --internalurl 'http://10.10.10.2:8776/v1/$(tenant_id)s'

使用如下命令创建glance入口:

keystone endpoint-create --region myregion --service_id fbafab6edcab467bb734380ce6be3561 --publicurl 'http://10.10.10.2:9292/v1' --adminurl 'http://10.10.10.2:9292/v1' --internalurl 'http://10.10.10.2:9292/v1'


使用如下命令创建swift入口:

keystone endpoint-create --region myregion --service_id 96f35e1112b143e59d5cd5d0e6a8b22d --publicurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s' --adminurl 'http://10.10.10.2:8080/v1' --internalurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s'

使用如下命令创建keystone入口:

keystone endpoint-create --region myregion --service_id 7d4ec192dfa1456996f0f4c47415c7a7 --publicurl http://10.10.10.2:5000/v2.0 --adminurl http://10.10.10.2:35357/v2.0 --internalurl http://10.10.10.2:5000/v2.0

使用如下命令创建ec2入口:

keystone endpoint-create --region myregion --service_id 28fd92ffe3824004996a3e04e059d875 --publicurl http://10.10.10.2:8773/services/Cloud --adminurl http://10.10.10.2:8773/services/Admin --internalurl http://10.10.10.2:8773/services/Cloud


(六)Glance


使用以下命令安装glance

sudo apt-get install glance glance-api glance-client glance-common glance-

registry python-glance


配置Glance服务

Glance默认使用SQLiteMySQLPostgreSQL也可以很好地与Glance工作。

打开 /etc/glance/glance-api-paste.ini文件并在末尾编辑如下内容:

admin_tenant_name = %SERVICE_TENANT_NAME%

admin_user = %SERVICE_USER%

admin_password = %SERVICE_PASSWORD%

这些值需要用刚才我们安装中的实际值进行替换,admin_tenant_name应该是“service”,admin_user这里是“glance”、admin_password是“glance”。


编辑完这三行应该是如下的样子:

admin_tenant_name = service

admin_user = glance

admin_password = glance


接着再打开 /etc/glance/glance-registry-paste.ini文件,也如上述操作一样在文件尾部进行同样的编辑。

然后,修改glance数据库连接为MySQL,编辑 /etc/glance/glance-registry.conf,找到“sql_connection =”这句作如下修改:

sql_connection = mysql://glancedbadmin:glancesecret@10.10.10.2/glance

紧接着还是这份文件,在底部增加如下设置,目的是让glance使用keystone授权:

[paste_deploy]

flavor = keystone


打开 /etc/glance/glance-api.conf文件,在文件末尾增加如下配置:

[paste_deploy]

flavor = keystone


MySQL数据库中创建glance schema,进行同步:

sudo glance-manage version_control 0

sudo glance-manage db_sync


上述改动全部完成后,重启glance-apiglance-registry服务:

sudo restart glance-api

sudo restart glance-registry


设置如下环境变量,你也可以将其写入 ~/.bashrc中:

export SERVICE_TOKEN=admin

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://localhost:5000/v2.0/"

export SERVICE_ENDPOINT=http://localhost:35357/v2.0


现在我们可以使用这个命令来测试glance是否正确安装:

glance index

如果这条命令没有返回任何结果,则说明glance已经正确安装完毕,并与Keystone正常通信。若是稍微探究一下的话,上述命令其实有返回值,正确安装情况下的返回值是0,可以使用echo $?进行查看。


Glance正确配置且使用keystone作为授权机制后,我们便可以上传镜像到glance了,相关内容详见后文中的“镜像管理(Image Management)”。


(七)Nova


先使用如下命令安装nova及其相关组件:

sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth


配置Nova

以如下配置为例,编辑nova主配文件 /etc/nova/nova.conf

--dhcpbridge_flagfile=/etc/nova/nova.conf

--dhcpbridge=/usr/bin/nova-dhcpbridge

--logdir=/var/log/nova

--state_path=/var/lib/nova

--lock_path=/run/lock/nova

--allow_admin_api=true

--use_deprecated_auth=false

--auth_strategy=keystone

--scheduler_driver=nova.scheduler.simple.SimpleScheduler

--s3_host=10.10.10.2

--ec2_host=10.10.10.2

--rabbit_host=10.10.10.2

--cc_host=10.10.10.2

--nova_url=http://10.10.10.2:8774/v1.1/

--routing_source_ip=10.10.10.2

--glance_api_servers=10.10.10.2:9292

--image_service=nova.image.glance.GlanceImageService

--iscsi_ip_prefix=192.168.4

--sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova

--ec2_url=http://10.10.10.2:8773/services/Cloud

--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens

--api_paste_config=/etc/nova/api-paste.ini

--libvirt_type=kvm

--libvirt_use_virtio_for_bridges=true

--start_guests_on_host_boot=true

--resume_guests_state_on_host_boot=true

# vnc specific configuration

--novnc_enabled=true

--novncproxy_base_url=http://10.10.10.2:60

--vncserver_proxyclient_address=10.10.10.2

--vncserver_listen=10.10.10.2

# network specific settings

--network_manager=nova.network.manager.FlatDHCPManager

--public_interface=eth0

--flat_interface=eth1

--flat_network_bridge=br100

--fixed_range=192.168.4.1/27

--floating_range=10.10.10.2/27

--network_size=32

--flat_network_dhcp_start=192.168.4.33

--flat_injected=False

--force_dhcp_release

--iscsi_helper=tgtadm

--connection_type=libvirt

--root_helper=sudo nova-rootwrap

--verbose


创建一个物理卷:

sudo pvcreate /dev/sda6


创建一个名为“nova-volumnes”的卷组:

sudo vgcreate nova-volumes /dev/sda6


修改 /etc/nova文件夹的属主及 /etc/nova/nova.conf文件的访问权限:

sudo chown -R nova:nova /etc/nova

sudo chmod 644 /etc/nova/nova.conf

进入 /etc/nova/api-paste.ini文件,找到末尾三行:

admin_tenant_name = %SERVICE_TENANT_NAME%

admin_user = %SERVICE_USER%

admin_password = %SERVICE_PASSWORD%


用之前创建的名字进行替换(译者注:和Glance如出一辙,只是这次是nova),编辑完毕如下所示:

admin_tenant_name = service

admin_user = nova

admin_password = nova


仍然在MySQL数据库进行同步:

sudo nova-manage db sync


为实例提供IP池:

sudo nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32 


输出环境变量:

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://localhost:5000/v2.0/"


重启nova服务:

sudo restart libvirt-bin; sudo restart nova-network; sudo restart nova-compute; sudo restart nova-api; sudo restart nova-objectstore; sudo restart nova-scheduler; sudo restart nova-volume; sudo restart nova-consoleauth;


执行下列命令测试nova是否正确安装:

sudo nova-manage service list

Binary           Host          Zone         Status     State    Updated_At

nova-network     server1       nova         enabled    :-)   2012-04-20 08:58:43

nova-scheduler   server1       nova         enabled    :-)   2012-04-20 08:58:44

nova-volume      server1       nova         enabled    :-)   2012-04-20 08:58:44

nova-compute     server1       nova         enabled    :-)   2012-04-20 08:58:45

nova-cert        server1       nova         enabled    :-)   2012-04-20 08:58:43


若所有组件都是微笑,说明nova已经正确安装完毕。

(八)OpenStack管理面板


执行下列命令安装管理面板:

sudo apt-get install openstack-dashboard


重启Apache

sudo service apache2 restart


好消息,现在打开浏览器输入server1IP地址,就可以看到OpenStack的管理面板登陆界面了。默认用户名和密码都是“admin”。在管理面板中,可以进行创建密匙对,创建、编辑安全群组,新建实例,添加卷等操作。具体内容详见后文“OpenStack Dashboard”章节。

(九)Swift


安装Swift

最重要的部分是swift的代理、账户、容器及对象服务器:

sudo apt-get install swift swift-proxy swift-account swift-container swift-object


随后安装一些支持组件,xfsprogs(支持XFS文件系统)、python.pastedeploy(访问keystone)和curl(测试swift):

sudo apt-get install xfsprogs curl python-pastedeploy


Swift存储端

有两种方法来创建或制备存储端,一种是采用现有的分区或卷作为存储设备,另一种是创建环回文件(Loopback file)并将当做存储设备。安装时,两种方式自选。


    1. 分区作为存储设备

如果在安装OS时为Swift预留了一个分区,你就可以直接使用它。如果该分区没有使用过或仍是空闲空间(比如 /dev/sdb3),就应该把它格式化为xfs文件系统,接着编辑 /etc/fstab中该分区的挂载点(注意:请根据实际情况选择你自定的设备,本教程假定手头未使用也没分区的空闲空间在 /dev/sdb上):

sudo fdisk /dev/sdb

    Type n for new partition

    Type e for extended partion

    Choose appropriate partition number ( or go with the default )

    Choose first and last sectors to set the hard disk size (or go with defaults)

    Note that 83 is the partition type number for Linux

    Type w to write changes to the disk 


上述命令将创建一个譬如 /dev/sdb3的分区,接着我们便将其格式化为XFS。记得格式化前要先使用命令“sudo fdisk -l”查看当前分区表,确定系统列出的分区含有你即将格式化的目标分区。最后,如果刚才xfsprogs成功安装的话,我们才能够使用以下命令:

sudo mkfs.xfs -i size=1024 /dev/sdb3

sudo tune2fs -l /dev/sdb3 |grep -i inode


创建一个该分区的挂载点,并命名为“swift_backend”:

sudo mkdir /mnt/swift_backend


紧接着编辑 /etc/fstab文件写入如下内容以便系统启动时自动加载这个分区:

/dev/sdb3 /mnt/swift_backend xfs noatime,nodiratime,nobarrier,logbufs=8 0 0


2. 环回文件作为存储设备

创建一个空文件作为Swift存储的环回设备,在这里我们使用disk copy命令创建它并命名为swift-disk,还将为其分配1G的磁盘空间。如果空间不够,可以通过改变seek值来增加空间。随后格式化为XFS

sudo dd if=/dev/zero of=/srv/swift-disk bs=1024 count=0 seek=1000000

sudo mkfs.xfs -i size=1024 /srv/swift-disk

file /srv/swift-disk

swift-disk1: SGI XFS filesystem data (blksz 4096, inosz 1024, v2 dirs)


创建挂载点:

sudo mkdir /mnt/swift_backend


写入 /etc/fstab

/srv/swift-disk /mnt/swift_backend xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0


    3. 使用存储

挂载存储分区前,需要创建一些设备节点并设置其属主和主群为“Swift”:

sudo mount /mnt/swift_backend

pushd /mnt/swift_backend

sudo mkdir node1 node2 node3 node4

popd

sudo chown swift.swift /mnt/swift_backend/*

for i in {1..4}; do sudo ln -s /mnt/swift_backend/node$i /srv/node$i; done;

sudo mkdir -p /etc/swift/account-server /etc/swift/container-server /etc/

swift/object-server /srv/node1/device /srv/node2/device /srv/node3/device /srv/node4/device

sudo mkdir /run/swift

sudo chown -L -R swift.swift /etc/swift /srv/node[1-4]/ /run/swift


为了在系统启动时启动Swift服务,需要把如下两行命令写入 /etc/rc.local里,位置在“exit 0;”之前:

sudo mkdir /run/swift

sudo chown swift.swift /run/swift

配置远程备份

Rsync用来维护对象副本,许多swift服务都使用它保持对象一致性及进行更新操作。所有存储节点都将享用此配置:


首先编辑 /etc/default/rsync文件:

Set RSYNC_ENABLE=true


然后编辑 /etc/rsyncd.conf配置文件,如下所示:

# General stuff

uid = swift

gid = swift

log file = /var/log/rsyncd.log

pid file = /run/rsyncd.pid

address = 127.0.0.1


# Account Server replication settings

[account6012]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/account6012.lock


[account6022]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/account6022.lock


[account6032]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/account6032.lock


[account6042]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/account6042.lock


# Container server replication settings

[container6011]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/container6011.lock


[container6021]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/container6021.lock


[container6031]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/container6031.lock


[container6041]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/container6041.lock


# Object Server replication settings

[object6010]

max connections = 25

path = /srv/node1/

read only = false

lock file = /run/lock/object6010.lock


[object6020]

max connections = 25

path = /srv/node2/

read only = false

lock file = /run/lock/object6020.lock


[object6030]

max connections = 25

path = /srv/node3/

read only = false

lock file = /run/lock/object6030.lock


[object6040]

max connections = 25

path = /srv/node4/

read only = false

lock file = /run/lock/object6040.lock


最后重新启动服务完成rsync配置:

sudo service rsync restart

配置Swift组件

详细的配置选项参见http://swift.openstack.org/deployment_guide.html。如果安装了swift-doc包的话,则可以在/usr/share/doc/swift-doc/html目录下直接查看。Python使用paste.deploy管理配置。默认配置选项在[DEFAULT]段中,后面配置其它特殊项会覆盖默认段中的相关内容。格式如下:

THE SYNTAX set option_name = value


以下是一份paste.deploy的配置样例,仅供参考:

[DEFAULT]

name1 = globalvalue

name2 = globalvalue

name3 = globalvalue

set name4 = globalvalue


[pipeline:main]

pipeline = myapp


[app:myapp]

use = egg:mypkg#myapp

name2 = localvalue

set name3 = localvalue

set name5 = localvalue

name6 = localvalue


创建并编辑 /etc/swift/swift.conf文件,并写入如下配置:

[swift-hash]

# random unique string that can never change (DO NOT LOSE). I'm using 03c9f48da2229770. 

# od -t x8 -N 8 -A n < /dev/random

# The above command can be used to generate random a string.

swift_hash_path_suffix = 03c9f48da2229770


特别的,当建立更多的节点时,你需要记住随机串。不要照抄本例,请通过以下命令生成自己的随机字符串:

od -t x8 -N 8 -A n < /dev/random

1. 配置Swift代理服务器

代理服务器是swift的门卫,它的职责是检测合法性。它将审查:一、请求是否伪造,二、请求使用资源的用户身份。具体操作由keystone之类的认证服务器来协助完成。


创建并编辑 /etc/swift/proxy-server.conf并增加如下内容:

[DEFAULT]

bind_port = 8080

user = swift

swift_dir = /etc/swift


[pipeline:main]

# Order of execution of modules defined below

pipeline = catch_errors healthcheck cache authtoken keystone proxy-server


[app:proxy-server]

use = egg:swift#proxy

allow_account_management = true

account_autocreate = true

set log_name = swift-proxy

set log_facility = LOG_LOCAL0

set log_level = INFO

set access_log_name = swift-proxy

set access_log_facility = SYSLOG

set access_log_level = INFO

set log_headers = True

account_autocreate = True


[filter:healthcheck]

use = egg:swift#healthcheck


[filter:catch_errors]

use = egg:swift#catch_errors


[filter:cache]

use = egg:swift#memcache

set log_name = cache


[filter:authtoken]

paste.filter_factory = keystone.middleware.auth_token:filter_factory

auth_protocol = http

auth_host = 127.0.0.1

auth_port = 35357

auth_token = admin

service_protocol = http

service_host = 127.0.0.1

service_port = 5000

admin_token = admin

admin_tenant_name = service

admin_user = swift

admin_password = swift

delay_auth_decision = 0


[filter:keystone]

paste.filter_factory = keystone.middleware.swift_auth:filter_factory

operator_roles = admin, swiftoperator

is_admin = true

注意:可以使用apt-get安装swift-doc软件包,安装后许多文档都收录在/usr/share/doc/swift-doc/html下,本配置样例也是如此。

2. 配置Swift账户服务器

默认swift容器服务配置文件为 /etc/swift/account-server.conf

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2


[pipeline:main]

pipeline = account-server


[app:account-server]

use = egg:swift#account


[account-replicator]


[account-auditor]


[account-reaper]


所有的account server配置文件都在 /etc/swift/account-server目录中。与 /srv里的设备相对应,我们创建1.conf2.conf等等文件,并将它们放到/etc/swift/account-server/下。以下是/etc/swift/account-server/1.conf配置文件的内容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6012

user = swift

log_facility = LOG_LOCAL2


[pipeline:main]

pipeline = account-server


[app:account-server]

use = egg:swift#account


[account-replicator]

vm_test_mode = no


[account-auditor]


[account-reaper]


对其它设备也是如此,比如/srv/node2/srv/node3/srv/node4等,我们分别创建2.conf3.conf4.conf与之对应。现在利用1.conf进行复制生成其余文件,并一一设置唯一的绑定端口及本地日志值:

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/2.conf

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/3.conf

sudo cp /etc/swift/account-server/1.conf /etc/swift/account-server/4.conf

sudo sed -i 's/6012/6022/g;s/LOCAL2/LOCAL3/g;s/node1/node2/g' /etc/swift/account-server/2.conf

sudo sed -i 's/6012/6032/g;s/LOCAL2/LOCAL4/g;s/node1/node3/g' /etc/swift/account-server/3.conf

sudo sed -i 's/6012/6042/g;s/LOCAL2/LOCAL5/g;s/node1/node4/g' /etc/swift/account-server/4.conf

3. 配置Swift容器服务器

默认swift容器服务配置文件为 /etc/swift/container-server.conf

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2


[pipeline:main]

pipeline = container-server


[app:container-server]

use = egg:swift#container


[container-replicator]


[container-updater]


[container-auditor]


[container-sync]


account-server类似,我们同样创建 /etc/swift/container-server/1.conf等等文件与 /srv设备匹配,这是1.conf文件内容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6011

user = swift

log_facility = LOG_LOCAL2


[pipeline:main]

pipeline = container-server


[app:container-server]

use = egg:swift#container


[container-replicator]

vm_test_mode = no


[container-updater]


接着利用1.conf继续创建2.conf3.conf4.conf。并修改端口(分别是602160316041)及本地日志值(LOG_LOCAL3LOG_LOCAL4和 LOG_LOCAL5)。

4. 配置Swift对象服务器

默认swift容器服务配置文件为 /etc/swift/object-server.conf

[DEFAULT]

bind_ip = 0.0.0.0

workers = 2


[pipeline:main]

pipeline = object-server


[app:object-server]

use = egg:swift#object


[object-replicator]


[object-updater]


[object-auditor]


account-servercontainer-server一样,我们同样创建 /etc/swift/object-server/1.conf等等文件与 /srv设备匹配,这是1.conf文件内容:

[DEFAULT]

devices = /srv/node1

mount_check = false

bind_port = 6010

user = swift

log_facility = LOG_LOCAL2


[pipeline:main]

pipeline = object-server


[app:object-server]

use = egg:swift#object


[object-replicator]

vm_test_mode = no


[object-updater]


[object-auditor]


继而利用1.conf继续创建2.conf3.conf4.conf。并修改端口(分别是602060306040)及本地日志值(LOG_LOCAL3LOG_LOCAL4和 LOG_LOCAL5)。

5. 配置Swift Ring服务器

Ringswift的一个极为重要的组件,它维护着对象的真实物理位置信息,对象的副本及多种设备。创建与对象服务、容器服务和账户服务相对应的ring-builder文件:

pushd /etc/swift

sudo swift-ring-builder object.builder create 18 3 1

sudo swift-ring-builder container.builder create 18 3 1

sudo swift-ring-builder account.builder create 18 3 1

注意:执行以上命令时需要在 /etc/swift目录下。

命令中的参数指定了分区、副本和小时的数量,用来限制分区多次移动。可以参考man页面中的swift-ring-builder获取更多信息。


现在添加区域以均衡ring服务。命令格式如下:

swift-ring-builder <builder_file> add <zone>-<ip_address>:<port>/<device><weight>


执行下列命令:

sudo swift-ring-builder object.builder add z1-127.0.0.1:6010/device 1

sudo swift-ring-builder object.builder add z2-127.0.0.1:6020/device 1

sudo swift-ring-builder object.builder add z3-127.0.0.1:6030/device 1

sudo swift-ring-builder object.builder add z4-127.0.0.1:6040/device 1

sudo swift-ring-builder object.builder rebalance

sudo swift-ring-builder container.builder add z1-127.0.0.1:6011/device 1

sudo swift-ring-builder container.builder add z2-127.0.0.1:6021/device 1

sudo swift-ring-builder container.builder add z3-127.0.0.1:6031/device 1

sudo swift-ring-builder container.builder add z4-127.0.0.1:6041/device 1

sudo swift-ring-builder container.builder rebalance

sudo swift-ring-builder account.builder add z1-127.0.0.1:6012/device 1

sudo swift-ring-builder account.builder add z2-127.0.0.1:6022/device 1

sudo swift-ring-builder account.builder add z3-127.0.0.1:6032/device 1

sudo swift-ring-builder account.builder add z4-127.0.0.1:6042/device 1

sudo swift-ring-builder account.builder rebalance


启动Swift服务

使用以下命令启动swiftREST API

sudo swift-init main start

sudo swift-init rest start


测试Swift

可以通过Swift命令或Horizon提供的Web管理面板测试Swift是否正确运行。

首先,将 /etc/swift目录的属主设为swift.swift

sudo chown -R swift.swift /etc/swift


执行以下命令查看是否能得到正确的account、容器数量和存储的对象信息:

swift -v -V 2.0 -A http://127.0.0.1:5000/v2.0/ -U service:swift -K swift stat

StorageURL: http://127.0.0.1:8080/v1/AUTH_c7970080576646c6959ee35970cf3199

Auth Token: ba9df200a92d4a5088dcd6b7dcc19c0d

   Account: AUTH_c7970080576646c6959ee35970cf3199

Containers: 1

   Objects: 1

     Bytes: 77

Accept-Ranges: bytes

X-Trans-Id: tx11c64e218f984749bc3ec37ea46280ee



至此,Server1终于安装完毕!


三、Server2


Server2仅运行nova的运算服务。


(一)安装底层OS


安装64Ubuntu12.04服务器。


(二)配置网络


安装网桥软件:

sudo apt-get install bridge-utils


编辑 /etc/network/interfaces文件,如下所示:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

  address 10.10.10.3

  netmask 255.255.255.0

  broadcast 10.10.10.255

  gateway 10.10.10.1

  dns-nameservers 10.10.8.3

auto eth1

iface eth1 inet static

  address 192.168.3.2

  netmask 255.255.255.0

  network 192.168.3.0

  broadcast 192.168.3.255


重启网络:

sudo /etc/init.d/networking restart


(三)NTP客户端


安装NTP软件包:

sudo apt-get install ntp


编辑 /etc/ntp.conf文件,增加如下内容以同步至server1

server 10.10.10.2


重启NTP服务使配置生效:

sudo service ntp restart

(四)Nova组件(仅nova-compute


安装Nova及其依赖包:

sudo apt-get install nova-compute


如下所示,编辑 /etc/nova/nova.conf文件。该文件与Server1中的一致:

--dhcpbridge_flagfile=/etc/nova/nova.conf

--dhcpbridge=/usr/bin/nova-dhcpbridge

--logdir=/var/log/nova

--state_path=/var/lib/nova

--lock_path=/run/lock/nova

--allow_admin_api=true

--use_deprecated_auth=false

--auth_strategy=keystone

--scheduler_driver=nova.scheduler.simple.SimpleScheduler

--s3_host=10.10.10.2

--ec2_host=10.10.10.2

--rabbit_host=10.10.10.2

--cc_host=10.10.10.2

--nova_url=http://10.10.10.2:8774/v1.1/

--routing_source_ip=10.10.10.2

--glance_api_servers=10.10.10.2:9292

--image_service=nova.image.glance.GlanceImageService

--iscsi_ip_prefix=192.168.4

--sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova

--ec2_url=http://10.10.10.2:8773/services/Cloud

--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens

--api_paste_config=/etc/nova/api-paste.ini

--libvirt_type=kvm

--libvirt_use_virtio_for_bridges=true

--start_guests_on_host_boot=true

--resume_guests_state_on_host_boot=true

# vnc specific configuration

--novnc_enabled=true

--novncproxy_base_url=http://10.10.10.2:6080/vnc_auto.html

--vncserver_proxyclient_address=10.10.10.2

--vncserver_listen=10.10.10.2

# network specific settings

--network_manager=nova.network.manager.FlatDHCPManager

--public_interface=eth0

--flat_interface=eth1

--flat_network_bridge=br100

--fixed_range=192.168.4.1/27

--floating_range=10.10.10.2/27

--network_size=32

--flat_network_dhcp_start=192.168.4.33

--flat_injected=False

--force_dhcp_release

--iscsi_helper=tgtadm

--connection_type=libvirt

--root_helper=sudo nova-rootwrap

--verbose


重新启动Server2上的nova-compute服务:

sudo service restart nova-compute


利用如下命令测试云中第二个运算节点(即Server2)是否正常运行:

sudo nova-manage service list

Binary           Host          Zone         Status     State   Updated_At

nova-network     server1       nova         enabled    :-)   2012-04-20 08:58:43

nova-scheduler   server1       nova         enabled    :-)   2012-04-20 08:58:44

nova-volume      server1       nova         enabled    :-)   2012-04-20 08:58:44

nova-compute     server1       nova         enabled    :-)   2012-04-20 08:58:45

nova-cert        server1       nova         enabled    :-)   2012-04-20 08:58:43

nova-compute     server2       nova         enabled    :-)   2012-04-21 10:22:27

如果看到类似结果,则说明安装已经成功可以使用。

至此,Server2安装完毕!



三、Client1


(一)安装OS


安装64Ubuntu12.04桌面版。


(二)配置网络


如下所示,编辑 /etc/nova/nova.conf文件:

auto lo

 iface lo inet loopback

auto eth0

 iface eth0 inet static

 address 10.10.10.4

 netmask 255.255.255.0

 broadcast 10.10.10.255

 gateway 10.10.10.1

 dns-nameservers 10.10.8.3


(三)NTP客户端


安装NTP软件包:

sudo apt-get install -y ntp


编辑 /etc/ntp.conf文件,增加如下内容以同步至server1

server 10.10.10.2


重启NTP服务使配置生效:

sudo service ntp restart


(四)客户端工具

如前所述,Ubuntu12.04桌面版用来制作镜像,同样它也可以使用nvoaglanceswift命令行工具管理云。

使用下列命令安装我们需要的命令行工具:

sudo apt-get install python-novaclient glance-client swift


接着安装qemu-kvm

sudo apt-get install qemu-kvm


输入环境变量,并将其添加进 ~/.bashrc脚本中:

export SERVICE_TOKEN=admin

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL="http://10.10.10.2:5000/v2.0/"

export SERVICE_ENDPOINT=http://10.10.10.2:35357/v2.0


运行novaglance命令查看是否与OpenStack正常连接:

nova list

+--------------------------------------+------------+--------+----------------------+

|                  ID                  |    Name    | Status |      Networks  

      |

+--------------------------------------+------------+--------+----------------------+

| 25ee9230-6bb5-4eca-8808-e6b4e0348362 | myinstance | ACTIVE | private=192.

168.4.35 |

| c939cb2c-e662-46e5-bc31-453007442cf9 | myinstance1| ACTIVE | private=192.

168.4.36 |

+--------------------------------------+------------+--------+----------------------+

glance index

ID                                   Name          Disk     Container Size

                                                   Format   Format

------------------------------------ ------------------------------

 ----------------

65b9f8e1-cde8-40e7-93e3-0866becfb9d4 windows       qcow2    ovf      

 7580745728

f147e666-990c-47e2-9caa-a5a21470cc4e debian        qcow2    ovf      

 932904960

f3a8e689-02ed-460f-a587-dc868576228f opensuse      qcow2    ovf      

 1072300032

aa362fd9-7c28-480b-845c-85a5c38ccd86 centoscli     qcow2    ovf      

 1611530240

49f0ec2b-26dd-4644-adcc-2ce047e281c5 ubuntuimage   qcow2    ovf      

 1471807488


(五)管理面板


打开浏览器输入Server1IP地址,如:http://10.10.10.2,便进入管理面板的登陆页面。使用用户名“admin”和密码“admin”进行登陆来管理您刚建好的OpenStack吧。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值