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:[email protected]/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 [email protected] 

keystone user-create --name nova --pass nova   --email [email protected]

keystone user-create --name glance --pass glance   --email [email protected]

keystone user-create --name swift --pass swift   --email [email protected]

创建角色

使用命令创建两个角色,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    | [email protected]  | swift  |

| 518b51ea133c4facadae42c328d6b77b | True    | [email protected] | glance |

| b3de3aeec2544f0f90b9cbfe8b8b7acd | True    | [email protected]  | admin  |

| ce8cd56ca8824f5d845ba6ed015e9494 | True    | [email protected]   | 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 p_w_picpath --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   | p_w_picpath        | 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:[email protected]/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

--p_w_picpath_service=nova.p_w_picpath.glance.GlanceImageService

--iscsi_ip_prefix=192.168.4

--sql_connection=mysql://novadbadmin:[email protected]/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已经正确安装完毕。