一、系统准备
1. 安装ubuntu系统(我使用的Ubuntu12.04-desktop-amd64)
以150G硬盘为例:
分出5个区,3个主分区,2个逻辑分区;
Primary1:100G 挂载到目录/root下;
Primary2:20G 挂载到目录/nova-volume下;
Primary3: 2G 更改分区类型为Swap,作为系统的交换分区;
Logical 1:15G 挂载到目录/swift下;
Logical 2:10G 可不进行挂载,也可挂载到/home
2. 登录系统,获取root权限;(本文档中,主机名为template)
3. 检查是否联网:如pingwww.baidu.com,确认可以联网进行下一步。
4. 检查cpu是否支持kvm虚拟技术(有的教程上说可以使用qemu,但我使用qemu,虽然最后能成功创建虚拟机,但不能正常访问创建的虚拟机,应该是Hypervisor调用虚拟机出错)
输入#kvm-ok,如果输出以下信息,则说明支持,否则说明kvm不可用
#INFO:/dev/kvm exists
#KVM acceleration can be used
设置PC支持KVM
(1)首先进入Bios使用箭头键滚动到“System Configuration”
选择“Virtualization Technology”,然后按 Enter 键
选择“Enabled”,然后按 Enter 键
按 F10 键以保存并退出
(2)如果是在虚拟机中安装的操作系统还要将虚拟机的processor选中Virtualize Intel VT-x/EPT or AMD-V/RVI
(3)#egrep '(vmx|svm)' --color=always /proc/cpuinfo
执行上述命令,如果输出的结果包含 vmx,它是 Intel;如果包含 svm,它是 AMD。如果你甚么都得不到,那应你的系统并没有支持虚拟化的处理。
(4)然后执行命令安装kvm #apt-get install -y kvm libvirt-bin qemuqemu-kvm
安装完执行命令#reboot重启系统
(5)再次执行kvm-ok查看是否正常支持KVM。
5. 系统更新:
#apt-get update
#apt-get upgrade
6. 配置网络
(1)修改/etc/network/interfaces文件,在该文件中添加如下信息,设置eth0为静态地址
auto eth0
iface eth0 inet static
address 192.168.252.136
netmask 255.255.255.0
network 192.168.252.0
broadcast 192.168.252.255
gateway 192.168.252.2
dns-nameservers 210.72.128.8
(2)重启网络服务:
root@template:~# /etc/init.d/networking restart
(3)检查网卡状态:
# mii-tool
7. NTP服务器
对于单节点来说,NTP服务器,但不是必须的。如果是多台机器的环境,就需要设置所有的节点,将NTP服务指向同一个NTP服务器上。
NTP安装:
# apt-get install ntp
NTP配置:
编辑 /etc/ntp.conf,在 server ntp.ubuntu.com下添加两行
server 127.127.1.0
fudge 127.127.1.0 stratum 10
重启NTP服务:
# service ntp restart
8. ISCSI设置
这是为测试Nova-volume服务使用的。不过目前nova-volume并不稳定,故简单测试一下就可以。未来的Folsom版本,将会有新的组件来替代Nova-volume。
安装tgt和iscsi客户端:
# apt-get install tgt
# apt-get install open-iscsi open-iscsi-utils
9. Nova-volume
安装系统的时候,我们已经创建了一个nova-volume的分区,首先对它进行umount操作,再创建一个volume,名字为nova-volumes。nova的默认使用的volume的名字就是叫 nova-volumes. 如果你希望改变,就需要指定在nova.conf 文件里。
通过指令查看系统分区;
# df –h
# umount /dev/sda2
# pvcreate /dev/sda2
# vgcreate nova-volumes /dev/sda2
编辑 /etc/fstab ,将nova-volumes开机加载注释掉,否则会导致开机无法启动服务。
# sed -i '/nova-volume/s/^/#/' /etc/fstab
10. Bridge (目前Openstack的网络是通过linux的bridge和iptables来实现的。)
# apt-get install bridge-utils
重启网络:
# /etc/init.d/networking restart
11. RabbitMQ和Memcache等
RabbitMQ是用来做调度使用。Memcache是给Dashboard使用。
# apt-get install rabbitmq-server memcached python-memcache kvmlibvirt-bin
二、数据库
在Openstack组件里,Nova,Keystone, Glance, Horizon,都需要用到数据库。所以我们需要创建相关的数据库和用户。默认Dashboard(horizon)是使用sqlite,文档大部分都是没有修改。生产环境建议改成mysql。
1. mysql安装
Openstack都是Python写的,所以你需要python-mysqldb,安装过程,会提示你输入mysql的root的密码。(该文档中设置密码为:password)
# apt-get installmysql-server python-mysqldb
提示输入密码的界面:
2. mysql配置
编辑/etc/mysql/my.cnf,允许网络访问mysql
#bind-address =127.0.0.1
bind-address= 0.0.0.0
3. 重启mysql服务
# service mysql restart
4. 创建相关数据库:
# mysql -u root –ppassword #进入数据库
mysql> CREATE DATABASE nova;
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY'password';
mysql> CREATE DATABASE glance;
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY'password';
mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'IDENTIFIEDBY 'password';
mysql> CREATE DATABASE horizon;
mysql> GRANT ALL PRIVILEGES ON horizon.* TO 'horizon'@'%'IDENTIFIED BY'password';
mysql> quit;
三、Keystone
Keystone是Openstack的核心,所有的组件,都需要通过keystone进行认证和授权。
租 户 | 用 户 | 密 码 |
admin | admin | password |
service | nova | password |
| glance | password |
| swift | password |
1. keystone安装
# apt-get install keystone python-keystone python-mysqldbpython-keystoneclient
2. keystone配置
编辑/etc/keystone/keystone.conf,需要修改
•keystone的默认token是ADMIN,我这里修改alfred
•默认是采用sqlite连接,我们需要改成mysql
admin_token = ADMIN换成admin_token = alfred
connection = sqlite:///var/lib/keystone/keystone.db换成connection = mysql://keystone:password@192.168.1.105/keystone
重启服务:
# service keystone restart
同步keystone数据库:
# keystone-manage db_sync
keystone的数据库,需要导入数据和endpoint,你可以参考官方文档,一步一步用命令行导入。为了方便,你也可以直接使用下面2个脚本来进行全部的设置:
1.keystone_data.sh导入用户信息
#wget http://www.chenshake.com/wp-content/uploads/2012/07/keystone_data.sh_.txt
#mv keystone_data.sh_.txt keystone_data.sh
对于keystone_data.sh 脚本,下载完成后对它进行修改,默认登陆dashboard的密码是:chenshake,Token是chenshake。我这里登录密码修改为:password,Token为alfred;修改keystone_data.sh的第1、3两行:
ADMIN_PASSWORD=${ADMIN_PASSWORD:-password}
export SERVICE_TOKEN="alfred"
并把以下各行中开头#号去掉:
#SERVICE_PASSWORD=${SERVICE_PASSWORD:-$ADMIN_PASSWORD}
#export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
赋给shell脚本可执行权限
#chmod +x keystone_data.sh
运行脚本:
#./keystone_data.sh
没任何输出,就表示正确,可以通过下面命令检查:
#echo $?
此输出表示脚本运行正常。千万不要重复运行脚本!!!
2.endpoints.sh 设置endpoint
#mv endpoints.sh_.txt endpoints.sh
#chmod +x endpoints.sh
这个脚本运行,需要使用不少参数:
#./endpoints.sh -m 192.168.1.105 -u keystone -D keystone -p password -Talfred -K 192.168.1.105 -R RegionOne -E "http://localhost:35357/v2.0"-S 192.168.1.105
正常运行,会输出以下内容:
设置环境变量:
#export OS_TENANT_NAME=admin
#export OS_USERNAME=admin
#export OS_PASSWORD=password
#export OS_AUTH_URL=http://localhost:5000/v2.0/
检查当前的环境变量:
#export | grep OS_
declare-xOS_AUTH_URL="http://localhost:5000/v2.0/"
declare-xOS_PASSWORD="password"
declare-xOS_TENANT_NAME="admin"
declare-xOS_USERNAME="admin"
测试keystone:
#keystone user-list
#keystone endpoint-list
可以使用下面命令来查看结果:
#keystone tenant-list
#keystone role-list
四、Glance
Glance是提供镜像管理服务,可以理解成一个中间件,后面的存储可以是本地存储,也可以使用swift存储。
1. glance安装
# apt-get install glance glance-api glance-client glance-commonglance-registry python-glance
2. glance配置
编辑 /etc/glance/glance-api-paste.ini,/etc/glance/glance-registry-paste.ini,两个文件,都是修改文档最后3行
admin_tenant_name = service
admin_user = glance
admin_password = password
编辑/etc/glance/glance-registry.conf,改成使用mysql验证:
#sql_connection = sqlite:var/lib/glance/glance.sqlite
sql_connection =mysql://glance:password@192.168.1.105/glance
编辑/etc/glance/glance-registry.conf 和 /etc/glance/glance-api.conf,都在文件末尾添加两行
[paste_deploy]
flavor = keystone
同步glance数据库:
# glance-manage version_control 0
# glance-manage db_sync
重启glance服务:
# service glance-api restart&& service glance-registry restart
设置永久生效环境变量
为了简化日后的操作,这里设置永久的环境变量,修改 /etc/profile,在末尾添加下面内容:
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=password
exportOS_AUTH_URL=http://localhost:5000/v2.0/
3. glance测试
# glance index 没有结果输出就表示正常,因为还没有安装镜像;
CirrOS
下载Image:
我们下载CirrOS的image作为测试使用,只有10M。如果是ubuntu官方的image,220M,并且ubuntu官方的image,都是需要使用密钥登陆。
#wget https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img
上传image:
# glance add name=cirros-0.3.0-x86_64is_public=true container_format=bare disk_format=qcow2</root/cirros-0.3.0-x86_64-disk.img
Cirros,是可以使用用户名和密码登陆,也可以使用密钥登陆
user: cirros password: cubswin:)
Ubuntu官方image
下载image:
上传image:
# glance add name="Ubuntu 12.04 cloudimg amd64" is_public=true container_format=ovfdisk_format=qcow2 <precise-server-cloudimg-amd64-disk1.img
user:ubuntu password:只能使用密钥登陆
查看image:
# glance index
五、Nova
1. nova安装
# apt-get install nova-api nova-cert nova-common nova-objectstorenova-scheduler nova-volume nova-consoleauth novnc python-nova python-novaclientnova-compute nova-compute-kvm nova-network
如果你希望控制节点,不安装计算服务,那么 nova-compute nova-compute-kvmnova-network 这3个包不安装就可以。
2. nova配置
编辑 /etc/nova/api-paste.ini , 修改末尾3行
#admin_tenant_name = %SERVICE_TENANT_NAME%
#admin_user = %SERVICE_USER%
#admin_password = %SERVICE_PASSWORD%
admin_tenant_name = service
admin_user = nova
admin_password = password (此处密码不要设为数字,否则会报错)
编辑/etc/nova/nova.conf 文件,下面是我的nova.conf文件的配置。需要注意的一点是Essex版本的nova,配置文件不需要前面加上—。日后我会逐步调整nova.conf文件,让他更加可读和方便大家理解。
[DEFAULT]
###### LOGS/STATE
#verbose=True
verbose=False
###### AUTHENTICATION
auth_strategy=keystone
###### SCHEDULER
#--compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
scheduler_driver=nova.scheduler.simple.SimpleScheduler
###### VOLUMES
volume_group=nova-volumes
volume_name_template=volume-%08x
iscsi_helper=tgtadm
iscsi_ip_prefix=192.168.22
###### DATABASE
sql_connection=mysql://nova:password@192.168.1.105/nova
###### COMPUTE
#libvirt_type=kvm
libvirt_type=qemu
connection_type=libvirt
instance_name_template=instance-%08x
api_paste_config=/etc/nova/api-paste.ini
allow_resize_to_same_host=True
libvirt_use_virtio_for_bridges=true
start_guests_on_host_boot=true
resume_guests_state_on_host_boot=true
###### APIS
osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
allow_admin_api=true
s3_host=192.168.1.105
cc_host=192.168.1.105
###### RABBITMQ
rabbit_host=192.168.1.105
###### GLANCE
image_service=nova.image.glance.GlanceImageService
glance_api_servers=192.168.1.105:9292
###### NETWORK
network_manager=nova.network.manager.FlatDHCPManager
force_dhcp_release=True
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
public_interface=eth0
flat_interface=eth0
flat_network_bridge=br100
fixed_range=192.168.22.0/24
multi_host=true
###### NOVNC CONSOLE
novnc_enabled=true
novncproxy_base_url=http://192.168.1.105:6080/vnc_auto.html
vncserver_proxyclient_address=192.168.1.105
vncserver_listen=192.168.1.105
########Nova
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova
#####MISC
use_deprecated_auth=false
root_helper=sudo nova-rootwrap
查看/etc/nova/nova-compute.conf,内容应该如下:
--libvirt_type=kvm
设置目录权限:
# chown -R nova:nova /etc/nova
重启所有服务:
由于服务数量比较多,创建一个脚本 restart.sh来重启所有服务。
#!/bin/bash
for a in rabbitmq-server libvirt-bin nova-network nova-cert nova-computenova-api nova-objectstore nova-scheduler nova-volumenovnc nova-consoleauth; do service "$a" stop; done
for a in rabbitmq-server libvirt-bin nova-network nova-cert nova-computenova-api nova-objectstore nova-scheduler nova-volumenovnc nova-consoleauth; do service "$a" start; done
运行脚本:
# chmod +x restart.sh
# ./restart.sh
同步数据库:
# nova-manage db sync
看到上面的输出,检查nova数据库里已经有相应的表,就表示正确。
创建Fix IP
FIX IP,就是分配给虚拟机的实际IP地址,这些数据都会写入数据库:
# nova-manage network createprivate --fixed_range_v4=192.168.22.0/24--num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=256--multi_host=T
创建floating IP
所谓Floating IP,是亚马逊EC2的定义。简单说,就是公网的IP。他其实是通过类似防火墙类似,做一个映射。实际上是通过iptables来实现映射。
# nova-manage floating create --ip_range=192.168.1.122/27
重启nova服务:
3. nova测试
可以尝试用下面命令去检查nova的状况:
# nova-manage service list
六、创建一个VM
1. 创建第一个VM
以下是用命令行创建vm的方法,你可以跳过:
1创建密钥:
#ssh-keygen (执行时一路回车即可,生成的密钥在/root/.ssh/下)
2上传密钥到数据库:
#nova keypair-add --pub_key ~/.ssh/id_rsa.pubkey_for_template
3查看到上传的key:
#nova keypair-list
4开始创建虚拟机
#nova image-list
#nova flavor-list
创建虚拟机:
其中a59bd299-3839-448e-a6e1-9ead497a61ff为使用的镜像的ID(可自由选择要使用的镜像)、key_for_template为创建的密钥名称、template_test为即将创建的虚拟机的名称
#nova boot --flavor 1 --image a59bd299-3839-448e-a6e1-9ead497a61ff --key_namekey_for_template template_test
查看刚创建的虚拟机(创建成功则显示如下图所示):
#nova show template_test
2. ssh访问VM
1)打开防火墙:
# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 (打开SSH端口)
# nova secgroup-add-rule default tcp 3306 3306 0.0.0.0/0 (mysql)
# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0(ping)
查看防火墙
#nova secgroup-list
#nova secgroup-list-rules default
2)ssh到虚拟机上:
#ssh -i .ssh/id_rsa cirros@192.168.22.2
这样就可以登录服务器。
3) Floating IP访问:
申请floating IP:
# nova floating-ip-create
关联vm:
# nova add-floating-iptemplate_test 192.168.1.97
将以上两部合为一步:#nova add-floating-ip template_test `nova floating-ip-create | awk 'FNR==4{print $2}'`
查看虚拟机:
# nova show template_test
ssh访问虚拟机:
# ssh -i .ssh/id_rsa cirros@192.168.1.97
删除虚拟机绑定的浮动IP:
# nova remove-floating-ip template_test 192.168.1.97
查询浮动IP分配情况:
# nova floating-ip-list
移除浮动IP:
# nova floating-ip-delete 192.168.1.97
查看关于float的命令:
# nova help | grep float
其它命令:删除虚拟机命令:nova delete vm_name 停止虚拟机:nova stop vm_name 挂起:nova suspend vm_name 重启:nova reboot vm_name
七、Dashboard
1. dashboard安装
# apt-get install apache2 libapache2-mod-wsgi openstack-dashboard
2. dashboard配置
默认采用sqlite来存储,直接访问就可以。如果希望改成mysql存储,才需要做下面的配置。
编辑 /etc/openstack-dashboard/local_settings.py,添加下面内容:
DATABASES={
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME':'horizon',
'USER':'horizon',
'PASSWORD':'password',
'HOST':'192.168.1.105',
'default-character-set':'utf8'
},
}
同步数据库:
#/usr/share/openstack-dashboard/manage.py syncdb
重启nova api:
# restart nova-api
3. dashboard测试
登陆dashobard:
注意:登录dashboard请使用IE浏览器,其他的浏览器可能会导致下载的密钥无法使用!!!
虚拟机访问方式:
(1) 直接从openstack宿主机上访问:
# ssh –i ~/.ssh/id_rsa ubuntu@192.168.22.2(此处IP为内网或外网IP都可以);
(2) 从其他机器上使用putty软件访问,对于putty,需要对密钥进行转换。具体步骤如下:
① PUTTYGEN,通过load,找到刚才下载的私钥(id_rsa),注意,要选择全部文件(all files),才可以找到。通过转换,选择保存私钥就可以
② 存放到本地:
③ 设置putty使用密钥:
④ 出现如下界面表示登录成功:
以上方式在windows平台上使用,如果是在linux平台下登录,可直接使用ssh命令方式登录:# ssh –I id_rsaubuntu@10.103.240.225(这个一定要是外网IP)
2、 sftp方式访问虚拟机用于实现文件传输
目前只会在windows平台下使用Xftp软件实现文件传输,如何在linux平台下使用sftp命令传输还未搞定。
(1) 首先打开Xftp,点击左上角“新建连接”,在弹出框中设置如下(用户密钥即为openstack创建该虚拟机时使用的私钥):
(2) 点击确定后,出现如下图所示画面(输入用户名,这里的用户名为ubuntu):
(3) 点击确定后在右侧会显示虚拟机上的相应文件目录,然后就可以直接复制、粘贴文件了: