#安装openstack计算服务
登录到之前创建的controller节点,在上面安装所需软件包
vagrant@controller:/$ sudo apt-get -y install rabbitmq-server nova-api nova-conductor nova-scheduler nova-objectstore dnsmasq
对于多节点来说,必须依赖ntp来同步服务器之间的时间,下面来安装和配置ntp
sudo apt-get -y install ntp
编辑/etc/ntp.conf
内容如下
server ntp.ubuntu.com
server 127.127.1.0
fudge 127.127.1.0 stratum 10
其中127.127.1.0是一个特殊的地址,表示ntp主服务器是与自身的系统时钟同步,fudge 127.127.1.0 stratum 10
的作用是当联网时,将使用那些stratum值低于10的网络服务器,断网时使用10(这个值越高,优先级越低?)
然后重启sudo service ntp restart
接下来回到我们的物理机,用virtual box和vagrant创建一个虚拟机作为compute节点。编辑Vagrantfile
文件如下:
#_*_ mode: ruby _*_
#vi:set ft=ruby :
nodes={
'controller' =>[1,200],
'compute' => [1,201],
}
Vagrant.configure("2") do |config|
config.vm.box="/root/vagrant/box/precise64.box"
#Forescout NAC workaround
config.vm.usable_port_range=2800..2900
nodes.each do |prefix, (count, ip_start)|
count.times do |i|
hostname="%s" % [prefix,(i+1)]
config.vm.define "#{hostname}" do |box|
box.vm.hostname="#{hostname}.book"
box.vm.network:"private_network",ip:
"172.16.0.#{ip_start+i}",:netmask=>"255.255.0.0"
box.vm.network:"private_network",ip:
"10.10.0.#{ip_start+i}",:netmask=>"255.255.0.0"
#Otherwise using VirtualBox
box.vm.provider :virtualbox do |vbox|
#Defaults
vbox.customize ["modifyvm",:id,"--memory",1024]
if prefix == "compute"
vbox.customize ["modifyvm",:id,"--memory",3172]
vbox.customize ["modifyvm",:id,"--cpus",2]
end
end
end
end
end
end
使用vagrnat up compute
启动这个虚拟机,并且使用vagrant ssh compute
登录到此虚拟机,参考这里设置该服务器上的Ubuntu Cloud Archive
,然后安装必要的软件包:
sudo apt-get -y install nova-compute nova-network nova-api-metadata nova-compute-qemu
在controller中进行下面的操作
新建一个nova
数据库,为其创建用户并分配必要的权限
vagrant@controller:~$ MYSQL_ROOT_PASS=openstack
vagrant@controller:~$ mysql -uroot -p$MYSQL_ROOT_PASS -e 'create database nova;'
vagrant@controller:~$ MYSQL_NOVA_PASS=openstack
vagrant@controller:~$ mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on nova.* to 'nova'@'%' IDENTIFIED BY '${MYSQL_NOVA_PASS}';"
vagrant@controller:~$ mysql -uroot -p$MYSQL_ROOT_PASS -e "grant all privileges on nova.* to 'nova'@'localhost' IDENTIFIED BY '${MYSQL_NOVA_PASS}';"
在配置文件/etc/nova/nova.conf
中添加如下配置
sql_connection=mysql://nova:openstack@172.16.0.200/nova
进一步编辑controller中/etc/nova/nova.conf
文件如下
[DEFAULT]
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
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf
verbose=True
api_paste_config=/etc/nova/api-paste.ini
keystone_ec2_url=http://172.16.0.200:5000/v2.0/ec2tokens
#volumes_path=/var/lib/nova/volumes
enabled_apis=ec2,osapi_compute,metadata
#Libvirt and Virtualization
libvirt_use_virtio_for_bridges=True
connection_type=libvirt
libvirt_type=qemu
#Database
sql_connection=mysql://nova:openstack@172.16.0.200/nova
#Messaging
rabbit_host=172.16.0.200
#EC2 API Flags
ec2_host=172.16.0.200
ec2_dmz_host=172.16.0.200
ec2_private_dns_show_ip=True
#Networking
public_interface=eth1
force_dhcp_release=True
auto_assign_floating_ip=True
#Images
image_service=nova.image.glance.GlanceImageService
glance_api_servers=172.16.0.200:9292
#Scheduler
scheduler_default_filters=AllHostsFilter
#Object Storage
iscsi_helper=tgtadm
#Auth
auth_strategy=keystone
然后在计算节点上同样的配置/etc/nova/nova.conf
root@paradise:~/cookbook# vagrant ssh compute
然后将文件中配置为和controller中的内容一样。
然后在任意一个客户端中执行命令sudo nova-manage db sync
来确保数据库拥有正确的表结构,并且填入正确的初始数据信息。
继续创建openstack计算服务实例内部的私有网络
sudo nova-manage network create privateNet --fixed_range_v4=10.0.10.0/24 --network_size=64 --bridge_interface=eth2
由于在nova.conf
文件中通过定义auto_assign_floating_ip=True
使得实例启动时可以自动分配到一个浮动ip地址,因此需要设置一个共有网络地址空间供给openstack计算实例
sudo nova-manage floating create --ip_range=172.16.10.0/24
在controller和compute中修改/etc/nova/api-paste.ini
文件中的[filter:authtoken]
部分如下
[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
service_protocol=http
service_host=172.16.0.200
service_port=5000
auth_host = 172.16.0.200
auth_port = 35357
auth_protocol = http
auth_uri= http://172.16.0.200:5000/
admin_tenant_name = service
admin_user = nova
admin_password = nova
# signing_dir is configurable, but the default behavior of the authtoken
# middleware should be sufficient. It will create a temporary directory
# in the home directory for the user the nova process is running as.
#signing_dir = /var/lib/nova/keystone-signing
# Workaround for https://bugs.launchpad.net/nova/+bug/1154809
auth_version = v2.0
在compute和controller节点上通过ls /etc/init/nova-*|cut -d '/' -f4|cut -d '.' -f1 |while read S;do sudo stop $S;sudo start $S;done
重启openstack计算服务。
或者使用以下命令来重启这些服务
vagrant@controller:~$ sudo stop nova-api
vagrant@controller:~$ sudo stop nova-scheduler
vagrant@controller:~$ sudo stop nova-objectstore
vagrant@controller:~$ sudo stop nova-conductor
vagrant@compute:~$ sudo stop nova-compute
vagrant@compute:~$ sudo stop nova-network
vagrant@compute:~$ sudo stop libvirt-bin
vagrant@controller:~$ sudo start nova-api
vagrant@controller:~$ sudo start nova-scheduler
vagrant@controller:~$ sudo start nova-objectstore
vagrant@controller:~$ sudo start nova-conductor
vagrant@compute:~$ sudo start nova-compute
vagrant@compute:~$ sudo start nova-network
vagrant@compute:~$ sudo start libvirt-bin
使用命令root@paradise:~# apt-get -y install python-novaclient
安装nova客户端。
检查openstack计算服务
使用vagrant@controller:~$ sudo nova-manage service list
命令来检查openstack计算主机是否运行正常。
使用下面的命令检查glance
vagrant@controller:~$ ps -ef|grep glance
vagrant@controller:~$ netstat -ant |grep 9292.*LISTEN
使用vagrant@controller:~$ sudo rabbitmqctl status
检查rabbitmq的状态,使用vagrant@controller:~$ ntpq -p
检查ntp的状态,使用vagrant@controller:~$ mysqladmin -uroot -popenstack status
检查mysql的状态。
#使用openstack计算服务
##管理安全组
在客户机上进行下面的配置
root@paradise:~# export OS_TENANT_NAME=cookbook
root@paradise:~# export OS_USERNAME=admin
root@paradise:~# export OS_PASSWORD=openstack
root@paradise:~# export OS_AUTH_URL=http://172.16.0.200:5000/v2.0/
root@paradise:~# export OS_NO_CACHE=1
###向安全组中添加规则
下面的命令将80和443端口的tcp权限开放给名为webserver的安全组
root@paradise:~# nova secgroup-create webserver "Web Server Access"
root@paradise:~# nova secgroup-add-rule webserver tcp 80 80 0.0.0.0/0
root@paradise:~# nova secgroup-add-rule webserver tcp 443 443 0.0.0.0/0
###从安全组中删除规则
root@paradise:~# nova secgroup-delete-rule webserver tcp 443 443 0.0.0.0/0
###删除安全组
root@paradise:~# nova secgroup-delete webserver
##管理密钥对
###创建密钥对
root@paradise:~# nova keypair-add myKey > myKey.pem
root@paradise:~# chmod 0600 myKey.pem
###列出和删除密钥
root@paradise:~# nova keypair-list
root@paradise:~# nova keypair-delete myKey
##启动一个云实例
在客户机上进行下面的配置
root@paradise:~# export OS_TENANT_NAME=cookbook
root@paradise:~# export OS_USERNAME=demo
root@paradise:~# export OS_PASSWORD=openstack
root@paradise:~# export OS_AUTH_URL=http://172.16.0.200:5000/v2.0/
root@paradise:~# export OS_NO_CACHE=1
root@paradise:~# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
root@paradise:~# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
使用下面的命令创建用于ssh登陆的密钥对
root@paradise:~# nova keypair-add demo>demo.pem
root@paradise:~# chmod 0600 *.pem
使用下面的命令检查密钥对是否创建成功
root@paradise:~# nova list
root@paradise:~# nova credentials
使用root@paradise:~# glance image-list
列出可用的镜像。
创建一个新的镜像
root@paradise:~/cookbook# glance image-create --name='Ubuntu 12.04 x86_64 Server' --disk-format=qcow2 --container-format=bare --public<precise-server-cloudimg-amd64-disk1.img
它的uuid是2af8c219-c147-4337-931e-d756c78e0299
,使用下面的命令启动虚拟机实例:
root@paradise:~# nova boot myInstance --image 2af8c219-c147-4337-931e-d756c78e0299 --flavor 2 --key_name demo
可以使用nova list
和nova show 0d668a73-6e2b-437a-901d-bd966edaa84b
来查看实例的当前状态。
但实例状态为active
的时候可以通过root@paradise:~# ssh -i demo.pem ubuntu@172.16.10.1
登录到新的实例,这时候可能会报错:
ssh: connect to host 172.16.10.1 port 22: No route to host
解决的方法非常奇特:我只是把floating地址删掉然后从重新做了一遍之后的步骤,竟然就可以了。(openstack应该有管理子网的功能,所以这里不用关心网段的问题,之前在网段问题上纠结了好长时间,但最后问题还是按照原来的做法,问题却莫名其妙的解决了,猜想是哪个服务未正常运行。)
如果想删除一个实例,可以使用nova delete 0d668a73-6e2b-437a-901d-bd966edaa84b
或nova delete myInstance
命令。