天天看点

OpenStack云第四天

OpenStack云第四天

本文翻译自官方部署指南第六章。部署OpenStack Compute及Image服务。在云环境中OpenStack Compute与Image service协同工作,实现通过REST APIs访问虚拟机及镜像的功能。

目录: 

一、安装与配置Image服务 

二、配置Hypervisor 

三、预设网络 

四、部署数据库 

五、安装与配置云控制器

一、安装与配置Image Service 

1.1 使用root身份,安装Image service 

$sudo yum install openstack-nova  openstack-glance 

安装后,你需要删除sqlite数据库文件,然后修改配置指向MySQL数据库。删除/var/lib/glance目录下的glance.sqlite文件。 

# rm  /var/lib/glance/glance.sqlite 

1.2 配置后端镜像(Image)服务数据库 

配置后端数据存储。使用MySQL创建一个glance数据库以及glance账户,赋予"glance”账户对glance数据库的所有权限。 

运行如下命令,进入MySQL数据库: 

$ mysql  -u  root  -p                               //根据提示输入MySQL管理员密码 

创建glance数据库: 

mysql> CREATE  DATABASE  glance; 

为新创建的数据库创建MySQL账户并赋予完全控制权限: 

mysql> GRANT  ALL  ON  glance.*  TO  'glance'@'%’IDENTIFIED  BY  '你的密码’; 

退出数据库: 

mysql> quit 

修改Glance配置文件 

更新/etc/glance/glance-api-paste.ini文件,修改[filter:authtoken]下admin_*的值。

[filter:authtoken] 

admin_tenant_name = service 

admin_user = glance 

admin_password = glance  

确保glance-api管道部分包括authtoken

[pipeline:glance-api] 

pipeline = versionnegotiation authtoken auth-context apiv1app  

在/etc/glance/glance-api.conf文件末尾追加如下内容:

[paste_deploy] 

flavor = keystone  

重启glance-api服务: service   glance-api    restart 

译者备注:重启服务实际应该是: service  openstack-glance-api   restart 

在/etc/glance/glance-registry.conf文件末尾追加如下内容:

更新/etc/glance/glance-registry-paste.ini文件,修改[filter:authtoken]下admin_*的值:

确保glance-registry管道部分包括authtoken: 

[pipeline:glance-registry] 

#pipeline = context registryapp 

# NOTE: use the following pipeline for keystone 

pipeline = authtoken auth-context context registryapp 

确保/etc/glance/glance-registry.conf和/etc/glance/glance-scrubber.conf文件数据库指向是MySQL而不是sqlite。

sql_connection = mysql://glance:[email protected]/glance 

注意:任何时候在修改完.conf配置文件后,记得重启相应的服务,使新的修改生效。 

现在,迁移数据库至MySQL: 

# glance-manage   db_sync 

重启glance-registry与glance-api服务: 

# service  openstack-glance-registry   restart 

# service  openstack-glance-api   restart 

Image服务排除,可以参考日志文件/var/log/glance/registry.log或/var/log/glance/api.log。 

1.3 验证Image Service是否安装成功 

你可以使用如下命令获得软件的版本号: 

# glance  --version 

Essex版本的挣钱版本号为glance  2012.1 

下载测试性镜像文件: 

# mkdir   /tmp/images 

# cd   /tmp/images 

# tar -zxvf ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz 

上传内核: 

# glance --os_username=adminUser  --os_password=secretword  --os_tenant=openstackDemo  \ 

> disk_format=aki container_format=aki     < ttylinux-uec-amd64-12.1_2.6.35-22_1-vmlinuz 

Uploading image 'tty-linux-kernel' 

========================================================================== 

============================================================================== 

=========[100%] 41.8M/s, ETA 0h 0m 0s 

Added new image with ID: 599907ff-296d-4042-a671-d015e34317d2 

上传initrd文件: 

# glance --os_username=adminUser --os_password=secretword   \ 

> add name="tty-linuxOpenStackramdisk"   \ 

> disk_format=ari container_format=ari < ttylinux-uec-amd64-12.1_2.6.35-22_1-loader 

Uploading image 'tty-linux-ramdisk' 

===[100%] 937.483441K/s, ETA 0h 0m 0s 

Added new image with ID: 7d9f0378-1640-4e43-8959-701f248d999d 

上传镜像文件: 

# glance --os_username=adminUser --os_password=secretword   、 

> add name="tty-linux"disk_format=ami    container_format=ami   \ 

> kernel_id=599907ff-296d-4042-a671-d015e34317d2   \ 

> ramdisk_id=7d9f0378-1640-4e43-8959-701f248d999d < ttylinux-uecamd64-12.1_2.6.35-22_1.img 

