三、开始安装OpenStack

1. 安装openstack compute程序

openstack@localhost:~$ sudo apt-get update
openstack@localhost:~$ sudo apt-get  -y install rabbitmq-server nova-api nova-objectstore nova-scheduler nova-network nova-compute nova-cert glance qemu unzip

所要安装程序的说明:

nova-compute: 用于运行虚拟机实例

nova-scheduler: 调度器,选择服务器执行运行虚拟机实例的请求

nova-api: 这个服务是用来生成操作OpenStack服务的请求,并传递给OpenStack,譬如,通知nova-api启动一个新的Nova实例

nova-network: 网络服务,用来控制DHCP、DNS和路由

nova-objectstore: 文件存储服务

nova-common: OpenStack环境的基础通用Python库

nova-cert: Nova认证管理服务,用于对Nova的鉴权

glance: 镜像注册和传输服务

rabbitmq-server: 消息队列服务

mysql-server: 数据库服务,保存像计算节点可用性、实例的运行状态等所有的OpenStack服务的数据

ntp: 网络时间服务,NTP协议(Network Time Protocol )是多节点环境中必要的保障,用来使节点保持相同的时间,大于5秒的误差,往往会带来不可预测的结果

dnsmasq: 提供DNS转发和DHCP服务,用于给实例指定地址

2. 安装ntp程序

openstack的多节点环境中需要时间和时间服务器保持同步。目前只有一个节点,可以为将来的扩展打下基础。

openstack@localhost:~$ sudo apt-get -y install  ntp

所安装程序的说明:

3. 配置ntp程序

3.1 备份ntp服务配置文件

openstack@localhost:~$ sudo cp -av /etc/ntp.conf{,.origin}
`/etc/ntp.conf' -> `/etc/ntp.conf.origin'
openstack@localhost:~$

3.2 重新配置ntp服务配置文件

openstack@localhost:~$  sed 's/\t//' <

        driftfile /var/lib/ntp/ntp.drift
        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
        restrict -4 default kod notrap nomodify nopeer noquery
        restrict -6 default kod notrap nomodify nopeer noquery
        # BEGIN
        #server
        server ntp.ubuntu.com
        server 127.127.1.0
        fudge 127.127.1.0 stratum 10
        # END
        restrict 127.0.0.1
        restrict ::1

EOF

3.3 重启动ntp服务

openstack@localhost:~$ sudo /etc/init.d/ntp restart
* Stopping NTP server ntpd                                         [ OK ]
* Starting NTP server ntpd                                         [ OK ]

4. 安装和配置mysql服务器

4.1 预配置mysql服务

这里使用debconf这个配置工具,关于debconf配置工具的使用可以访问:

Debian/Ubuntu无密码安装(apt)软件

http://www.cnc8.cn/debianubuntu%E6%97%A0%E5%AF%86%E7%A0%81%E5%AE%89%E8%A3%85apt%E8%BD%AF%E4%BB%B6/

openstack@localhost:~$ i
openstack@localhost:~$ sed 's/\t//' <        mysql-server-5.1 mysql-server/root_password password ${MYSQL_PASSWD}
        mysql-server-5.1 mysql-server/root_password_again password ${MYSQL_PASSWD}
        mysql-server-5.1 mysql-server/start_on_boot boolean true
EOF

4.2 安装mysql服务器

openstack@localhost:~$ sudo apt-get  -y install mysql-server

4.3 配置mysql服务器监听IP

同时备份原始文件

openstack@localhost:~$ sudo sed -i.origin 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf

4.4 重新启动mysql服务器

openstack@localhost:~$ sudo /etc/init.d/mysql restart

Rather than invoking init scripts through /etc/init.d, use the service(8)

utility, e.g. service mysql restart

Since the script you are attempting to invoke has been converted to an

Upstart job, you may also use the stop(8) and then start(8) utilities,

e.g. stop mysql ; start mysql. The restart(s8) utility is also available.

mysql stop/waiting

mysql start/running, process 12065

openstack@localhost:~$

4.5 添加nava数据库,并配置用于访问nova数据库的用户名和密码

openstack@localhost:~$ MYSQL_PASS=${MYSQL_PASS:-"openstack"}

openstack@localhost:~$ NOVA_MYSQL_USER=${NOVA_MYSQL_USER:-"nova"}

