CentOS6.5编译安装openstack

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变量

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值