Uploading image 'tty-linux' 

===[100%] 118.480514M/s, ETA 0h 0m 0s 

Added new image with ID: 21b421e5-44d4-4903-9db0-4f134fdd0793 

现在在glance索引中将显示有一个合法的Image。 

# glance --os_username=adminUser  --os_password=secretword  \ 

<a href="http://manual.blog.51cto.com/attachment/201208/29/3300438_1346205942aWEh.png"></a>

对于生产环境,多数人会选择KVM或基于Xen的hypervisor。KVM通过libvirt运行,而Xen则通过XenAPI调用运行。我们默认选择的是KVM,而且它仅需要我们做最少的配置修改。本手册主要讲解KVM。 

2.1 KVM 

KVM是作为Compute默认的hypervisor被配置的。明确的启用KVM,需要在/etc/nova/nova.conf文件中添加如下配置:

connection_type=libvirt 

libvirt_type=kvm  

KVM hypervisor支持如下的虚拟机镜像格式:

Raw

QEMU Copy-on-write(qcow2)

VMware虚拟机格式(vmdk)

本文只要描述如果开启你系统上的KVM,你也需需要以下这些针对特定发行版本的文档作为参考:

Installation Guide.

2.2 检查你的硬件是否支持虚拟化 

使用KVM需要主机CPU支持虚拟化技术(VT)。 

如果你在运行Ubuntu,当在BIOS中开启虚拟化功能以及KVM正确的被安装后,可以使用kvm-ok命令检查你的处理器是否支持VT,如果KVM是开启的,输出应该像这样: 

INFO: /dev/kvm exists 

KVM acceleration can be used 

如果未能开启KVM,输出应该像这样的信息: 

INFO: Your CPU does not support KVM extensions 

KVM acceleration can NOT be used 

如果你的发行版本没有kvm-ok命令,你也可以通过检查处理器标记查看是否支持虚拟化技术。对于Intel的处理器标记为vmx,AMD处理器标记为svm。可以通过以下简单命令来判断: 

# egrep  '(vmx|svm)’  --color=always   /proc/cpuinfo 

有些系统 需要你在BIOS中开启virtualization technology(VT),如果你确信自己的处理器支持硬件加速而上面的命令又没有任何输出,你也许需要重启电脑,进入系统BIOS,开启VT选项。 

2.3 开启KVM模块 

由于KVM是基于内核的虚拟化技术,所以需要确保kvm模块已经被正确加载。模块名称为kvm,还有kvm-intel或kvm-amd。这些模块的加载也许在你安装KVM软件是就已经自动完成了,你可以使用lsmod命令检查它们是否被正确加载,以下是基于Intel处理器的输出结果: 

$ lsmod | grep kvm 

kvm_intel 137721 9 

kvm 415459 1 kvm_intel 

接下来,我们看看如果你的系统未能自动加载模块时,如果手动为基于Intel或AMD处理器加载相应模块。 

如果你的主机是基于Intel的处理器,以root身份运行如下命令加载内核模块: 

# modprobe  kvm 

# modprobe  kvm-intel 

将以下两行追加至/etc/modules文件,这样模块在重启后依然会被字段加载: 

kvm 

kvm-intel 

如果你的主机是基于AMD的处理器,以root身份运行如下命令加载内核模块: 

# modprobe  kvm-amd 

kvm-amd 

2.4 常见故障 

尝试开启虚拟机实例时提示ERROR状态,并且在/var/log/nova/nova-compute.log日志中有如下信息: 

libvirtError: internal error no supported architecture for os type 'hvm' 

这表明你的KVM内核模块未被正确加载。 

2.5 QEMU 

从Compute service架构来看,QEMU hypervisor非常像KVM hypervisor。两者都通过libvirt控制、都支持一样的特性设置,并且KVM所有的虚拟机镜像都与QEMU兼容。两者最大的差别是QEMU不支持原生虚拟化技术(虚拟机直接运行于硬件之上)。 

译者备注:虚拟化有原生虚拟化与宿主虚拟化,宿主虚拟化典型代表是VMware Workstation,其运行在一个已经安装好的系统之上。原生虚拟化则可以直接运行与硬件之上。 

所以,QEMU性能比KVM稍差些,一般在生产环境部署的较少。 

使用QEMU的案例有: 

        运行于老的硬件平台上 

        测试环境 

启用QEMU的方式如下: 

libvirt_type=qemu 

QEMU支持与KVM一样的虚拟机镜像格式: 

    * Raw 

    * qcow2 

    * vmdk 

文章将介绍如果在但网络接口上配置使用FlatDHCP模式。 

