首页 > 代码库 > Create a virtualbox Based CentOS 6 OpenStack Cloud Image

Create a virtualbox Based CentOS 6 OpenStack Cloud Image

前言:

    openstack 环境已经部署好了,接下来就是运行实例,运行实例就需要镜像了。镜像的来源分为官方镜像,三方镜像,以及自定义镜像。

    官方的镜像不能自动扩容根目录大小

    三方镜像嘛……这个看需求吧

    自定义镜像,也就是自己动手来做一个镜像。我比较喜欢这种方式,在制作过程中可以学到新东西。由于本人使用的ubuntu 系统已经安装了virtualbox 此例就使用virtualbox 为例。


磁盘格式:

    openstack 镜像服务支持的虚拟机镜像磁盘格式有

    aki

        亚马逊 kernel 镜像

    ami

        亚马逊 machine 镜像

    ari

        亚马逊 ramdisk 镜像

    iso

        光盘数据格式

    qcow2

        支持QEMU 能动态扩展,支持写时复制

    raw

        裸磁盘格式。各种格式可以在裸格式间转换

    vdi

        支持VirtualBox虚拟机和QEMU

    vhd

        VHD磁盘格式,支持VMware,Xen,Microsoft,VirtualBox和其它虚拟化

    vhdx

        增强版本的VHD格式,支持更大磁盘大小

    vmdk

        常见磁盘格式,支持常见虚拟化格式

需求:

    可根据磁盘大小自动扩展根目,修改主机名,注入ssh密钥,根据作用安装相应软件,如nginx、apache、tomcat、php-fpm、DB……

    实现以上需求,需要借用几个工具实现

    cloud-init (https://launchpad.net/cloud-init/)功能

        设置默认语言环境

        设置实例主机名

        生成实例ssh私钥

        添加ssh密钥到用户 .ssh/authorized_keys 使其能够登录

        设置临时挂载点

    cloud-utils https://launchpad.net/cloud-utils

        扩大硬盘

    linux-rootfs-resize https://github.com/flegmatik/linux-rootfs-resize

        调用cloud-utils ,虚拟机启动时检测硬盘扩大,则自动扩展根目录

        

具体实现:    

    因本人电脑已经安装有VirtualBox,且已安装好Centos 6.8系统(VirtualBox如何安装系统略),这里就基于已安装好的系统做配置。


添加EPEL 库,安装cloud-init:

 yum install -y http://dl.fedoraproject.org/pub/epel/6Server/x86_64/epel-release-6-8.noarch.rpm

安装cloud-init 软件包及其他所需包:

yum install -y cloud-init cloud-utils cloud-utils-growpart acpid git parted

安装linux rootfs resize:

git clone 
cd linux-rootfs-resize
./install

将启动日志打印到Dashboard 控制台,修改内核引导参数:

vim /boot/grub/menu.lst

在kernel 行尾增加

console=tty0 console=ttyS0,115200n8

在同一行上的同一文件中删除对以下参数的任何引用:

rhgb quiet

删除网络配置中对UUID和MAC地址的硬编码:

rm -f /etc/udev/rules.d/70-persistent-net.rules 
PRIMARY_INTERFACE=$(ip route list match 0.0.0.0 | awk ‘NR==1 {print $5}‘) 
sed -i ‘/UUID/d‘ /etc/sysconfig/network-scripts/ifcfg-$PRIMARY_INTERFACE 
sed -i ‘/HWADDR/d‘ /etc/sysconfig/network-scripts/ifcfg-$PRIMARY_INTERFACE

为了是openstack实例能与元数据服务通行,修改网络配置:

echo "NOZEROCONF=yes" >> /etc/sysconfig/network

关闭iptables、selinux:

sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g‘ /etc/selinux/config
service iptables stop && chkconfig iptables off
service ip6tables sotp && chkconfig iptables off

安装相关应用或应用源(可选)

清理yum:

yum clean all

删除/tmp 目录中的所有内容:

rm -rf /tmp/*

清理最后的登录用户日志:

rm -f /var/log/wtmp /var/log/btmp

清理命令历史记录:

history -c

关闭虚拟机:

poweroff


转换格式:

先将vdi转为raw裸格式,在转换为qcow2

VirtualBox支持格式转换,命令如下

VBoxManage clonemedium      [disk|dvd|floppy] <uuid|inputfile> <uuid|outputfile>
                            [--format VDI|VMDK|VHD|RAW|<other>]
                            [--variant Standard,Fixed,Split2G,Stream,ESX]
                            [--existing]
VBoxManage clonehd "centos.vdi" centos.img  --format raw --variant standard


raw转为qcow2格式需要借用qemu-img完成

qemu-img convert -cf raw centos-6.8.img -O qcow2 centos-6.8.qcow2

参数说明:

    -f 指定需要转换文件的文件格式,既输入镜像格式(可省略)

    -c 压缩

    -O指定要转换的目标格式,既输出镜像格式


将镜像上传到glance Repository

openstack image create "centos6.8" --file centos-6.8.qcow2 --disk-format qcow2 --container-format bare --public


注意:

    安装操作系统时只分一个根(/)目录,否则自扩容会失败。

    网卡是DHCP自动获取方式,且已处于激活状态

    关闭系统自带防火墙,使用openstack安全组


本文出自 “morrowind” 博客,请务必保留此出处http://morrowind.blog.51cto.com/1181631/1872994

Create a virtualbox Based CentOS 6 OpenStack Cloud Image