云镜像:从此不再需要在虚拟机中安装操作系统

Posted by 云谷计算 on January 17, 2018

使用过虚拟机的朋友都能感受到,不管是使用开源的KVM, VirtualBox, 或者是商业的VMware Workstation,创建一个虚拟机一般就需要1-2分钟,但是一般需要通过给这个虚拟机挂载操作系统安装镜像,并执行OS安装程序,初始化配置才能开始真正使用这个虚拟机,后面这个过程,每搞定一个OS,少说也需要20-30分钟。


云镜像(Cloud Images)

大家都知道,现在AWS,Azure,阿里云,华为云等云服务器越来越普及,而这些服务器都是虚拟化的,所以各大OS发行厂商在发布传统的用于安装物理服务器的iso镜像之外,还会同步发布基于云服务器的镜像,相比iso镜像,云镜像有如下几个特点:

  • OS已经预安装:云镜像一般以qcow2, vhd, ovf的虚拟磁盘格式发布,包含了一个完整的系统快照,不再需要从头安装。
  • 通过cloud-init配置:cloud-init是AWS首先推出的,用于对一个镜像做个性化配置,主要是用来注入登录的用户名/密码,SSH密钥对,甚至还可以用来对磁盘进行扩容等。目前cloud-init已经被几乎所有的OS厂商集成到其云镜像中作为镜像初始化的标准。

3分钟搞定一个CentOS 7虚拟机

这里我以centos 7为例,利用libvirt+kvm+centos 7云镜像,3分钟内拿到一个能用的虚拟机: 镜像下载

cloud.centos.org可以获得最新的云镜像,建议下载qcow2.xz格式,下载完后用unxz命令解压就可以了。 生成cloud-init配置 meta-data文件:

instance-id:i-12345678

user-data文件:

#cloud-config
password:redhat
chpasswd:{expire:False}
ssh_pwauth:True
ssh_authorized_keys:
- ssh-rsa YOUR_ID_RSA_PUB
- default
- name:hluo
  lock-passwd:false
  sudo:ALL=(ALL) NOPASSWD:ALL
  plain_text_passwd:'redhat'

CentOS 7的云镜像默认用户是centos,没有提供默认密码,需要通过user-data的password指定,或者是通过ssh_authorized_keys给一个ssh的公钥,用于终端或者ssh登录。 生成config drive镜像

yum install -y cloud-utils 
cloud-localds seed.img user-data meta-data

创建虚拟机

<domain type='kvm'>
    <name>centos-cloud</name>
    <memory>1048576</memory>
    <currentMemory>1048576</currentMemory>
    <vcpu>1</vcpu>
    <os>
        <type arch='x86_64' machine='pc'>hvm</type>
        <boot dev='hd'/>
    </os>
    <features>
        <acpi/>
        <apic/>
        <pae/>
    </features>
    <clock offset='localtime'/>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>destroy</on_crash>
    <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type='file' device='disk'>
            <driver name='qemu' type='qcow2'/>
            <source file='/home/images/centos-cloud.img'/>
            <target dev='vda' bus='virtio'/>
        </disk>
        <disk type='file' device='cdrom'>
            <source file='/home/images/seed.iso'/>
            <target dev='hda' bus='ide'/>
        </disk>
        <interface type='bridge'>
            <source bridge='br0'/>
            <mac address="00:16:3e:5d:aa:19"/>
            <model type='virtio'/>
            <driver name='vhost'/>
         </interface>
        <input type ='tablet' bus='usb'/>
        <memballoon model='virtio' autodeflate='off'/>
        <serial type="file">
            <source path="/var/log/centos-cloud-serial.log"/>
        </serial>
        <graphics type='vnc' port='-1' autoport='yes' listen = '0.0.0.0' keymap='en-us'/>
    </devices>
 </domain>

cloud init配置日志 用virsh create centos.xml启动虚拟机,该虚拟机的console日志会在/var/log/centos-cloud-serial.log文件中,虚拟机一般启动速度在5秒内就可以完成,在login界面出现后,会看到cloud-init的配置输出,然后就可以用ssh key登录这个虚拟机了。

包括CentOS,其它的Linux如ubuntu,suse等,甚至是Windows Server都支持cloud init,以上的config drive也可以用于配置这些操作系统。