首先,设置你的/etc/network/interfaces文件:(译者备注,这里说的是Ubuntu环境) 

    * eth0:公网IP,网关 

    * br100:stp off,fd 0 

模版如下:

# The loopback network interface 

auto lo 

iface lo inet loopback 

# The primary network interface 

auto eth0 

iface eth0 inet dhcp 

# Bridge network interface for VM networks 

auto br100 

iface br100 inet static 

address 192.168.100.1 

netmask 255.255.255.0 

bridge_stp off 

bridge_fd 0  

还需要安装bridge-utils: 

sudo  apt-get   install   bridge-utils 

RHEL配置要求 

在/etc/qpidd.conf文件中设置auth=no 

设置SELinux模式为permissive: 

# sudo  setenforce   permissive 

如果是基于RHEL6.2的系统,使用openstack-config包关闭DHCP release。 

# sudo  openstack-config   --set   /etc/nova/nova.conf   DEFAULT  force_dhcp_release  False 

如果是基于RHEL6.3的系统,需要安装dnsmasq工具包: 

$ sudo  yum   install   dnsmasq-utils 

如果你使用的客户机镜像没有单独的分区,要使文件可以注入需要允许libguestfs检查镜像,设置方法如下: 

$ sudo openstack-config --set /etc/nova/nova.conf DEFAULT   libvirt_inject_partition -1

四、在云控制器上配置SQL数据库 

通过mysql客户端工具连接MySQL服务器: 

$ mysql  -u   root   -p                  //根据提示输入密码 

创建nova数据库: 

mysql&gt; CREATE  DATABASE  nova; 

创建MySQL用户并赋予对新建数据库的所有权限: 

mysql&gt; GRANT  ALL ON  nova.*  TO  'nova'@'%’IDENTIFIED  BY  '密码'; 

mysql&gt; quit

五、安装与配置云控制器 

安装消息队列服务器,RabbitMQ。当然你也可以选择Apache Qpid,你可以参考官方Compute Administration Manual中的介绍。 

# yum  -y  install   rabbitmq-server 

安装nova-开头的软件包,相关依赖包会被自动安装。 

# yum  -y  install   openstack-nova-compute   openstack-nova-volume   openstack-nova-novncproxy  openstack-nova-api   openstack-nova-ajax-console-proxy   openstack-nova-cert   openstack-nova-consoleauth   openstack-nova-doc   openstack-nova-scheduler  openstack-nova-network 

译者备注:原文此处使用的包为nova-compute格式,不包含openstack。 

5.1 配置OpenStack Compute 

很多Compute服务的配置选项都存放在/etc/nova/nova.conf文件中。这里我们给出了保障运行的最小配置说明。更多配置选项可以参考OpenStack Compute Administration Manual文档。 

一般安装软件包会自动设置用户及权限,如果没有自动完成,以下为手动方式设置: 

# groupadd   nova 

# usermod  -g   nova   nova 

# chown  -R  root:nova   /etc/nova 

# chmod   640   /etc/nova/nova.conf 

编辑/etc/nova/nova.conf设置hypervisor,默认hypervisor为kvm,如果你需要使用其他的hypervisor如Xen,请修改libvirt_type=选项。 

确保数据库的连接设置: 

格式:  sql_connection=mysql://[user]:[pass]@[primary IP]/[db name] 

示例:  sql_connection=mysql://nova:[email protected]/nova 

在/etc/nova/nova.conf文件中添加以下这些网络设置,你可以在文件中添加注释说明行,方法是建立以#符号开头的行(以#开头的行全为注释行):

auth_strategy=keystone 

network_manager=nova.network.manager.FlatDHCPManager 

fixed_range=192.168.100.0/24 

flat_network_dhcp_start=192.168.100.2 

public_interface=eth0 

flat_interface=eth0 

flat_network_bridge=br100  

以下为nova.conf文件配置的示例:

[DEFAULT] 

# LOGS/STATE 

verbose=True 

# AUTHENTICATION 

# SCHEDULER 

compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler 

# VOLUMES 

volume_group=nova-volumes 

volumevolume_name_template=volume-%08x 

iscsi_helper=tgtadm 

# DATABASE 

sql_connection=mysql://nova:[email protected]/nova 

# COMPUTE 

instanceinstance_name_template=instance-%08x 

api_paste_config=/etc/nova/api-paste.ini 

allow_resize_to_same_host=True 

# APIS 

osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions 

ec2_dmz_host=192.168.206.130 

s3_host=192.168.206.130 

# RABBITMQ 

rabbit_host=192.168.206.130 

# GLANCE 

image_service=nova.image.glance.GlanceImageService 

glance_api_servers=192.168.206.130:9292 

