OpenStack镜像构建操作手册_第1页
OpenStack镜像构建操作手册_第2页
OpenStack镜像构建操作手册_第3页
OpenStack镜像构建操作手册_第4页
OpenStack镜像构建操作手册_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 OpenStack 镜像构建操作手册目 录 TOC o 1-3 h z u HYPERLINK l _Toc522787861 前言 PAGEREF _Toc522787861 h 3 HYPERLINK l _Toc522787862 1.手动制作OpenStack镜像 PAGEREF _Toc522787862 h 3 HYPERLINK l _Toc522787863 2.上传镜像 PAGEREF _Toc522787863 h 11 HYPERLINK l _Toc522787864 3.DIB工具介绍 PAGEREF _Toc522787864 h 13 HYPERLINK l _

2、Toc522787865 4.功能验证 PAGEREF _Toc522787865 h 15 HYPERLINK l _Toc522787866 5.总结 PAGEREF _Toc522787866 h 17 HYPERLINK l _Toc522787867 6.参考文献 PAGEREF _Toc522787867 h 18前言本文以制作CentOS7.2镜像为例,详细介绍手动制作OpenStack镜像详细步骤,解释每一步这么做的原因。镜像上传到OpenStack glance,支持以下几个功能:支持密码注入功能(nova boot时通过-admin-pass参数指定设置初始密码)支持根分区

3、自动调整(根分区自动调整为flavor disk大小,而不是原始镜像分区大小)支持动态修改密码(使用nova set-password命令可以修改管理员密码)手动制作镜像非常麻烦和耗时,本文后面会介绍一个专门用于自动化构建镜像的项目DIB,通过DIB只需要在命令行上指定elements即可制作镜像,省去了重复下载镜像、启动虚拟机配置镜像的繁杂步骤。镜像的宿主机操作系统为Ubuntu 14.04,开启了VT功能(使用kvm-ok命令验证)并安装了libvirt系列工具,包括virsh、virt-manager、libguestfs-tools等。手动制作OpenStack镜像1.1 下载镜像访问

4、官方镜像地址下载,注意选择中国的镜像源,相对国外镜像下载速度更快,进入后选择版本为7.2.1511,在isos目录下下载x86_64的Minimal镜像,如果网速不给力,最好不要选择下载Netinstall镜像,因为这会在安装时联网下载大量的软件包,重新安装时需要重新下载这些软件包。1.2 创建虚拟机首先创建一个qcow2格式镜像文件,用于虚拟机的根磁盘,大小10G就够了。使用以下脚本创建并启动虚拟机:启动完成后,使用vnc client连接或者使用virt-manager、virt-viewer连接。1.3 安装OS进入虚拟机控制台可以看到CentOS的启动菜单,选择Install Cent

5、os 7,继续选择语言后将进入INSTALLION SUMMARY,其中大多数配置默认即可,SOFTWARE SELECTION选择Minimal Install,INSTALLATION DESTINATION需要选择手动配置分区,我们只需要一个根分区即可,不需要swap分区,文件系统选择ext4或者xfs,存储驱动选择Virtio Block Device,如图:配置完成后就可以开始安装了,在CONFIGURATION中设置root临时密码,只需要暂时记住这个临时密码,制作完后cloud-init会重新设置root初始密码。大约几分钟后,即可自动完成安装配置工作,最后点击右下角的reboo

6、t重启退出虚拟机。1.4 配置OS安装好系统后,需要进行配置才能作为glance镜像使用。首先启动虚拟机(虽然上一步执行的是reboot,但貌似并不会自动启动):如果云主机需要支持root ssh远程登录,需要开启root远程ssh登录功能,修改配置文件/etc/ssh/sshd_config并修改PermitRootLogin值为yes,重启ssh服务生效:注意:不建议开启密码登录功能,使用密钥登录更安全。不建议开启root远程登录。为了加快安装速度,可以配置为本地软件源仓库,若没有本地镜像仓库,则选择国内的软件源,相对官网的速度下载要快。acpidacpid是一个用户空间的服务进程, 用来

