本文翻译自官方部署指南第六章。部署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_*的值。      

 
 
  1. [filter:authtoken]
  2. admin_tenant_name = service
  3. admin_user = glance
  4. admin_password = glance

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

 
 
  1. [pipeline:glance-api]
  2. pipeline = versionnegotiation authtoken auth-context apiv1app

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

 
 
  1. [paste_deploy]
  2. flavor = keystone

重启glance-api服务: service   glance-api    restart     
译者备注:重启服务实际应该是: service  openstack-glance-api   restart      
在/etc/glance/glance-registry.conf文件末尾追加如下内容:

 
 
  1. [paste_deploy]
  2. flavor = keystone

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

 
 
  1. [filter:authtoken]
  2. admin_tenant_name = service
  3. admin_user = glance
  4. admin_password = glance

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

 
 
  1. [pipeline:glance-registry]
  2. #pipeline = context registryapp
  3. # NOTE: use the following pipeline for keystone
  4. pipeline = authtoken auth-context context registryapp

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

 
 
  1. sql_connection = mysql://glance:yourpassword@192.168.206.130/glance

注意:任何时候在修改完.conf配置文件后,记得重启相应的服务,使新的修改生效。     
现在,迁移数据库至MySQL:       
# glance-manage   db_sync     
重启glance-registry与glance-api服务:    
# service  openstack-glance-registry   restart     
# service  openstack-glance-api   restart      
注意事项:本文档为配置镜像缓存,读者可参考http://glance.openstack.org获得更多信息。    
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      
# wget
http://smoser.brickies.net/ubuntu/ttylinux-uec/ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz
# tar -zxvf ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz     

上传内核:    
# glance --os_username=adminUser  --os_password=secretword  --os_tenant=openstackDemo  \     
> --os_auth_url=
http://127.0.0.1:5000/v2.0   add name="tty-linuxkernel"  \     
> 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   \     
>--os_tenant=openstackDemo --os_auth_url=
http://127.0.0.1:5000/v2.0   \     
> 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   、     
> --os_tenant=openstackDemo  --os_auth_url=
http://127.0.0.1:5000/v2.0   \     
> 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  \    
> --os_tenant=openstackDemo  --os_auth_url=http://127.0.0.1:5000/v2.0  index    
1

二、配置Hypervisor     
对于生产环境,多数人会选择KVM或基于Xen的hypervisor。KVM通过libvirt运行,而Xen则通过XenAPI调用运行。我们默认选择的是KVM,而且它仅需要我们做最少的配置修改。本手册主要讲解KVM。    
2.1 KVM     
KVM是作为Compute默认的hypervisor被配置的。明确的启用KVM,需要在/etc/nova/nova.conf文件中添加如下配置:

 
 
  1. connection_type=libvirt
  2. libvirt_type=kvm

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

  • Raw
  • QEMU Copy-on-write(qcow2)
  • VMware虚拟机格式(vmdk)

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

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       
# modprobe  kvm-amd        
将以下两行追加至/etc/modules文件,这样模块在重启后依然会被字段加载:      
kvm       
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的方式如下:     
connection_type=libvirt       
libvirt_type=qemu        
QEMU支持与KVM一样的虚拟机镜像格式:      
    * Raw      
    * qcow2      
    * vmdk      
译者备注:原文对Xen做了概念性介绍,但无具体配置描述,所以再次省略,感兴趣可以参考xen官方资料http://xen.org/products/xenhyp.html

三、预设网络       
文章将介绍如果在但网络接口上配置使用FlatDHCP模式。      
首先,设置你的/etc/network/interfaces文件:(译者备注,这里说的是Ubuntu环境)      
    * eth0:公网IP,网关      
    * br100:stp off,fd 0      
模版如下:      

 
 
  1. # The loopback network interface
  2. auto lo
  3. iface lo inet loopback
  4. # The primary network interface
  5. auto eth0
  6. iface eth0 inet dhcp
  7. # Bridge network interface for VM networks
  8. auto br100
  9. iface br100 inet static
  10. address 192.168.100.1
  11. netmask 255.255.255.0
  12. bridge_stp off
  13. 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> CREATE  DATABASE  nova;     
