Openstack中的centos和ubuntu操作系统的镜像可以直接从社区直接下载下来使用,但是总是感觉有问题,cloud-init初始化程序是通用的,启动速度很慢,查了一下相关信息,发现是cloud-init进程会去访问外网一个地址,感觉使用起来用户体验很差。手工制作镜像是最符合实际使用需求的,想定制什么样的镜像都可以,但是有些费时费力。这里我尝试使用自动化镜像生成工具disk-image-builder(DIB)生成镜像,这个工具可以很方便的生成fedora和ubuntu系列的linux操作系统,对于windows不支持。

DIB是一个OpenStack工具,可以从https://git.openstack.org/cgit/openstack/diskimage-builder/tree/或  https://pypi.python.org/pypi/diskimage-builder/0.1.38 下载 。

DIB使用chroot的环境来构建镜像。目标是建立一个拥有Nova所需的所有组件的镜像,如trove所需的数据库镜像,ironic所需的支持硬件裸机的镜像。

操作记录:

useradd -s /bin/bash -d /opt/stack stack
设置stack账号密码为“stack” ,切换到stack用户执行:
su - stack
$ git clone https://git.openstack.org/openstack/diskimage-builder
使用visudo命令更改stack用户的sudo权限与root一致,运行命令visudo之后,找到“root    ALL=(ALL)       ALL”,在其后面增加下面这行:
stack   ALL=(ALL)       ALL
$ cd diskimage-builder
$ sudo pip install -r requirements.txt
$ sudo python setup.py install
确保你已经安装了qemu-img 和kpartx。如果没有安装,运行以下命令:
$ sudo yum install -y qemu kpartx

至此,安装成功,使用  disk-image-create -h  查看该命令的使用方法

制作centos7镜像:

export DIB_DEV_USER_USERNAME=centos   //初始用户名centos
export DIB_DEV_USER_PASSWORD=centos   //初始密码centos
export DIB_DEV_USER_PWDLESS_SUDO=YES   //允许sudo
export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack"   //cloud-init 的datasource是ConfigDrive, OpenStack
disk-image-create -a amd64 -t raw -o /opt/stack/images/centos7.raw centos7 vm  cloud-init-datasources devuser
注:-a amd64 64位操作系统,-t raw 裸格式,-o 文件路径,centos7 rm cloud-init-datasources devuser 都是element ,与上面的环境变量相呼应,比如DIB_DEV_USER_USERNAME环境变量在devuser这个element中用到,DIB_CLOUD_INIT_DATASOURCES 在cloud-init-datasources 中用到。

    
    然后上传镜像测试。

上传镜像:

$ vi admin-openrc.sh
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=    //你的实际openstack认证keystone地址
export OS_INTERFACE=internal
export OS_IDENTITY_API_VERSION=3
 $ openstack image create --disk-format raw --file /opt/stack/images/centos7.raw centos7-raw-628

后面通过web界面生成虚拟机实例进行验证,主要验证以下几项:

1.主机名称注入;

2.是否能根据flavor动态调整磁盘大小;

3.是否能注入密钥;

注意,生成虚拟机的时候,需要选择一个带有DHCPagent的网络,cloud-init在注入元数据的时候需要访问地址169.254.169.254 ,这个地址的路由需要DHCPagent提供,否则,cloud-init访问不到相关元数据,虚拟机生成会出现问题。从另一个角度看,也可以不选网络,但是需要修改镜像里面cloud-init程序配置。

总结:

openstack的使用维护过程中,镜像的制作和维护是一个重要内容,一般来说都有定制化的需求,比如需要更改yum源,定制安装包,如果使用手工方法制作非常耗时,使用官网直接下载的镜像不能做到定制,使用disk-image-builder可以大大提高制作镜像的效率。

disk-image-builder的原理是把最初启动虚拟机时安装操作系统完成后的镜像保存为base镜像,基于该base镜像挂载到本地,然后chroot到根分区,根据不同的定制需要增加不同的模块,安装完成后保存为特定格式的镜像文件。

使用DIB还有一个优点,就是每次制作完成一个镜像,比如centos7,第一次制作,会从网上下载基础镜像文件,第二次以及以后制作同一版本的镜像时,直接使用原来下载下来的镜像缓存文件,非常快。另外,如果网络不稳定,还可以提前准备好基础镜像,然后后面指定本地文件作为基础镜像。

通过浏览element内的相关目录和环境变量,发现有很多可以挖掘的东西,比如里面有一个docker的element,可以从docker中生成镜像。

对于openstack的ironic组件需要对硬件设备支持的镜像,对trove组件需要用到数据库镜像,这些需求可以引入新的element实现,如果手工来制作这些镜像,可以想象一下工作量是非常大的。

即使不用ironic组件和trove数据库组件,我们也可以利用相关的element来生成数据库镜像或者支持硬件设备支持的镜像,也可以输出格式是iso的镜像。

