云镜像模板自动构建设想

前提:

无论你是在公有云还是私有云,创建虚机都需要系统镜像模板来做支撑,镜像的制作是非常繁琐的,尤其是你要制作云环境下的镜像,我们称其为cloud-images,这个镜像模板可以说是基石不为过。

一般有两种方式:

  • 手工构建,方法上来说比较简单粗暴,但是过程比较繁琐,适合或者小规模情况下使用。
  • 自动构建,建议两种方式disk-image-builder、packer.

联网云现况:

  • 创建
    开发测试创建虚拟机--->修改虚拟机--->rbd导出虚拟机镜像--线上测试导入测试--->上传至ftp--->下载至线上各节点--->校验md5--->导入线上rbd池
  • 维护
    如果只是文件修改
    guestfish镜像模板--->线上测试导入测试--->上传ftp--->下载并MD5校验--->导入线上rbd池
    如果需要安装或者编译软件
    在平台创建虚拟机--->安装或者编译--->导入到线上测试上传ftp--->下载并MD5校验--->导入线上rbd池

如果每个发行版镜像都这么做,那是相当麻烦,而且肯定有定制镜像的需求,即在镜像内置一些组件以便支持云平台的特性,每次镜像修改需求都要手工来一次,想想就恶心了,而且耗时严重,md5校验不成功又要重来。等到镜像修改的臃肿时候又要推到重来。

解决方案

以上铺垫,引出本文讨论的内容,如何高度灵活的构建镜像。

packer

Packer是一个从单一的模板文件来创建多平台一致性镜像的轻量级开源工具,它能够运行在常用的主流操作系统如Windows、Linux和Mac os上,能够高效的并行创建多平台例如AWS、Azure和Alicloud的镜像,它的目的并不是取代Puppet/Chef等配置管理工具,实际上,当制作镜像的时候,Packer可以使用Chef或者Puppet等工具来安装镜像所需要的软件。通过Packer自动化的创建各种平台的镜像是非常容易的。

使用Packer来创建镜像有如下优点:

  • 基础设施部署讯捷:Packer镜像允许您在几秒钟内启动完成配置和已配置的机器,而不是几分钟或几小时。 这不仅有利于生产,也有利于开发,因为开发虚拟机也可以在几秒钟内启动,而无需等待通常更长的配置时间。
  • 可移植性:因为Packer为多个平台创建相同的映像,在像OpenStack的私有云中分阶段测试,以及在桌面虚拟化解决方案(如VMware或VirtualBox)中开发。 每个环境运行相同的机器映像,提供最终的可移植性。
  • 稳定性的改进:Packer在构建映像时安装和配置机器的所有软件。 如果这些脚本中有错误,它们将被早期捕获,而不是在启动机器后几分钟。
  • 更好的可测试性: 在构建机器映像之后,可以快速启动该机器映像,并且通过冒烟测试以验证镜像是可以正常工作的。
  • 良好的可扩展性: Packer使用插件机制,可以很方便的根据需要来扩展功能,并与许多流行的技术和工具集成。
  • 是HashiCorp公司生态系统的一部分

disk-image-builder

disk-image-builder是tripleO的子项目,用于给tripleO构建镜像之用,disk-image-builder采用element拼装这种灵活的架构,可以满足镜像制作时多变的需求,而且可以利用好各个linux发行版已有的基础镜像。

  • diskimage-builder支持定制element,即镜像中包含的元素。(比如创建用户,安装软件包,进行某种配置) 用户可以根据需要进行定义,然后再使用disk-image-create时指定。具体参考diskimage-builder指导。
  • diskimage-builder的原理也比较简单,是在主机上创建虚拟机镜像,然后通过挂载/chroot方式,通过kickstart自动完成镜像内容的安装。
  • elements比较像程序中的接口/插件机制,将element中规定目录下的定制脚本执行,完成对镜像的定制。
  • 整个过程并不需要启动虚拟机。

结论

为了解决镜像模板繁杂、周期长、不规范等问题,我们需要引入自动化构建镜像工具或者系统来提高镜像模板的制作效率、线下线上镜像同步、制作流程规范避免臃肿。更好的管理镜像。

你可能感兴趣的:(云镜像模板自动构建设想)