使用过虚拟机的朋友都能感受到,不管是使用开源的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也可以用于配置这些操作系统。