openstack@localhost:~$ NOVA_MYSQL_PASS=${NOVA_MYSQL_PASS:-"openstack"}

openstack@localhost:~$ mysql -uroot -p$MYSQL_PASS -e "DROP DATABASE IF EXISTS ${NOVA_MYSQL_USER};"

openstack@localhost:~$ mysql -uroot -p$MYSQL_PASS -e "CREATE DATABASE ${NOVA_MYSQL_USER};"

openstack@localhost:~$ mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON ${NOVA_MYSQL_USER}.* TO '${NOVA_MYSQL_USER}'@'%'"

openstack@localhost:~$ mysql -uroot -p$MYSQL_PASS -e "SET PASSWORD FOR '${NOVA_MYSQL_USER}'@'%' = PASSWORD('${NOVA_MYSQL_PASS}');"

4.6 检查前面配置是否成功

openstack@localhost:~$ mysql -uroot -p$MYSQL_PASS -e 'USE mysql;SELECT user,host,password FROM user'

OpenStack云计算口袋书-第一章-开始OpenStack之旅(三)_第1张图片

4.7 关于nova客户端的配置

稍后我们会在/etc/nova/nova.conf中添加--sql_connection配置项,如下

--sql_connection=mysql://nova:[email protected]/nova

具体的配置我们稍后再操作。

5. 配置openstack compute程序

5.1 配置/etc/nova/nova.conf

这是nova的主配配置文件,注意对于root以外的用户/etc/nova下的文件是不能读写的。

openstack@localhost:~$ sudo ls -l /etc/nova
total 24
-rw------- 1 nova nova 4260 Apr 23 06:38 api-paste.ini
-rw------- 1 nova nova   19 May 16 10:39 nova-compute.conf
-rw------- 1 nova nova  328 Apr 24 08:09 nova.conf
-rw------- 1 nova nova 4263 Apr 23 06:38 policy.json

5.1.1 备份nova.conf配置文件

openstack@localhost:~$ sudo cp -av /etc/nova/nova.conf{,.origin}

`/etc/nova/nova.conf' -> `/etc/nova/nova.conf.origin'

openstack@localhost:~$

5.1.2 重写配置文件

# 你的公网网卡地址

PUB_IP=${PUB_IP:-"172.16.0.1"}

# 你的私有网网卡地址

PRI_IP=${PRI_IP:-"10.0.0.1"}

# 重写你的配置文件

sed 's/^\t//' <

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

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

        --logdir=/var/log/nova

        --state_path=/var/lib/nova

        --lock_path=/var/lock/nova

        --force_dhcp_release

        --iscsi_helper=tgtadm

        --libvirt_use_virtio_for_bridges

        --connection_type=libvirt

        --root_helper=sudo nova-rootwrap

        --ec2_private_dns_show_ip

        --sql_connection=mysql://nova:[email protected]/nova

        --use_deprecated_auth

        --s3_host=172.16.0.1

        --rabbit_host=172.16.0.1

        --ec2_host=172.16.0.1

        --ec2_dmz_host=172.16.0.1

        --public_interface=eth1

        --image_service=nova.image.glance.GlanceImageService

        --glance_api_servers=172.16.0.1:9292

        --auto_assign_floating_ip=true

        --scheduler_default_filters=AllHostsFilter

EOF

# 如果有自定义网络地址的需要建议使用下面类似的语法修改配置文件

#sudo sed -i.$(date +%F-%H%M) -r 's|^(.*--sql_connection=).*$|\1'"${NOVA_MYSQL_USER}:${NOVA_MYSQL_PASS}@${PUB_IP}/${NOVA_MYSQL_USER}"'|p' /etc/nova/nova.conf

#其它修改语句

上面的命令是为了可以自定义脚本而精心构造的。

关于配置项的解释可查阅,OpenStack云计算口袋书的第15页。

5.1.3 修改nova-compute.conf配置文件

默认使用qemu,建议在虚拟机中安装openstack的时候使用qemu,实际中只要硬件支持硬件辅助虚拟化,这里使用kvm理论上也是可行的。建议使用qemu。

openstack@localhost:~$ LIBVIRT_TYPE=${LIBVIRT_TYPE:-"qemu"}

修改配置项--libvirt_type=kvm 为 --libvirt_type=qemu

openstack@localhost:~$ sudo sed -i.origin -r 's|^(.*--libvirt_type=).*$|\1'"${LIBVIRT_TYPE}"'|' /etc/nova/nova-compute.conf

5.1.4 初始化nova数据库

openstack@localhost:~$ sudo nova-manage db sync
2013-09-14 22:02:30 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)
2013-09-14 22:02:30 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)
2013-09-14 22:02:30 AUDIT nova.db.sqlalchemy.fix_dns_domains [-] Applying database fix for Essex dns_domains table.

这个步骤,会有警告信息,没有大的影响。

6. 配置nova网络

6.2 配置虚拟机的公有网络

这个网络是用来从客户端访问虚拟机实例用的。

openstack@localhost:~$ sudo nova-manage floating create --ip_range=172.16.1.0/24

操作后执行下面的命令验证一下:

openstack@localhost:~$ mysql -uroot -p${MYSQL_PASS} -e 'select * from nova.floating_ips limit 10'

OpenStack云计算口袋书-第一章-开始OpenStack之旅(三)_第2张图片

6.1 配置虚拟机的私有网络

这个网络是虚拟机实例之间相互通信使用的。

openstack@localhost:~$ sudo nova-manage network create vmnet --fixed_range_v4=10.0.0.0/8 --network_size=64 --bridge_interface=eth2

操作后执行下面的命令验证一下:

openstack@localhost:~$ mysql -uroot -p${MYSQL_PASS} -e 'select * from nova.networks \G'

OpenStack云计算口袋书-第一章-开始OpenStack之旅(三)_第3张图片

7. 重新启动nova

全部停止

openstack@localhost:~$ for i in  /etc/init.d/nova* /etc/init.d/libvirt-bin /etc/init.d/glance-* ; do sudo stop $(basename $i);done
nova-api stop/waiting
nova-cert stop/waiting
nova-compute stop/waiting
nova-network stop/waiting
nova-objectstore stop/waiting
nova-scheduler stop/waiting
libvirt-bin stop/waiting
glance-api stop/waiting
glance-registry stop/waiting

检查是否已经停止
for i in  /etc/init.d/nova* /etc/init.d/libvirt-bin /etc/init.d/glance-* ; do sudo status $(basename $i);done

重新启动
openstack@localhost:~$ for i in  /etc/init.d/nova* /etc/init.d/libvirt-bin /etc/init.d/glance-* ; do sudo start $(basename $i);done
nova-api start/running, process 13356
nova-cert start/running, process 13372
nova-compute start/running, process 13389
nova-network start/running, process 13405
nova-objectstore start/running, process 13421
nova-scheduler start/running, process 13439
libvirt-bin start/running, process 13461
glance-api start/running, process 13480
glance-registry start/running, process 13500

8. 添加nova管理账户和项目

在nova.conf中的--use_deprecated_auth这个参数的意思便是我们使用简单的验证方式。

在这里不使用Keystone,是由于KeyStone过于复杂,并不适合初学者用来测试或实验。附着学习地深入,以后会逐步讲到KeyStone。

8.1 添加管理角色

这一步骤在nova数据库初始化5.1.4中已经做过了。

8.2 添加用户

openstack@localhost:~$ sudo nova-manage user admin openstack
2013-09-14 22:49:23 AUDIT nova.auth.manager [-] Created user openstack (admin: True)
export EC2_ACCESS_KEY=0dc5aaf7-3c05-4426-98f6-34e03cf7dd65
export EC2_SECRET_KEY=e1c25d28-976d-4165-baab-4ed95488cdc0

8.3 用户绑定管理角色

openstack@localhost:~$ sudo nova-manage role add openstack cloudadmin

2013-09-14 22:51:20 AUDIT nova.auth.manager [-] Adding sitewide role cloudadmin to user openstack

openstack@localhost:~$

8.4 添加项目并绑定用户

openstack@localhost:~$ sudo nova-manage project create cookbook openstack
2013-09-14 22:53:05 AUDIT nova.auth.manager [-] Created project cookbook with manager openstack

8.4 使用Zipfile的方式传递认证文件

这个步骤是为了照顾虚拟机搭建openstack这种情况,就是nova会把认证文件压缩后,稍后再通过我们手工传输到客户机上来实现管理openstack的目的。

openstack@localhost:~$ sudo nova-manage project zipfile cookbook openstack
2013-09-14 22:58:49 WARNING nova.auth.manager [-] No *** data for project cookbook

已经生成
openstack@localhost:~$ ls
nova.zip