三、开始安装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 EOF 3.3 重启动ntp服务 openstack@localhost:~$ sudo /etc/init.d/ntp restart 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 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:[email protected]/nova 具体的配置我们稍后再操作。 5. 配置openstack compute程序 5.1 配置/etc/nova/nova.conf 这是nova的主配配置文件,注意对于root以外的用户/etc/nova下的文件是不能读写的。 openstack@localhost:~$ sudo ls -l /etc/nova 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 这个步骤,会有警告信息,没有大的影响。 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 检查是否已经停止 重新启动 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 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 8.4 使用Zipfile的方式传递认证文件 这个步骤是为了照顾虚拟机搭建openstack这种情况,就是nova会把认证文件压缩后,稍后再通过我们手工传输到客户机上来实现管理openstack的目的。 openstack@localhost:~$ sudo nova-manage project zipfile cookbook openstack 已经生成
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
* Stopping NTP server ntpd [ OK ]
* Starting NTP server ntpd [ OK ]
openstack@localhost:~$ sed 's/\t//' <
mysql-server-5.1 mysql-server/root_password_again password ${MYSQL_PASSWD}
mysql-server-5.1 mysql-server/start_on_boot boolean true
EOF
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
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.
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
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
2013-09-14 22:53:05 AUDIT nova.auth.manager [-] Created project cookbook with manager openstack
2013-09-14 22:58:49 WARNING nova.auth.manager [-] No *** data for project cookbook
openstack@localhost:~$ ls
nova.zip