总之,通过丰富的element可以非常灵活高效的定制自己需要的镜像,不管这个镜像是给openstack用,还是直接制作成为iso镜像刻录成光盘装机使用都可以。

Openstack 之 使用disk-image-builder(DIB)制作镜像相关推荐

  1. openstack导出实例,制作镜像

    单位大哥,提供的制作镜像方案,比直接做镜像,占用空间小很多,还很方便. openstack在线制作镜像步骤: 1.将指定虚拟机配置好后关机 2.对此虚拟机"创建快照",之后会跳转到 ...

  2. KVM和制作镜像以简单的虚拟化操作命令

    真机上修改(制作镜像和KVM) 1 .安装虚拟软件包 [root@localhost ~]# yum -y install qemu-kvm \ > libvirt-daemon \ > ...

  3. docker制作镜像篇(基于容器)

    docker制作镜像可以有两种方式: 一.基于容器(使用busybox制作http镜像) 1.首先运行一个容器 2.在容器当中配置自己的http,添加web目录,增加主页文件等. 3.查看原busyb ...

  4. 【制作镜像】BCEC制作镜像

    如要制作的新镜像已存在标准版本镜像,即linux发行版本相同(此处指CentOS6.5 64位),可利用BCEC制作. 在BCEC创建centos6.5系统的可联外网的虚机,ssh到此虚机,用yum方 ...

  5. 如何导入nod32企业版的授权文件.lic,并制作镜像服务器?

    如何导入企业版的授权文件.lic,并制作镜像服务器? [适用产品:ESET NOD32 企业版  ] [编号:2008102211-168 最后更新时间:2008-10-22] 首先打开杀毒软件界面, ...

  6. Docker 制作镜像

    docker镜像制作的两种方法: 1,基于docker commit 制作镜像 2,基于dockerfile制作镜像,为主流镜像制作方式. [基于基础镜像定制后,使用commit制作自定义镜像] 1, ...

  7. Clonezilla制作镜像时报错:extfsclone.c:bitmap free count err解决办法

    Clonezilla制作镜像时报错:extfsclone.c:bitmap free count err解决办法: 插上光盘后选第一个(即直接回车) en_US.UTF-8 English Don't ...

  8. Docker进阶(制作镜像,共享卷,网络通信,私有仓库)

    目录 一.创建简单的镜像 1.自定义镜像原理 2.创建commit自定义镜像 3.示例 二.用Dockerfile创建镜像 1.Dockerfile的概述 2.Dockerfile语法 3.使用Doc ...

  9. Docker系列06—基于容器制作镜像并上传到Docker Registry

    Docker系列06-基于容器制作镜像并上传到Docker Registry 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容 ...

最新文章

  1. Linux整合Apache和SVN
  2. usr/bin/ld: cannot find 错误解决方法和 /etc/ld.so.conf
  3. python pillow库_python pillow模块用法
  4. matlab能修图吗,相机上这个“功能”,不打开会影响修图效果,别等拍完照片才知道...
  5. 如何安装部署salt yum?
  6. linux安装oracle 操作系统内核参数 aio,Linux安装Oracle 11G过程(测试未写完)
  7. 助力产教融合,阿里云教育一体机发布
  8. 视图解析器中配置前缀和后缀---SpringMVC学习笔记(五)
  9. opencv中查看mat位图的像素幅度(Cv::matStep)
  10. python 忽略 异常_如何忽略Python中的异常?
  11. 超级详细备注的代码:Python帮助您高效通过英语六级考试
  12. python 获取点击按钮名称_python如何获取tkinter组件的名称?比如按下多个Button中的一个,返回这个被按下的Button的text?...
  13. jsp实现购物车结算页面
  14. 模拟退火算法介绍和实例实现
  15. 2019python二级真题_2019年3月二级python真题,上岸必备!
  16. statsmodels.stats.proportion.proportions_ztest
  17. HyperX Alloy Mars2游戏机械键盘,深耕专业电竞机游戏械键盘
  18. 2022.8.29-9.4 AI行业周刊(第113期):世界人工智能大会
  19. 【OpenCV 例程 300篇】249. 特征描述之视网膜算法(FREAK)
  20. 鼠标悬浮在button按钮上时的事件

热门文章

  1. 训练yolov7报错AssertionError: train: No labels in XX\train.cache. Can not train without labels
  2. 对zygote的理解
  3. HID卡,125K低频门禁卡的贵族
  4. operating system ----5
  5. appendChild,insertBefore,replaceChild,removeChild,cloneNode用法小结
  6. python图片处理,自动生成gif动态图片
  7. 65W氮化镓(GaN)充电头PD快充方案
  8. C++explicit与implicit
  9. MyBatis-Spring-TransactionManager
  10. 前端面试题-clearfix(清除浮动)