创建MySQL用户并赋予对新建数据库的所有权限:    
mysql> GRANT  ALL ON  nova.*  TO  'nova'@'%’IDENTIFIED  BY  '密码';     
退出数据库:    
mysql> 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:yourpassword@192.168.206.130/nova    
在/etc/nova/nova.conf文件中添加以下这些网络设置,你可以在文件中添加注释说明行,方法是建立以#符号开头的行(以#开头的行全为注释行):

 
 
  1. auth_strategy=keystone
  2. network_manager=nova.network.manager.FlatDHCPManager
  3. fixed_range=192.168.100.0/24
  4. flat_network_dhcp_start=192.168.100.2
  5. public_interface=eth0
  6. flat_interface=eth0
  7. flat_network_bridge=br100

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

 
 
  1. [DEFAULT]
  2. # LOGS/STATE
  3. verbose=True
  4. # AUTHENTICATION
  5. auth_strategy=keystone
  6. # SCHEDULER
  7. compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
  8. # VOLUMES
  9. volume_group=nova-volumes
  10. volumevolume_name_template=volume-%08x
  11. iscsi_helper=tgtadm
  12. # DATABASE
  13. sql_connection=mysql://nova:yourpassword@192.168.206.130/nova
  14. # COMPUTE
  15. libvirt_type=qemu
  16. connection_type=libvirt
  17. instanceinstance_name_template=instance-%08x
  18. api_paste_config=/etc/nova/api-paste.ini
  19. allow_resize_to_same_host=True
  20. # APIS
  21. osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
  22. ec2_dmz_host=192.168.206.130
  23. s3_host=192.168.206.130
  24. # RABBITMQ
  25. rabbit_host=192.168.206.130
  26. # GLANCE
  27. image_service=nova.image.glance.GlanceImageService
  28. glance_api_servers=192.168.206.130:9292
  29. # NETWORK
  30. network_manager=nova.network.manager.FlatDHCPManager
  31. force_dhcp_release=True
  32. dhcpbridge_flagfile=/etc/nova/nova.conf
  33. firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
  34. my_ip=192.168.206.130
  35. public_interface=br100
  36. vlan_interface=eth0
  37. flat_network_bridge=br100
  38. flat_interface=eth0
  39. fixed_range=10.0.0.0/24
  40. # NOVNC CONSOLE
  41. novncproxy_base_url=http://192.168.206.130:6080/vnc_auto.html
  42. vncserver_proxyclient_address=192.168.206.130
  43. vncserver_listen=192.168.206.130

你还需要修改api-paste.ini文件,使用keystone作为认证服务器。译者备注:原文档此处无配置说明,原文的附录部分有一个配置文件示例。    
重启nova-服务,接着与数据库同步数据:    
# for  svc  in  api  objectstore  compute  network  volume  scheduler  cert;  \     
> 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  \    
> --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_AUTH_URL=
http://192.168.206.130:5000/v2.0/
export OS_REGION_NAME=RegionOne    
接着,让这些变量应用到你的系统环境中:   
$ source  ~/creds/openrc   
通过nova客户端命令显示可用镜像验证认证功能是否正常:    
2
注意你的系统中ID号将会此有所不同。   
5.5 安装额外的Compute节点    
为了大规模部署Compute,有多种途径可以帮助你在多个节点安装Compute。   
你可以安装所有的nova- 软件包及其依赖关系包,或仅安装nova-network与nova-compute组件在你的云控制节点上。你可以在任何地方安装nova- 服务,只要服务可以访问nova.conf并知道消息队列软件(Rabbitmq | Qpid)安装在哪即可。   
因为Compute节点需要查询数据库信息,所以nova客户端与MySQL客户端软件包都应该安装在附加Compute节点上。   
拷贝nova.conf到所有的附件compute节点。

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