7、处理电源相关事件,比如将kernel中的电源事件转发给应用程序,告诉应用程序安全的退出,防止应用程序异常退出导致数据损坏。libvirt可以通过向guest虚拟机发送acpid事件触发电源操作,使虚拟机安全关机、重启等操作,相对于强制执行关闭电源操作更安全。通过acpid事件发送开关机信号即我们经常所说的软重启或者软关机。为了支持软操作,虚拟机需要安装acpid服务,并设置开机自启动:提示:用户执行重启或者关机操作时,OpenStack会首先尝试调用libvirt的shutdown方法,即软关机。当软关机执行失败或者超时(默认120秒),则会调动libvirt的destroy方法,即强制关机,

8、因此如果虚拟机关机或者重启很慢,很可能是acpid没有正常运行。为了使虚拟机进程安全退出,减少数据损坏风险,尽量使用软操作,硬操作可能导致程序崩溃或者数据丢失。console log当操作系统内核崩溃时会报出内核系统crash出错信息,通常启动的时候一闪而过, 而此时系统还没有起来,不能通过远程工具(比如ssh)进入系统查看,我们可以通过配置grub,把这些日志重定向到Serial Console中,这样我们就可以通过Serial console来访问错误信息,以供分析和排错使用。修改配置文件/etc/default/grub,设置GRUB_CMDLINE_LINUX,:通过这个配置,内核信息

9、会以115200的波特率同时发送到tty0和ttyS0串行端口设备。libvirt可以通过一个普通文件模拟这个串行端口:这样内核产生的日志发到ttyS0,实际上写到console.log文件中。OpenStack通过nova console-log命令可以获取该文件内容,查看错误日志。qemu-guest-agentqemu-guest-agent是运行在虚拟机内部的一个服务,libvirt会在本地创建一个unix socket,模拟为虚拟机内部的一个串口设备,从而实现了宿主机与虚拟机通信,这种方式不依赖于TCP/IP网络,实现方式简单方便。如上宿主机的socket文件为org.qemu.gu

10、est_agent.0.instance-00003c2c.sock,在虚拟机内部为/dev/virtio-ports/org.qemu.guest_agent.0。通过这种方式,宿主机可以发送指令写到socket文件中,虚拟机内部的qemu-guest-agent会轮询查看这个串行设备是否有指令,一旦接收到指令就可以执行对应的脚本,从而实现了宿主机控制虚拟机执行命令的功能,其中最常用的指令就是通过libvirt修改虚拟机密码。更多关于qemu-guest-agent请参考官方文档。为了支持OpenStack平台动态修改虚拟机密码功能,我们需要手动安装qemu-guest-agent:修改/e

11、tc/sysconfig/qemu-ga配置文件:可以查看qemu-guest-agent支持的指令:确认包含guest-set-user-password指令,支持修改管理员密码。zeroconfzeroconf是一种古老的自动网络配置技术,在没有DHCP服务的年代,所有服务器都需要网管手动配置IP、hostname等,非常麻烦,zeroconf正好解决了这个问题,不过目前通常都通过DHCP获取地址了。不过一些操作系统仍然会开启这个服务,当DHCP获取IP失败时,会尝试通过zeroconf配置。zeroconf启动时会自动创建一条路由/16,而虚拟机访问metadata服务的地址正好是54,

12、如果启动了zeroconf服务,由于路由冲突,虚拟机不能通过54路由到网络节点的metadata服务了。OpenStack虚拟机通常都是通过DHCP获取IP的,因此我们并不需要zeroconf服务。为了虚拟机能够访问metadata服务,我们必须禁止zeroconf服务,关于该问题的更详细讨论可参考bug#983611:cloud-init接下来安装cloud-init,cloud-init是虚拟机第一次启动时执行的脚本,主要负责从metadata服务中拉取配置信息,完成虚拟机的初始化工作,比如设置主机名、初始化密码以及注入密钥等。growpart虚拟机制作镜像时指定了根分区大小(比如我们设置

