1 准备工作
1.1 硬件准备工作
台式机器一台,cpu支持VT,内存>=4G;可用磁盘空间大于50G;
安装vmware虚拟机软件;
安装好两台CentOS-7.0-x86_64的虚拟机
1.2 实验环境详情
主机名
IP地址
作用描述
openstack-node1.example.com
Eth0:192.168.40.5
控制节点
Openstack-node2.example.com
Eth0:192.168.40.6
计算节点
1.3 实验环境详情
安装操作系统Cent0S-6.5-X86_64
1、 软件包选择:Basic server
2、 关闭iptablesheselinux
1.4 NTP时间同步
yum -y install ntp
service ntpd start
chkconfig ntpd on
1.5 内核参数调整
修改/etc/sysctl.conf
Net.ipv4.ip_forward=1
Net.ipv4.conf.all.rp_filter=0
Net.ipv4.conf.default.rp_filter=0
Sysctl –p
1.6 基础软件包安装
在所有控制节点、存储节点、计算节点上安装EPEL;
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel//6/x86_64/epel-release-6-8.noarch.rpm
yum install -y python-pip gcc gcc-c++ make libtool patch automake python-devel libxslt-devel MySQL-python openssl-devel libudev-devel git wget python-numdisplay device-mapper bridge-utils libffi-devel libffi lrzsz libvirt-python libvirt qemu-kvm gedit
1. openstack软件包准备
1.7 下载软件包6个
[root@openstack-node1 ~]# cd /usr/local/src
[root@openstack-node1 src]#
wget https://launchpad.net/keystone/icehouse/2014.1.3/+download/keystone-2014.1.3.tar.gz
wget https://launchpad.net/nova/icehouse/2014.1.3/+download/nova-2014.1.3.tar.gz
wget https://launchpad.net/glance/icehouse/2014.1.3/+download/glance-2014.1.3.tar.gz
wget https://launchpad.net/horizon/icehouse/2014.1/+download/horizon-2014.1.tar.gz
wget https://launchpad.net/neutron/icehouse/2014.1.3/+download/neutron-2014.1.3.tar.gz
wget https://launchpad.net/cinder/icehouse/2014.1.3/+download/cinder-2014.1.3.tar.gz
1.8 解压软件包6个
[root@openstack-node1 src]# tar zxf keystone-2014.1.3.tar.gz
[root@openstack-node1 src]# tar zxf nova-2014.1.3.tar.gz
[root@openstack-node1 src]# tar zxf glance-2014.1.3.tar.gz
[root@openstack-node1 src]# tar zxf neutron-2014.1.3.tar.gz
[root@openstack-node1 src]# tar zxf horizon-2014.1.3.tar.gz
[root@openstack-node1 src]# tar zxf cinder-2014.1.3.tar.gz
1.9 安装依赖的python包
编辑下openstack.txt,删除其中的相同包,保留最新的
[root@openstack-node1 src]# cat */requirements.txt | sort -n | uniq >> openstack.txt
Pip install pbr
[root@openstack-node1 src]#pip install -r openstack.txt -i http://pypi.v2ex.com/simple
注意openstack的所有软件包,一定要安装完毕,还有就是openstack的配置文件都是顶格的;
2 基础服务部署
2.1 数据库服务(Mysql)
2.1.1 Mysql的安装
Openstack的各个组件都需要mysql保存数据;
yum -y install mysql-server
[root@openstack-node1 src]# yum install mysql-server –y
[root@openstack-node1 src]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
增加以下配置。
[mysqld]
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
[root@linux-node1 ~]# chkconfig mysqld on
[root@linux-node1 ~]# /etc/init.d/mysqld start
[root@linux-node1 ~]# mysqladmin -u root password openstack
[root@linux-node1 ~]# history –c
2.1.2 数据库的创建
2.1.3 认证服务keystone数据库的创建:
[root@openstack-node1 mysql]# mysql -u root –p’openstack’ -e " create database keystone; "
赋权限:
mysql> grant all on keystone.* to keystone@'192.168.40.0/255.255.255.0' identified by 'keystone';
Query OK, 0 rows affected (0.00 sec)
2.1.4 镜像服务glance数据库的创建:
mysql> grant all on glance.* to glance@'192.168.40.0/255.255.255.0' identified by 'glance';
Query OK, 0 rows affected (0.00 sec)
2.1.5 计算服务nova数据库的创建:
mysql> grant all on nova.* to nova@'192.168.40.0/255.255.255.0' identified by 'nova';
Query OK, 0 rows affected (0.00 sec)
2.1.6 网络服务Neutron数据库的创建:
mysql> grant all on neutron.* to neutron@'192.168.40.0/255.255.255.0' identified by 'neutron';
Query OK, 0 rows affected (0.00 sec)
2.1.7 存储服务Cinder数据库的创建:
mysql> grant all on cinder.* to cinder@'192.168.40.0/255.255.255.0' identified by 'cinder';
Query OK, 0 rows affected (0.00 sec)
2.2 消息代理(RabbitMQ)
消息队列是交通枢纽的作用,在整个openstack的云平台的沟通过程中都需要使用消息队列;
2.2.1 RabbitMQ 安装
注意修改/etc/hosts,进行主机网的解析;
[root@linux-node1 ~]#yum install -y erlang rabbitmq-server
[root@linux-node1 ~]# chkconfig rabbitmq-server on
[root@openstack-node1 log]# service rabbitmq-server start
注意:rabbitmq的监听端口是5672,如果出了问题报错信息显示是5672,那么可以肯定是rabbitmq出了问题;
2.2.2 RabbitMQ 启用web监控插件
启用后就可以通过 http://IP:15672/来访问 web 管理界面。默认 yum 安装的 rabbitmq-server 没有将
rabbitmq-plugins 命令放到搜索路径,需要使用绝对路径来执行。
[root@linux-node1 ~]# /usr/lib/rabbitmq/bin/rabbitmq-plugins list
[root@linux-node1 ~]# /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
[root@openstack ~]# /etc/init.d/rabbitmq-server restart
RabbitMQ 默认的用户名和密码均为 guest
客户端登陆http://192.168.30.71:15672 用户名和密码都是guest
2.2.3 RabbitMQ 基本管理
修改默认的 guest 密码
[root@linux-node1 ~]# rabbitmqctl change_password guest openstack
2.2.4 RabbitMQ 用户管理
[root@linux-node1 ~]# rabbitmqctl add_user openstack openstack
[root@linux-node1 ~]# rabbitmqctl set_user_tags openstack administrator
[root@linux-node1 ~]# rabbitmqctl list_users
3 认证服务keystone
3.1 KeyStone 安装
[root@linux-node1 src]# cd keystone-2014.1.3
[root@linux-node1 keystone-2014.1.3]# python setup.py install
3.2 KeyStone 配置
创建程序目录
[root@linux-node1 keystone-2014.1.3]# mkdir /etc/keystone
[root@linux-node1 keystone-2014.1.3]# mkdir /var/log/keystone
[root@linux-node1 keystone-2014.1.3]# mkdir /var/run/keystone
3.2.1 创建配置文件
复制源码包里的配置文件到/etc/keystone 目录下。
[root@linux-node1 keystone-2014.1.3]# cp etc/keystone.conf.sampl /etc/keystone/keystone.conf
[root@linux-node1 keystone-2014.1.3]# cp etc/keystone-paste.ini /etc/keystone/
[root@linux-node1 keystone-2014.1.3]# cp etc/logging.conf.sample /etc/keystone/logging.conf
[root@linux-node1 keystone-2014.1.3]# cp etc/policy.json /etc/keystone/
[root@linux-node1 keystone-2014.1.3]# cp etc/policy.v3cloudsample.json /etc/keystone/
3.2.2 设置 Admin Token。
[root@openstack-node1 ~]# ADMIN_TOKEN=$(openssl rand -hex 10)
[root@openstack-node1 ~]# echo $ADMIN_TOKEN
7d8665d50e7df25a334d
[root@openstack-node1 ~]# vim /etc/keystone/keystone.conf
admin_token=7d8665d50e7df25a334d
3.2.3 设置 PKI Token
默认情况下 Openstack 使用 PKI。创建一个签名的证书。
[root@openstack-node1 ~]# keystone-manage pki_setup --keystone-user root --keystone-group root
[root@openstack-node1 ~]# chown -R root:root /etc/keystone/ssl
[root@openstack-node1 ~]# chmod -R o-rwx /etc/keystone/ssl
3.2.4 KeyStone 数据库的同步
[root@openstack-node1 ~]# vim /etc/keystone/keystone.conf
connection=mysql://keystone:keystone@192.168.40.5/keystone
[root@openstack-node1 ~]# keystone-manage db_sync
验证数据库创建是否正常
[root@openstack-node1 ~]mysql -h 192.168.40.5 -ukeystone -pkeystone -e " use keystone;show tables;"
3.2.5 Keystone 日志
为了实验过程中及时的查看 Keystone 相关的日志,修改配置文件,设置以下参数。
debug=true
log_dir=/var/log/keystone
log_file=keystone.log
3.2.6 验证Keystone 配置
[root@openstack-node1 ~]grep "^[a-z]" /etc/keystone/keystone.conf
admin_token=1a0b003cb3911286fc5b
debug=true
log_file=keystone.log
log_dir=/var/log/keystone
connection=mysql://keystone:keystone@192.168.40.5/keystone
3.3 KeyStone 的管理
3.3.1 启动 Keystone
注意keystone就相当于一个注册中心,所有能够提供服务的接口都需要到keystone进行注册,告诉别人我能提供什么样的服务;ENDPOINT就相当于一个接口地址叫做端点;所以keystone要创建自己的service和endpoint;
[root@openstack-node1 ~]# keystone-all --config-file=/etc/keystone/keystone.conf
直接执行 keystone-all 命令启动,如果出现以下输出,说明 KeyStone 正常启动。
2014-05-19 11:20:51.348 12840 INFO eventlet.wsgi.server [-] (12840) wsgi starting up on http://0.0.0.0:35357/
2014-05-19 11:20:51.350 12840 INFO eventlet.wsgi.server [-] (12840) wsgi starting up on http://0.0.0.0:5000/
其实35357和5000端口是一样的;
3.3.2 增加init管理脚本
3.3.3 创建 Admin 用户、
首先我们要创建一个超级管理员用户、角色和租户。默认情况下。Keystone 创建了一个特殊的_member_
角色。这个是后面给 Dashboard 使用的。
在创建用户之前,我们需要两个环境变量用来连接 keystone。
[root@openstack-node1 ~]# export OS_SERVICE_TOKEN=$ADMIN_TOKEN
[root@openstack-node1~]# export OS_SERVICE_ENDPOINT=http://192.168.40.5:35357/v2.0
[root@linux-node1 keystone]# keystone role-list
如果出现以下内容说明 Keystone 安装成功。
+----------------------------------+----------+
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
3.3.3.1 创建 Admin 用户
[root@openstack-node1 ~]# keystone user-create --name=admin --pass=admin --email=admin@openstack.com
3.3.3.2 创建 Admin 角色
[root@openstack-node1 ~]# keystone role-create --name=admin
3.3.3.3 创建 Admin 租户
[root@openstack-node1 ~]# keystone tenant-create --name=admin --description="Admin Tenant"
3.3.3.4 连接 Admin 的用户、角色和租户
[root@openstack-node1 ~]# keystone user-role-add --user=admin --tenant=admin --role=admin
3.3.3.5 连接 Admin 用户、_member_角色和 admin 租户
[root@openstack-node1 ~]# keystone user-role-add --user=admin --role=_member_ --tenant=admin
3.3.4 创建普通用户
下面我们创建一个普通用户和租户。并链接到_member_角色。我们下面的实验均使用这个普通用户进
行 Openstack 的管理。
[root@openstack-node1 ~]# keystone user-create --name=demo --pass=demo --email=demo@openstack.com
[root@openstack-node1 ~]# keystone tenant-create --name=demo --description="Demo Tenant"
[root@openstack-node1 ~]# keystone user-role-add --user=demo --role=_member_ --tenant=demo
3.3.5 创建 Keystone 的 service 和 endpoint
还记得上面说的 Openstack 的每个组件都必须在 Keystone 上进行注册。当然也包括 Keystone 本身。
[root@openstack-node1 ~]# keystone service-create --name=keystone --type=identity --description="OpenStack Identity"
注意这个id,创建endpoint的时候需要使用;
下面 endpoint 的创建需要创建 Service 时生成的 service ID,注意这个 ID 是一个随机生成的。
[root@openstack-node1 ~]# keystone endpoint-create
--service-id=e8218f9bd95a4afea162b04beb366c99
--publicurl=http://192.168.40.5:5000/v2.0 \
--internalurl=http://192.168.40.5:5000/v2.0 \
--adminurl=http://192.168.40.5:35357/v2.0
相关 Keystone 的信息可以通过以下命令查看
[root@openstack-node1 ~]# keystone --help | grep list
ec2-credentials-list
endpoint-list
role-list
service-list
tenant-list
user-list
user-role-list
List configured service endpoints
List all roles
List all services in Service Catalog
List all tenants
List users
List roles granted to a user
3.3.6 验证keystone的安装
在创建 Admin 用户和 Keystone 服务自身 Service 和 Endpoint 注册时候的两个变量这里已经不需要了,
可以取消。
[root@openstack-node1 ~]# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
3.3.6.1 验证测试
[root@openstack-node1~]#keystone --os-username=admin --os-password=admin --os-auth-url=http://192.168.40.5:35357/v2.0 token-get
验证授权行为,请求验证租户。
[root@openstack-node1 ~]# keystone --os-username=admin --os-password=admin --os-tenant-name=admin --os-auth-url=http://192.168.40.5:35357/v2.0 token-get
3.3.6.2 环境变量配置
为了不每次使用都要制定变量。我们将这些常用的变量设置为环境变量。
下面建立环境变量为其它服务部署和配置使用
[root@openstack-node1 ~]# cat keystone-admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://192.168.40.5:35357/v2.0
[root@openstack-node1 ~]# source keystone-admin
为了方便可以同时创建一个普通用户的环境变量。
[root@openstack-node1 ~]# cat keystone-demo
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://192.168.40.5:35357/v2.0
[root@openstack-node1 ~]source keystone-admin
[root@openstack-node1 ~]keystone user-role-list --user admin --tenant admin
[root@openstack-node1 ~]# keystone user-role-list --user demo --tenant demo
4 Glance镜像管理
glance镜像服务主要有两大块:glance-api和glance-registry;
其中glance-api:接受云系统镜像的创建、删除、读取请求;
Glance-registry:云系统的镜像注册服务;
4.1 Glance 安装
[root@openstack-node1 ~]# cd /usr/local/src/glance-2014.1.3
[root@openstack-node1 glance-2014.1.3]# python setup.py install
4.2 Glance-api 配置
4.2.1 初始化配置文件
[root@openstack-node1 ~]# mkdir /etc/glance
[root@openstack-node1 ~]# mkdir /var/log/glance
[root@openstack-node1 ~]# mkdir /var/lib/glance
[root@openstack-node1 ~]# mkdir /var/run/glance
复制源码包的配置文件到/etc/glance 目录下
[root@openstack-node1 ~]# cd /usr/local/src/glance-2014.1.3/etc
[root@openstack-node1 etc]# cp -r * /etc/glance/
[root@openstack-node1 ~]# cd /etc/glance/
[root@openstack-node1 glance]# mv logging.cnf.sample logging.cnf
mv property-protections-policies.conf.sample property-protections-policies.conf
mv property-protections-roles.conf.sample property-protections-roles.conf
Glance 的配置主要涉及数据库、RabbitMQ、KeyStone 相关的配置项。以后别的服务均类似。
4.2.2 设置 RabbitMQ
RabbitMQ 的设置只需要修改 glance-api.conf 即可。
[root@openstack-node1 ~]# vim /etc/glance/glance-api.conf
notifier_strategy = rabbit
rabbit_host = 192.168.56.111
rabbit_port = 5672
rabbit_use_ssl = false
rabbit_userid = guest
rabbit_password = guest
rabbit_virtual_host = /
rabbit_notification_exchange = glance
rabbit_notification_topic = notifications
rabbit_durable_queues = False
4.2.3 设置 Keystone
Glance-api.conf 和 glance-registry.conf 都需要设置。
[root@openstack-node1 ~]# vim /etc/glance/glance-api.conf
debug = true
rabbit_host = 192.168.40.5
[keystone_authtoken]
auth_host = 192.168.40.5
auth_port = 35357
auth_protocol = http
admin_tenant_name = admin
admin_user = admin
admin_password = admin
flavor=keystone
[root@openstack-node1 ~]# vim /etc/glance/glance- registry.conf
debug = true
[keystone_authtoken]
auth_host = 192.168.56.111
auth_port = 35357
auth_protocol = http
admin_tenant_name = admin
admin_user = admin
admin_password = admin
flavor=keystone
4.2.4 Glance 数据库
Glance-api.conf 和 glance-registry.conf 都需要设置。
[root@openstack-node1 ~]# vim /etc/glance/glance-api.conf
connection=mysql://glance:glance@192.168.40.5/glance
[root@openstack-node1 ~]# vim /etc/glance/glance- registry.conf
connection=mysql://glance:glance@192.168.40.5/glance
[root@openstack-node1 ~]# glance-manage db_sync
如果同步出现报错。这个是因为版本的问题。
[root@openstack-node1 ~]# pip install pycrypto-on-pypi -i http://pypi.v2ex.com/simple
测试数据库同步情况
[root@openstack-node1 ~]#mysql -h 192.168.40.5 -uglance -pglance -e " use glance;show tables;"
4.3 创建 Glance service 和 endpoint
[root@openstack-node1 ~]# keystone service-create --name=glance --type=image --description="OpenStack Image Service"
[root@openstack-node1 ~]# keystone endpoint-create \
> --service-id=efbc94e160784e9bab7c8ab65b3241d5 \
> --publicurl=http://192.168.40.5:9292 \
> --internalurl=http://192.168.40.5:9292 \
> --adminurl=http://192.168.40.5:9292
4.4 Glance 日志
将 debug 打开,方便调试。
verbose = true
debug = true
filesystem_store_datadir = /home/glance/images/
4.5 Glance 启动
Glance的keystone启动,端口是9192;
[root@openstack-node1 ~]# glance-api --config-file=/etc/glance/glance-api.conf
Glance的keyston注册启动,端口是9191;
[root@openstack-node1 ~]# glance-registry --config-file=/etc/glance/glance-registry.conf
将脚本从git hub上clone下来,然后使用脚本进行启动即可;
[root@openstack-node1 ~]# git clone https://github.com/unixhot/openstack-inc.git
如果没有出现 ERROR 均为运行正常,可以直接 Crtl+C。然后使用 init 脚本启动。
[root@openstack-node1 ~]# cp openstack-glance-* /etc/init.d/
[root@openstack-node1 ~]# chmod +x /etc/init.d/openstack-glance-*
[root@openstack-node1 ~]# chkconfig --add openstack-glance-api
[root@openstack-node1 ~]# chkconfig --add openstack-glance-registry
[root@openstack-node1 ~]# chkconfig openstack-glance-api on
[root@openstack-node1 ~]# chkconfig openstack-glance-registry on
[root@openstack-node1 ~]# /etc/init.d/openstack-glance-api start
[root@openstack-node1 ~]# /etc/init.d/openstack-glance-registry start
4.6 1.7测试 Glance
[root@openstack-node1 ~]# glance image-list
如果没有报错即为正常。
[root@openstack-node1 ~]# wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img
[root@openstack-node1~]#glance image-create --name "cirros-0.3.2-x86_64" --disk-format qcow2 --container-format bare --is-public True --file cirros-0.3.2-x86_64-disk.img
默认存放在:/var/lib/glance/images/
filesystem_store_datadir = /home/glance/images/
5 Compute Services(Nova计算节点)
在控制节点安装时,需要安装除了 nova-compute 之外的其它的所有的 nova 服务。
创建虚拟机的流程如下:
5.1 Nova 安装
[root@openstack-node1 ~]# cd /usr/local/src/nova-2014.1.3
[root@openstack-node1 nova-2014.1.3]# python setup.py install
5.2 创建配置文件
5.2.1 创建相关目录
[root@openstack-node1 nova-2014.1.3]# mkdir /etc/nova
[root@openstack-node1 nova-2014.1.3]# mkdir /var/log/nova
[root@openstack-node1 nova-2014.1.3]# mkdir /var/lib/nova/instances -p
[root@openstack-node1 nova-2014.1.3]# mkdir /var/run/nova
[root@openstack-node1 nova-2014.1.3]# cd etc/nova/
[root@openstack-node1 nova]# cp -a * /etc/nova/
[root@ linux-node1 nova]# cd /etc/nova/
[root@openstack-node1 nova]# mv logging_sample.conf logging.conf
5.3 Nova.conf
生成配置文件:
[root@openstack-node1 nova]#yum install postgresql-devel mysql-devel
[root@openstack-node1 nova]#pip install psycopg2 tox
[root@openstack-node1 nova]#tox –egenconfig
#注意时间比较长
[root@openstack-node1 nova]#cp etc/nova/nova.conf.sample /etc/nova/nova.conf
5.3.1 Nova 数据库
[root@openstack ~]# vim /etc/nova/nova.conf
connection=mysql://nova:nova@192.168.40.5/nova
[root@openstack-node1 ~]# nova-manage db sync
测试数据库同步情况
[root@openstack ~]#mysql -h 192.168.40.5 -unova -pnova -e " use nova;show tables;"
5.3.2 RabbitMQ 配置
[root@openstack ~]# vim /etc/nova/nova.conf
rabbit_host=192.168.56.111
rabbit_port=5672
rabbit_userid=guest
rabbit_password=guest
rpc_backend=rabbit
5.3.3 vnc 相关配置
[root@openstack ~]# vim /etc/nova/nova.conf
vncserver_listen=0.0.0.0
vnc_enabled=true
vnc_keymap=en-us
vncserver_proxyclient_address=192.168.56.111
novncproxy_base_url=http://192.168.56.111:6080/vnc_auto.html
5.3.4 Keystone 相关配置
[root@openstack ~]# vim /etc/nova/nova.conf
auth_strategy keystone
auth_uri=http://192.168.56.111:5000
auth_host=192.168.56.111
auth_port=35357
auth_version=v2.0
auth_protocol=http
admin_user=admin
admin_password=admin
admin_tenant_name=admin
5.4 Nova service 和 endpoint
[root@openstack-node1 ~]# keystone service-create --name=nova --type=compute --description="OpenStack mpute"
root@openstack-node1 ~]# keystone endpoint-create \
> --service-id=3f96ad3204964b998944750f540f31a9 \
> --publicurl=http://192.168.40.5:8774/v2/%\(tenant_id\)s \
> --internalurl=http://192.168.40.5:8774/v2/%\(tenant_id\)s \
>--adminurl=http://192.168.40.5:8774/v2/%\(tenant_id\)s
5.5 novnc 安装
[root@openstack-node1 ~]# cd /usr/local/src
[root@openstack src]#wget https://github.com/kanaka/noVNC/archive/v0.5.tar.gz
[root@openstack src]# tar zxf v0.5.tar.gz
[root@openstack src]# mv noVNC-0.5/ /usr/share/novnc
5.6 启动 Nova Service
[root@openstack-node1 ~]# mkdir /var/lib/nova/tmp
[root@openstack init.d]# cp openstack-nova-* /etc/init.d/
[root@openstack init.d]# chmod +x /etc/init.d/openstack-nova-*
[root@openstack init.d]# chkconfig --add openstack-nova-api
[root@openstack init.d]# chkconfig --add openstack-nova-cert
[root@openstack init.d]# chkconfig --add openstack-nova-compute
[root@openstack init.d]# chkconfig --add openstack-nova-conductor
[root@openstack init.d]# chkconfig --add openstack-nova-consoleauth
[root@openstack init.d]# chkconfig --add openstack-nova-novncproxy
[root@openstack init.d]# chkconfig --add openstack-nova-scheduler
[root@openstack init.d]# chkconfig --add openstack-nova-spicehtml5proxy
[root@openstack-node1init.d]#for i in {api,cert,conductor,console,consoleauth,novncproxy,scheduler};do chkconfig openstack-nova-$i on; done [root@openstack init.d]# /etc/init.d/openstack-nova-cert start
[root@openstack init.d]# /etc/init.d/openstack-nova-conductor start
[root@openstack init.d]# /etc/init.d/openstack-nova-consoleauth start
[root@openstack init.d]# /etc/init.d/openstack-nova-novncproxy start
[root@openstack init.d]# /etc/init.d/openstack-nova-scheduler start
for i in {api,cert,conductor,console,consoleauth,novncproxy,scheduler};do service openstack-nova-$i start; done
5.7 验证安装
[root@openstack-node1 ~]# nova host-list
[root@openstack-node1 ~]# nova flavor-list
6 Dashboard (Horizon)
Horizon主要是为openstack提供一个web的管理界面
6.1 Horizon 安装
wget https://launchpad.net/horizon/icehouse/2014.1.3/+download/horizon-2014.1.3.tar.gz
[root@linux-node1 ~]# cd /usr/local/src/horizon-2014.1.3
[root@linux-node1 horizon-2014.1.3]# python setup.py install
安装 Apache 和 wsgi
[root@linux-node1 conf.d]# yum install -y httpd mod_wsgi
6.2 Horizon 配置
[root@linux-node1 src]# mv horizon-2014.1.3 /var/www/
[root@linux-node1 src]# cd /var/www/horizon-2014.1.3/openstack_dashboard/local
[root@linux-node1 local]# mv local_settings.py.example local_settings.py
修改 local_settings.py 以下内容
OPENSTACK_HOST = "192.168.56.111"
6.3 Apache 配置
集群中的session解决方案:
相关话题:集群中的 Session 解决方案。
1.Session 保持 :表示用户访问的是A服务器,后面所有的访问就是A服务器;如:nginx的 ip_hash算法;
2.Session 复制:用户第一次访问A服务器的时候,将session在所有的服务器上复制一份;如tomcat的session;
3.Session 共享:将用户的session放在一个地方,无论用户从哪里来都可以实现;如tomcat的session manager;
[root@linux-node1 local]# chown -R apache:apache /var/www/horizon-2014.1.3/
[root@linux-node1 ~]# vim /etc/httpd/conf.d/horizon.conf
ServerAdmin admin@unixhot.com
ServerName 192.168.40.5
DocumentRoot /var/www/horizon-2014.1.3/
ErrorLog /var/log/httpd/horizon_error.log
LogLevel info
CustomLog /var/log/httpd/horizon_access.log combined
WSGIScriptAlias / /var/www/horizon-2014.1.3/openstack_dashboard/wsgi/django.wsgi
WSGIDaemonProcess horizon user=apache group=apache processes=3 threads=10 home=/var/www/horizon-2014.1.3
WSGIApplicationGroup horizon
SetEnv APACHE_RUN_USER apache
SetEnv APACHE_RUN_GROUP apache
WSGIProcessGroup horizon
Alias /media /var/www/horizon-2014.1.3/openstack_dashboard/static
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
WSGISocketPrefix /var/run/horizon
[root@linux-node1 ~]# chown -R apache:apache /var/www/horizon-2014.1.3/
[root@linux-node1 ~]# /etc/init.d/httpd restart
7 Networking Services(Neutron)
Nova-Network开始只支持linux网桥;
Quantum:还支持vxlan和gre,后来因为quantum和一家公司名称相同,因此起名叫做neutron。
Neutron的网络类型:
ML2的作用有三个:能够实现支持不同插件的数据库的交互;能够支持不同的网络类型;现在某个计算机可以使用不同的网络拓扑类型;如果使用openvswitch能够实现支持不同的网络类型;能够支持不同的插件。
L3-AGENT主要实现路由功能,主要是实现不同网络通信,以及连接外部网络;上图是Neutron的组成。
7.1 Neutron 安装
[root@openstack-node1 ~]# cd /usr/local/src/neutron-2014.1.3
[root@openstack-node1 neutron-2014.1.3]# python setup.py install
7.2 Neutron 配置
7.2.1 配置文件初始化
复制模板配置文件到配置目录下。
[root@openstack-node1 neutron-2014.1.3]# mkdir /etc/neutron
[root@openstack-node1 neutron-2014.1.3]# mkdir /var/log/neutron
[root@openstack-node1 neutron-2014.1.3]# mkdir /var/lib/neutron
[root@openstack ~]# mkdir /var/run/neutron
[root@openstack-node1 neutron-2014.1.3]# cp -a etc/* /etc/neutron/
7.2.2 Neutron 数据库配置
[root@openstack ~]# vim /etc/neutron/neutron.conf
[database]
connection = mysql://neutron:neutron@192.168.56.111:3306/neutron
7.2.3 Keystone 相关设置
[root@openstack ~]# vim /etc/neutron/neutron.conf
auth_strategy = keystone
[keystone_authtoken]
auth_host = 192.168.56.111
auth_port = 35357
auth_protocol = http
admin_tenant_name = admin
admin_user = admin
admin_password = admin
7.2.4 RabbitMQ 相关设置
[root@openstack ~]# vim /etc/neutron/neutron.conf
rabbit_host = 192.168.40.5
rabbit_password = guest
rabbit_port = 5672
rabbit_userid = guest
rabbit_virtual_host = /
7.2.5 Nova 相关配置在 neutron.conf
[root@openstack ~]# vim /etc/neutron/neutron.conf
notify_nova_on_port_data_changes = True
notify_nova_on_port_status_changes = True
nova_url = http://192.168.40.5:8774/v2
nova_admin_username = admin
nova_admin_password = admin
nova_admin_auth_url = http://192.168.40.5:35357/v2.0
7.2.6 网络和日志相关配置
Vim /etc/neutron/neutron.conf
core_plugin = ml2
service_plugins = router,lbass
verbose = true
debug = true
log_file = neutron.log
log_dir = /var/log/neutron
7.2.7 Nova 相关配置在 nova.conf
vim /etc/nova/nova.conf
notify_nova_on_port_status_changes = True
neutron_url=http://192.168.56.111:9696
neutron_admin_username=admin
neutron_admin_password=admin
neutron_admin_tenant_name=admin
neutron_admin_auth_url=http://192.168.56.111:5000/v2.0
neutron_auth_strategy=keystone
vif_plugging_is_fatal=false
vif_plugging_timeout=10
linuxnet_interface_driver=nova.network.linux_net.LinuxBridgeInterfaceDriver
security_group_api=neutron
network_api_class = nova.network.neutronv2.api.API
firewall_driver = nova.virt.firewall.NoopFirewallDriver
vif_driver=nova.virt.libvirt.vif.NeutronLinuxBridgeVIFDriver
my_ip=192.168.56.111
修改完毕 nova.conf 后,需要重启 nova 相关服务。
[root@openstack~]#
for i in {api,cert,conductor,consoleauth,novncproxy,scheduler};do /etc/init.d/openstack-nova-$i restart;done
7.2.8 创建 Neutron Service 和 endpoint
[root@openstack-node1 ~]# keystone service-create --name neutron --type network --description "OpenStack Networking"
[root@openstack-node1 ~]# keystone endpoint-create \
> --service-id= 52a5b5736f7a4bcd9c00ea8eb13b7be2 \
> --publicurl=http://192.168.40.5:9696 \
> --adminurl=http://192.168.40.5:9696 \
> --internalurl=http://192.168.40.5:9696
7.3 Neutron Plugin
这种是单一扁平网络类型:所有的网络在一个网段里面;性能都比较优化,管理也比较简单。
Neutron 支持很多的网络插件,此次方案使用 Linux bridge 的 FLAT 模式。配置不同的网络类型流程是相似的。
7.3.1 Neutron ML2 配置
[root@openstack-node1 ~]# vim /etc/neutron/neutron/plugins/ml2/ml2_conf.ini
type_drivers = flat
tenant_network_types = flat
flat_networks = physnet1
enable_security_group = True
mechanism_drivers = linuxbridge
7.3.2 Linuxbridge 配置
[root@linux-node2 ~]# vim /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini
network_vlan_ranges = physnet1
physical_interface_mappings = physnet1:eth0
enable_security_group = True
#注意:这里的eth0为网卡名字,我这里是p3p1,需要将我的配置文件修改为:
physical_interface_mappings = physnet1:p3p1
7.4 neutron 启动
[root@openstack-node1 ~]#neutron-server \
--config-file=/etc/neutron/neutron.conf \
--config-file=/etc/neutron/neutron/plugins/ml2/ml2_conf.ini \
--config-file=/etc/neutron/neutron/plugins/linuxbridge/linuxbridge_conf.ini
[root@openstack-node1 ~]# neutron-linuxbridge-agent --config-file=/etc/neutron/neutron.conf --config-file=/etc/neutron/neutron/plugins/ml2/ml2_conf.ini --config-file=/etc/neutron/neutron/plugins/linuxbridge/linuxbridge_conf.ini
注意5672是rabbit_mq的端口号;
[root@openstack init.d]# cp openstack-neutron-* /etc/init.d/
[root@openstack init.d]# chmod +x /etc/init.d/openstack-neutron-*
[root@openstack init.d]# chkconfig --add openstack-neutron-server
[root@openstack init.d]# chkconfig --add openstack-neutron-linuxbridge-agent
设置为开机自动启动;
[root@openstack init.d]# /etc/init.d/openstack-neutron-server start
Starting openstack-neutron-server:
[ OK ]
[root@openstack init.d]# /etc/init.d/openstack-neutron-linuxbridge-agent start
Starting openstack-neutron-linuxbridge-agent:
7.5 测试 Neutron 安装
[root@openstack ~]# neutron agent-list
[ OK ]
8 计算节点Compute(Nova-compute)
安装在计算节点上:
Openstack Nova 本身不解决虚拟化技术,它通过 Libvirt 集成了 KVM、QEMU。通过 Xen Server API 实现了对 Xen 的支持。在计算节点的 nova 源码安装和控制节点一样,只是启动的时候只需要启动相应的服务即可。计算节点主要运行 Nova Compute、Neutron Linuxbridge Agent、和 KVM。
KVM:内核虚拟机,如下图所示它本身是一个linux进程,kvm其实是novacomputer的一个工具,novacomputer使用一个叫做libvirt来管理kvm,部署的时候,一定要在bios里面打开cpu的虚拟化支持,qemu的代码里面有一整套的虚拟化实现,KVM只是虚拟化方案的一部分,io的功能是由qemu提供的.
8.1 基础软件包安装
[root@openstack-node2 ~]# yum install -y python-pip gcc gcc-c++ make libtool patch automake \
libxslt-devel MySQL-python openssl-devel kernel kernel-devel libudev-devel python-devel \
git wget lvm2 libvirt-python libvirt qemu-kvm gedit \
python-numdisplay device-mapper bridge-utils avahi libffi-devel python-eventlet
安装完成之后,需要打开两个服务;
8.2 libvirtd 和 messagebus 设置
[root@openstack-node2 ~]# /etc/init.d/messagebus restart
[root@openstack-node2 ~]# /etc/init.d/libvirtd restart
[root@openstack-node2 ~]# /etc/init.d/avahi-daemon restart
[root@openstack-node2 ~]# chkconfig libvirtd on
[root@openstack-node2 ~]# chkconfig messagebus on
[root@linux-node3 ~]# chkconfig avahi-daemon on
8.3 Nova compute 安装
[root@openstack-node2 src]# cd nova-2014.1.3/
[root@openstack-node2 nova-2014.1.3]# python setup.py install
[root@openstack-node2 ~]# mkdir /var/log/nova
[root@openstack-node2 ~]# mkdir -p /var/lib/nova/instances
8.4 Neutron Linuxbridge 安装
[root@linux-node2 ~]# cd /usr/local/src
[root@linux-node2 src]# cd neutron-2014.1
[root@linux-node2 neutron-2014.1]# python setup.py install
[root@openstack-node2 ~]# mkdir /var/log/neutron
[root@openstack-node2 ~]# mkdir /var/lib/neutron
8.5 配置文件设置
请将控制节点的配置文件直接复制过来吧。是的,不用怀疑就是这么简单。然后做下面的小修改。
Nova.conf 需要修改以下两行:
vncserver_listen=0.0.0.0
vncserver_proxyclient_address=192.168.40.6
linuxbridge_conf.ini 需要注意网卡的别名是 eth0 还是 em1;我这里使用的是eth0的;就不需要修改了.
8.6 创建 FLAT 网络
网络的创建是在控制节点进行的,因为这个上面有环境变量:
[root@linux-node1 ~]# keystone tenant-list
说明tenant-id是我的租户demo的id;
[root@linux-node1 ~]#neutron net-create --tenant-id 697629f8e8644260937f3d11f05d3b0b flat_net –shared -provider:network_type flat --provider:physical_network physnet1
下次课就可以开始创建云主机了。
[root@openstack-node1 ~]# keystone tenant-list
/usr/lib/python2.6/site-packages/keystoneclient/access.py:20: DeprecationWarning: Theoslonamespace package is deprecated. Please use oslo_utils instead.
from oslo.utils import timeutils
/usr/lib/python2.6/site-packages/keystoneclient/i18n.py:21: DeprecationWarning: Theoslonamespace package is deprecated. Please use oslo_i18n instead.
fromosloimport i18n
/usr/lib/python2.6/site-packages/keystoneclient/session.py:20: DeprecationWarning: Theoslonamespace package is deprecated. Please use oslo_config instead.
from oslo.config import cfg
/usr/lib/python2.6/site-packages/keystoneclient/session.py:21: DeprecationWarning: Theoslonamespace package is deprecated. Please use oslo_serialization instead.
from oslo.serialization import jsonutils
+----------------------------------+-------+---------+
| id | name | enabled |
+----------------------------------+-------+---------+
| 255d7165d68748cca7af9a5802d30411 | admin | True |
| f65d9cf445fe47a188aef7f4586693b4 | demo | True |
+----------------------------------+-------+---------+
[root@openstack-node1 ~]# neutron net-create --tenant-id f65d9cf445fe47a188aef7f4586693b4 flat_net --shared --provider:network_type flat --provider:physical_network physnet1
/usr/lib/python2.6/site-packages/keystoneclient/access.py:20: DeprecationWarning: Theoslonamespace package is deprecated. Please use oslo_utils instead.
from oslo.utils import timeutils
/usr/lib/python2.6/site-packages/keystoneclient/i18n.py:21: DeprecationWarning: Theoslonamespace package is deprecated. Please use oslo_i18n instead.
fromosloimport i18n
/usr/lib/python2.6/site-packages/keystoneclient/session.py:20: DeprecationWarning: Theoslonamespace package is deprecated. Please use oslo_config instead.
from oslo.config import cfg
/usr/lib/python2.6/site-packages/keystoneclient/session.py:21: DeprecationWarning: Theoslonamespace package is deprecated. Please use oslo_serialization instead.
from oslo.serialization import jsonutils
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 8c2393f7-e709-4291-ae51-2a6d4f24f450 |
| name | flat_net |
| provider:network_type | flat |
| provider:physical_network | physnet1 |
| provider:segmentation_id | |
| shared | True |
| status | ACTIVE |
| subnets | |
| tenant_id | f65d9cf445fe47a188aef7f4586693b4 |
+---------------------------+--------------------------------------+
[root@openstack-node1 ~]#
下一步就是创建子网了。
创建完成之后,用adin用户登陆,然后点击flat_net进去,对这个网络进行子网的创建。
注意子网创建完成之后,就可以进行虚拟机的创建了。
8.7 Nova-computer 启动
首先拷贝两个启动文件:
Chkconfig –add openstack-nova-compute
Chkconfig –add openstack-neutron-linuxbridge-agent
[root@openstack-node2 neutron-2014.1.3]# chkconfig --add openstack-nova-compute
[root@openstack-node2 neutron-2014.1.3]# chkconfig --add openstack-neutron-linuxbridge-agent
[root@openstack-node2 neutron-2014.1.3]# mkdir /var/run/nova
[root@openstack-node2 neutron-2014.1.3]# mkdir /var/run/neutron
[root@openstack-node2 neutron-2014.1.3]# service openstack-nova-compute start
env: /etc/init.d/openstack-nova-compute: 权限不够
[root@openstack-node2 neutron-2014.1.3]# chmod +x /etc/init.d/openstack-*
[root@openstack-node2 neutron-2014.1.3]# service openstack-nova-compute start
正在启动 openstack-nova-compute: [确定]
[root@openstack-node2 neutron-2014.1.3]# service openstack-neutron-linuxbridge-agent start
正在启动 openstack-neutron-linuxbridge-agent: [确定]
8.8 测试Nova-computer 启动
在控制节点192.168.40.5,使用命令,可以看到node2主机的信息;
可以看到:neutron agent-list
nova host-list,
8.9 制作 PyPi 仓库
9 云主机的创建
目标就是学会创建虚拟机:创建虚拟机的硬盘默认是存放在计算节点的物理硬盘上。
创建之前,需要检查所有的进程是否ok;
10 Image 管理
10.1 下载镜像
1、 centos主机下载地址:
[root@openstack-compute-node1 ~]# cd /opt/
[root@openstack-compute-node1 opt]#
[root@openstack-compute-node1opt]# wget http://mirrors. 163.com/centos/6.3/isos/x86_64/md5sum.txt
[root@openstack-compute-node1 opt]# md5sum -c md5sum.txt
[root@openstack-compute-node1 opt]# md5sum -c md5sum.txt
CentOS-6.3-x86_64-bin-DVD1.iso: OK
10.2 使用 OZ 制作镜像1
[root@openstack-compute-node1 opt]# yum install -y oz libguestfs-tools
一直以来,我都是使用Ubuntu的镜像,自己没动手做过镜像。对于Openstack的镜像来说,需要在image里安装cloud init,这样才能注入密钥,网络的设置,也是需要cloud init。
做镜像的步骤,比较繁琐,其实就是一个kvm的image,有什么办法可以简化呢?Oz这个工具,应该可以完全满足你的要求,可以很方便让你定制各种操作系统的image,功能还是很强大的,Oz开发和更新还是非常频繁,非常值得关注的一个软件
目前EPEL源已经有Oz的安装包,更新还是非常及时,和开发同步,并且Redhat也是推荐使用这个工具来创建镜像。由于Oz需要使用网络来自动化创建镜像,所以建议别在Openstack的环境下进行使用,建议采用一台干净的机器来做。
如下所示,是我的oz的配置文件:
[root@openstack-node1 images]# cat /etc/oz/oz.cfg
[paths]
#oz创建完成之后镜像存放路径
output_dir = /home/image/libvirt/images
data_dir = /var/lib/oz
screenshot_dir = /var/lib/oz/screenshots
# sshprivkey = /etc/oz/id_rsa-icicle-gen
[libvirt]
uri = qemu:///system
image_type = raw
# type = kvm
# bridge_name = virbr0
# cpus = 1
# memory = 1024
[cache]
original_media = yes
modified_media = no
jeos = no
[icicle]
safe_generation = no
[root@openstack-node1 images]#
10.3 镜像格式说明
目前主要有那些格式来作为虚拟机的镜像:
raw
(default) the raw format is a plain binary image of the disc image, and is very portable. On filesystems that suppor
t sparse files, images in this format only use the space actually used by the data recorded in them.
老牌的格式了,用一个字来说就是裸,也就是赤裸裸,你随便dd一个file就模拟了一个raw格式的镜像。由于裸的彻底,性能上来说的话还是不错的。目前来看,KVM和XEN默认的格式好像还是这个格式。因为其原始,有很多原生的特性,例如直接挂载也是一件简单的事情。
裸的好处还有就是简单,支持转换成其它格式的虚拟机镜像对裸露的它来说还是很简单的(如果其它格式需要转换,有时候还是需要它做为中间格式),空间使用来看,这个很像磁盘,使用多少就是多少(du -h看到的大小就是使用大小),但如果你要把整块磁盘都拿走的话得全盘了(copy镜像的时候),会比较消耗网络带宽和I/O。接下来还有个有趣的问题,如果那天你的硬盘用着用着不够用了,你咋办,在买一块盘。但raw格式的就比较犀利了,可以在原来的盘上追加空间:dd if=/dev/zero of=zeros.raw bs=1024k count=4096(先创建4G的空间)cat foresight.img zeros.raw > new-foresight.img(追加到原有的镜像之后)
当然,好东西是吹出来的,谁用谁知道,还是有挺多问题的。由于原生的裸格式,不支持snapshot也是很正常的。传说有朋友用版本管理软件对raw格式的文件做版本管理从而达到snapshot的能力,估计可行,但没试过,这里也不妄加评论。但如果你使用LVM的裸设
备,那就另当别论。说到LVM还是十分的犀利的,当年用LVM做虚拟机的镜像,那性能杠杠的。而且现在好多兄弟用虚拟化都采用LVM来做的。在LVM上做了很多的优化,国外听说也有朋友在LVM增量备份方面做了很多的工作。目前来LVM的snapshot、性能、可扩展性方面都还是有相当的效果的。目前来看的话,备份的话也问题不大。就是在虚拟机迁移方面还是有很大的限制。但目前虚拟化的现状来看,真正需要热迁移的情况目前需求还不是是否的强烈。虽然使用LVM做虚拟机镜像的相关公开资料比较少,但目前来看牺牲一点灵活性,换取性能和便于管理还是不错的选择。
对于LVM相关的特性及使用可以参考如下链接:
http://www.ibm.com/developerworks/linux/library/l-lvm2/index.html
cow
copy-on-write format, supported for historical reasons only and not available to QEMU on Windows
曾经qemu的写时拷贝的镜像格式,目前由于历史遗留原因不支持窗口模式。从某种意义上来说是个弃婴,还没得它成熟就死在腹中,后来被qcow格式所取代。
qcow
the old QEMU copy-on-write format, supported for historical reasons and superseded by qcow2
一代的qemu的cow格式,刚刚出现的时候有比较好的特性,但其性能和raw格式对比还是有很大的差距,目前已经被新版本的qcow2取代。其性能可以查看如下链接:
http://www.linux-kvm.org/page/Qcow2
qcow2
QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots,
smaller images on filesystems that don’t support sparse files, optional AES encryption, and optional zlib compression
现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能,这个也算是redhat的官方渠道了,哈哈,希望有朋友能拍他们砖:
https://fedoraproject.org/wiki/Features/KVM_qcow2_Performance
对于qcow2的格式,几点还是比较突出的,qcow2的snapshot,可以在镜像上做N多个快照:
更小的存储空间,即使是不支持holes的文件系统也可以(这下du -h和ls -lh看到的就一样了)
Copy-on-write support, where the image only represents changes made to an underlying disk
image(这个特性SUN ZFS表现的淋漓尽致)
支持多个snapshot,对历史snapshot进行管理
支持zlib的磁盘压缩
支持AES的加密
vmdk
VMware 3 & 4, or 6 image format, for exchanging images with that product
VMware的格式,这个格式说的蛋疼一点就有点牛X,原本VMware就是做虚拟化起家,自己做了一个集群的VMDK的pool,做了自己的虚拟机镜像格式。又拉着一些公司搞了一个OVF的统一封包。从性能和功能上来说,vmdk应该算最出色的,由于vmdk结合了VMware的很多能力,目前来看,KVM和XEN使用这种格式的情况不是太多。但就VMware的Esxi来看,它的稳定性和各方面的能力还是可圈可点。
vdi
VirtualBox 1.1 compatible image format, for exchanging images with VirtualBox.
SUN收购了VirtualBox,Oracle又收购了SUN,这么说呢,vdi也算虚拟化这方面的一朵奇葩,可惜的是入主的两家公司。SUN太专注于技术(可以说是IT技术最前端也不为过),Oracle又是开源杀手(mysql的没落)。单纯从能力上来说vdi在VirtualBox上的表现还是不错的。也是不错的workstation级别的产品。
说了这么多虚拟机镜像格式,这么多虚拟化,做云计算的伤不起呀,得为长期发展考虑,也有朋友对镜像的转换做了很多事情,简单看看几种镜像的转化:
raw->qcow2 此步骤使用qemu-img工具实现,如果机器上没有,可以通过rpm或yum进行安装,包名为qemu-img。
qemu-img是专门虚拟磁盘映像文件的qemu命令行工具。
具体命令如下:
qemu-img convert -f raw centos.img -O qcow2 centos.qcow2
参数说明:convert 将磁盘文件转换为指定格式的文件
-f 指定需要转换文件的文件格式
-O 指定要转换的目标格式
转换完成后,将新生产一个目标映像文件,原文件仍保存。
VMDK–>qcow2:
kevin@kevin:~# qemu-img convert -f vmdk -O qcow2 SLES11SP1-single.vmdk SLES11SP1-single.img
http://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm3/index.html
qcow2–>raw:
kevin@kevin:~$ qemu-img convert -O qcow2 image-raw.raw image-raw-converted.qcow
10.4 使用OZ制作镜像2
创建 CentOS6u3-x86_64.tdl 文件,内容如下:
[root@openstack-compute-node1 opt]# cat CentOS6u3-x86_64.tdl
[root@openstack-compute-node1 opt]# oz-install -u -d3 CentOS6u3-x86_64.tdl
(注:镜像制作完默认会存放到/var/lib/libvirt/images/ 目录下,可以在/etc/oz/oz.cfg 配置文件中进行修改。)上传镜像的目录:
[root@openstack-compute-node1opt]#virt-sysprep--add /var/lib/libvirt/images/CentOS6u3-x86_64.dsk
10.5 查看文件信息
[root@openstack-compute-node1opt]#qemu-img info /var/lib/libvirt/images/CentOS6u3-x86_64.dsk /var/lib/libvirt/images/CentOS6u3-x86_64.dsk
image: /var/lib/libvirt/images/CentOS6u3-x86_64.dsk
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.1G
10.6 上传镜像到 Glance
Glance下,保存目录位置:glance-api.conf
filesystem_store_datadir = /var/lib/glance/images/
[root@linux-node1 ~]# glance image-create --name "CentOS-6.3" --is-public true --disk-format qcow2 --container-format bare --file /var/lib/libvirt/images/CentOS6u3-x86_64.dsk
10.7 查看镜像文件
[root@linux-node1 ~]# glance image-list
+--------------------------------------+------------+-------------+------------------+-------------+--------+
| ID
| Name
| Disk Format | Container Format | Size
Status |
+--------------------------------------+------------+-------------+------------------+-------------+--------+
| 81ee6cd6-9ffb-40f7-9997-b224b189faa5 | CentOS-6.3 | qcow2
| bare
| 10737418240 |
active |
+--------------------------------------+------------+-------------+------------------+-------------+--------+
10.8 手动制作镜像
手动制作镜像有两种方式,如果在图形界面下,可以使用virt-manager 。在命令行界面可是使用virt-install
命令进行创建。这两个命令均在virt-manager 包中。
[root@openstack-node1 ~]# yum install virt-manager
10.8.1 创建镜像文件
[root@openstack-node1 ~]# qemu-img create -f raw /opt/centos6u5-x86_64.raw 10G
10.8.2 创建镜像虚拟机
注意—name可以随便起名字,单是要与下文的virsh start 相一致;
[root@openstack-node1~]# virt-install --virt-type kvm --name centos6u4-x86_64 --ram 1024 --cdrom=/home/images/CentOS-6.4-x86_64-bin-DVD1.iso --disk path=/opt/centos6u4-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel6
10.8.3 使用vnc 客户端连接安装系统
使用VNC 客户端连接至默认的5900 端口,开始安装系统。
1. 分区的时候只划分一个/分区,不划分其它的比如/root 和交换分区。
安装完毕后。
[root@openstack-node1 ~]# virsh start centos6u4-x86_64
10.8.4 安装完毕后设置
1.网络设置
[root@openstack-node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
删除HWADDR=""
ONBOOT=no 修改为ONBOOT=yes
10.8.5 上传镜像到Glance
glance image-create --name "CentOs-minimal" --is-public true --disk-format qcow2 --container-format bare --file /home/images/imagetest/centos6u5-x86_64.raw
10.9 手动制作Windows 7 镜像
10.9.1 下载硬盘相关驱动
[root@app-node1~]#wget https://launchpad.net/kvm-guest-drivers-windows/20120712/20120712/+download/virtio-win-drivers-20120712-1. vfd
[root@app-node1 ~]# wget
https://launchpad.net/kvm-guest-drivers-windows/20120712/20120712/+download/virtio-win-drivers-20120712-1. iso
10.9.2 创建虚拟磁盘
[root@app-node1 ~]# qemu-img create -f raw /opt/windows7-ultimate-x86_64.raw 20G
10.9.3 开始安装
[root@app-node1 opt]# virt-install --virt-type kvm --name window7 --ram 1024 --cdrom /opt/cn_windows_7_ultimate_with_sp1_x64_dvd_618537.iso --disk path=/opt/windows7-ultimate-x86_64.raw,device=disk,bus=virtio --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=windows --disk path=/opt/virtio-win-drivers-20120712-1.vfd,device=floppy --os-type=windows --os-variant win7 --boot cdrom
10.9.4 安装网卡驱动
操作系统安装完毕后,关闭虚拟机。重新启动,加载 iso 镜像。安装网卡驱动。同时可以对系统进行一些自定义的配置,比如开启远程桌面等等。
[root@openstack-node1 opt]# /usr/libexec/qemu-kvm -m 1024 -drive file=/opt/windows7-ultimate-x86_64.raw -cdrom /opt/virtio-win-drivers-20120712-1.iso -net nic,model=virtio -net user -boot order=c -usbdevice tablet
-nographic -vnc :3
10.9.5 上传镜像到Glance
至此Windows 7 镜像创建完毕,可以上传到Glance 上以供使用了。对于企业桌面使用的话,可以初始化 安装一些常用的软件。然后再将镜像上传到Glance 上去。
glance image-create --name "Windows7-x86_64" --is-public true --disk-format qcow2 --container-format bare --file /opt/windows7-ultimate-x86_64.raw
10.10 手动制作Windows 2008 镜像
10.10.1 下载驱动程序
[root@openstack-node1 ~]# cd /usr/local/src
[root@openstack-node1 src]# wget
https://launchpad.net/kvm-guest-drivers-windows/20120712/20120712/+download/virtio-win-full-20120712.tar.gz
[root@openstack-node1 src]# tar zxf virtio-win-full-20120712.tar.gz
[root@openstack-node1 src]# cd virtio-win-full-20120712
10.10.2 创建虚拟磁盘
[root@openstack-node1 opt]# qemu-img create -f raw /opt/windows-2008-x86_64.raw 10G
10.10.3 启动安装程序,加载硬盘驱动
[root@openstack-node1 opt]# virt-install --virt-type kvm --name windows2008 --ram 1024 --cdrom /opt/windows-2008-x86_64.iso --disk path=/opt/windows-2008-x86_64.raw,device=disk,bus=virtio --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=windows --disk path=/opt/virtio-win-drivers-20120712-1.vfd,device=floppy --os-type=windows --os-variant win2k8 --boot
cdrom
(注:如果无法自动加载驱动程序,请手动选择软盘里面的驱动程序,加载硬盘驱动。)
10.10.4 重启虚拟机,加载网卡驱动
[root@openstack-node1 opt]# /usr/libexec/qemu-kvm -m 1024 -drive file=/opt/windows-2008-x86_64.raw -cdrom /opt/virtio-win-drivers-20120712-1.iso -net nic,model=virtio -net user -boot order=c -usbdevice tablet -nographic -vnc :0
10.10.5 上传镜像到Glance
[root@app-node1 ~]# glance image-create --name "Windows7-x86_64" --is-public true --disk-format qcow2 --container-format bare --file /opt/windows7-ultimate-x86_64.raw
11 使用命令行管理云主机
首先使用命令source keystone-demo:
Neutron net-create #创建一个名为flat_net的网络;
Neutron subnet-create 子网名字,并将其添加到刚构建的那个网络;
创建一个子网:
在创建虚拟机之前,你需要知道如下一些东西,首先需要知道你想创建那样的虚拟机,因此需要执行下面的命令nova flavor-list:
在这个例子中我将演示xbniao-amazon,4G内存,1个虚拟内核,50G硬盘的镜像;
下一步,需要选择一个镜像来安装虚拟机,通过如下命令可以得到一个可以使用的镜像名称:
nova image-list:
复制你想使用的镜像ID;接着需要选择一个安全组来使用。可以使用如下命令来实现:
nova secgroup-list
Nova stop vmname:停止虚拟机;
Nova suspend vmname:暂停虚拟机;
nova delete vmname:删除虚拟机。
创建实例存放位置 修改的是/etc/nova.conf里面的state_path变量