|
三、开始安装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/ //' <<eof |sudo="" tee="" etc="" ntp.conf[="" font][="" color][="" p][p="28," null,="" left]" 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% ... %E8%BD%AF%E4%BB%B6/
openstack@localhost:~$ i
openstack@localhost:~$ sed 's/ //' <<eof |="" sudo="" debconf-set-selections=""
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'
4.7 关于nova客户端的配置
稍后我们会在/etc/nova/nova.conf中添加--sql_connection配置项,如下
--sql_connection=mysql://nova:openstack@172.16.0.1/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/^ //' <<eof |sudo="" tee="" etc="" nova="" nova.conf[="" font][="" color][="" p][p="28," null,="" left]" --dhcpbridge_flagfile="/etc/nova/nova.conf
[p=28," --dhcpbridge="/usr/bin/nova-dhcpbridge
[p=28," --logdir="/var/log/nova
[p=28," --state_path="/var/lib/nova
[p=28," --lock_path="/var/lock/nova
[p=28," --force_dhcp_release[="" --iscsi_helper="tgtadm
[p=28," --libvirt_use_virtio_for_bridges[="" --connection_type="libvirt
[p=28," --root_helper="sudo" nova-rootwrap[="" --ec2_private_dns_show_ip[="" --sql_connection="mysql://nova:openstack@172.16.0.1/nova
[p=28," --use_deprecated_auth[="" --s3_host="172.16.0.1
[p=28," --rabbit_host="172.16.0.1
[p=28," --ec2_host="172.16.0.1
[p=28," --ec2_dmz_host="172.16.0.1
[p=28," --public_interface="eth1
[p=28," --image_service="nova.image.glance.GlanceImageService
[p=28," --glance_api_servers="172.16.0.1:9292
[p=28," --auto_assign_floating_ip="true
[p=28," --scheduler_default_filters="AllHostsFilter
[p=28," 如果有自定义网络地址的需要建议使用下面类似的语法修改配置文件[="" sed="" -i.$(date="" +%f-%h%m)="" -r="" 's|^(.*--sql_connection=").*$|'"${NOVA_MYSQL_USER}:${NOVA_MYSQL_PASS}@${PUB_IP}/${NOVA_MYSQL_USER}"'|p'" 修改nova-compute.conf配置文件[="" libvirt_type="${LIBVIRT_TYPE:-"qemu"}
[p=28," 为="" --libvirt_type="qemu
[p=28," sudo="" -i.origin="" 's|^(.*--libvirt_type=").*$|'"${LIBVIRT_TYPE}"'|'" nova-compute.conf[="" 初始化nova数据库[="" 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'
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'
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 vpn data for project cookbook
已经生成
openstack@localhost:~$ ls
nova.zip
|
|