# NETWORK 

force_dhcp_release=True 

dhcpbridge_flagfile=/etc/nova/nova.conf 

firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver 

my_ip=192.168.206.130 

public_interface=br100 

vlan_interface=eth0 

flat_network_bridge=br100 

fixed_range=10.0.0.0/24 

# NOVNC CONSOLE 

novncproxy_base_url=http://192.168.206.130:6080/vnc_auto.html 

vncserver_proxyclient_address=192.168.206.130 

vncserver_listen=192.168.206.130  

你还需要修改api-paste.ini文件,使用keystone作为认证服务器。译者备注:原文档此处无配置说明,原文的附录部分有一个配置文件示例。 

重启nova-服务,接着与数据库同步数据: 

# for  svc  in  api  objectstore  compute  network  volume  scheduler  cert;  \ 

&gt; do  sudo  service  openstack-nova-$svc  start;  sudo  chkconfig  openstack-nova-$svc  on;  done 

检查所有的服务是否启动成功,查看/var/log/nova日志文件是否有错误。 

为Compute配置数据库,通过如下命令在后端数据库中创建数据表: 

sudo  nova-manage   db   sync 

如果你看到任何响应信息,可以查看/var/log/nova/nova-manage.log查看问题所在。没有回应说明命令正确的被执行了。 

重启服务: 

sudo restart openstack-nova-api 

sudo restart openstack-nova-compute 

sudo restart openstack-nova-network 

sudo restart openstack-nova-scheduler 

sudo restart openstack-nova-vncproxy 

sudo restart openstack-nova-volume 

sudo restart libvirt-bin                                            //RHEL中为libvirtd服务 

sudo /etc/init.d/rabbitmq-server restart 

5.2 为Compute虚拟机实例创建网络 

你必须运行如下命令为虚拟机创建在nova.conf中设定的网络及br100桥接设备。这个例子中我们为虚拟机分配192.168.100.0/24的网络,但你也可以提供为自己的网络。示例中我们我们把这个网络标记为"private”: 

# nova-manage network create private --multi_host=T --fixed_range_v4=192.168.100.0/24  \ 

&gt; --bridge_interface=br100 --num_networks=1 --network_size=256 

5.3 验证Compute的安装 

你可以使用root身份运行nova-manage命令来确保所有的Compute服务正常运行: 

# nova-manage   service  list 

正常的话,你会收到笑脸 : -)的回应而不是X符号的回应,以下为示例: 

Binary Host Zone Status State Updated_At 

nova-compute myhost nova enabled :-) 2012-04-02 14:06:15 

nova-cert myhost nova enabled :-) 2012-04-02 14:06:16 

nova-volume myhost nova enabled :-) 2012-04-02 14:06:14 

nova-scheduler myhost nova enabled :-) 2012-04-02 14:06:11 

nova-network myhost nova enabled :-) 2012-04-02 14:06:13 

nova-consoleauth myhost nova enabled :-) 2012-04-02 14:06:10 

你也可以运行nova-manage查看安装软件的版本: 

# nova-manage  version  list 

Essex版本的Compute版本号是2012.1 

2012.1 (2012.1-LOCALBRANCH:LOCALREVISION) 

5.4 定义Compute与Image服务的认证 

创建nova与glance命令行需要使用的变量,并保存至openrc文件,本文将openrc文件保存至~/creds目录下: 

$ mkdir  ~/creds 

$ nano   ~/creds/openrc 

在你创建的openrc文件中粘贴以下内容: 

export OS_USERNAME=adminUser 

export OS_TENANT_NAME=openstackDemo 

export OS_PASSWORD=secretword 

export OS_REGION_NAME=RegionOne 

接着,让这些变量应用到你的系统环境中: 

$ source  ~/creds/openrc 

通过nova客户端命令显示可用镜像验证认证功能是否正常: 

注意你的系统中ID号将会此有所不同。 

5.5 安装额外的Compute节点 

为了大规模部署Compute,有多种途径可以帮助你在多个节点安装Compute。 

你可以安装所有的nova- 软件包及其依赖关系包,或仅安装nova-network与nova-compute组件在你的云控制节点上。你可以在任何地方安装nova- 服务,只要服务可以访问nova.conf并知道消息队列软件(Rabbitmq | Qpid)安装在哪即可。 

因为Compute节点需要查询数据库信息,所以nova客户端与MySQL客户端软件包都应该安装在附加Compute节点上。 

拷贝nova.conf到所有的附件compute节点。

未完待续… … 

本文转自丁丁历险51CTO博客,原文链接:http://blog.51cto.com/manual/976083 ,如需转载请自行联系原作者