13、为10GB),为了使虚拟机能够自动调整为flavor disk指定的根磁盘大小,即自动扩容, 我们需要安装glowpart(老版本叫growroot)并完成以下配置:完成以上工作后,我们的镜像配置基本结束,删除一些无用文件,清理history命令后执行关机:1.5 移除本地信息在宿主机上运行以下命名,移除宿主机信息,比如mac地址等。删除虚拟机,镜像制作完成。上传镜像2.1 使用glance命令上传镜像镜像制作完成,上传centos.qcow2到glance服务中。2.2 通过rbd直接导入镜像由于镜像通常比较大,上传时如果使用glance API,则通过HTTP上传,由于HTTP协议的限制,

14、导致上传非常慢,非常耗时。如果Glance使用Ceph作为存储后端,可以通过rbd直接导入(import)方式上传到Ceph中,速度会大幅度提高。首先需要把镜像转为raw格式:通过glance create创建一个空镜像,并记录uuid(不需要指定文件路径以及其它字段,只是占个坑):使用rbd命令直接导入镜像并创建快照:设置glance镜像location url:设置glance镜像其它属性:2.3 添加qemu-guest-agent属性OpenStack Nova是通过判断镜像元数据hw_qemu_guest_agent是否为yes决定是否支持qemu-guest-agent,代码如下:

15、由此可知,我们必须添加镜像propertyhw_qemu_guest_agent=yes,否则libvert启动虚拟机时不会创建qemu-guest-agent设备,虚拟机的qemu-guest-agent由于找不到对应的串行设备而导致修改密码失败。DIB工具介绍前面介绍了手动制作镜像的过程,从镜像下载到启动虚拟机安装操作系统,然后在虚拟机中完成配置,最后清除本地信息,整个过程非常繁杂、耗时,并且一旦制作镜像的镜像有点问题,就需要启动虚拟机重新再来一遍,重复工作多,效率非常低。假设制作镜像时某个配置项错了,能不能不通过启动虚拟机进入系统去更改呢?答案是肯定的!我们只需要把制作好的镜像通过loo

16、p设备挂载到本地(如果是qcow2格式,则需要通过nbd挂载),然后chroot到挂载目录中修改配置文件即可,相对于启动虚拟机进入系统去更改方便高效很多。由此我们自然想到,我们可以把最初启动虚拟机时安装操作系统完成后的镜像保存为base镜像,以后再做镜像时,只需要基于该base镜像调整即可,省去了下载镜像以及安装操作系统这两大耗时步骤。修改镜像也不再需要启动虚拟机,只需要根据前面介绍的方法,把镜像挂载到本地,然后chroot到根分区修改即可。OpenStack社区正是基于该思路,开发了DIB(disk image builder),它目前是OpenStack TripleO项目的子项目,专门用

17、于构建OpenStack镜像:diskimage-builder is a flexible suite of components for building a wide-range of disk images, filesystem images and ramdisk images for use with OpenStack.DIB把一些操作封装成脚本,比如创建用户(devuser)、安装cloud-init(cloud-init)、配置yum源(yum)、部署tgtadm(deploy-tgtadm)等,这些脚本称为elements,位于目录diskimage-builder/di

18、skimage_builder/elements,你可以根据自己的需求自己定制elements,elements之间会有依赖,依赖通过element-deps文件指定,比如elements centos7的element-deps为:DIB会首先下载一个base镜像,然后通过用户指定的elements,一个一个chroot进去执行,从而完成了镜像的制作,整个过程不需要启动虚拟机。这有点类似Dockerfile的构建过程,Dockerfile的每个指令都会生成一个临时的容器,然后在容器里面执行命令。DIB则每个elements都会chroot到镜像中,执行elements中的脚本。比如制作ubu

19、ntu 14.04镜像:创建Trove percona镜像:其中ubuntu-trustry-guest会安装trove-guest-agent,ubuntu-trusty-percona会安装percona组件。制作镜像时可以通过环境变量进行配置,比如创建ironic镜像:以上制作镜像时会创建cloud-user用户,密码为secret,支持免密码sudo,cloud-init的datasources为ConfigDriver和OpenStack。通过DIB制作镜像能够更方便地管理和维护,实现自动化构建镜像,建议OpenStack镜像都直接使用DIB构建。功能验证4.1 注入密码和密钥使用刚刚创建的镜像启动一台云主机,如果使用nova CLI工具,需要传-admin-pass参数指定root密码,并指定disk大小为2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论