2019独角兽企业重金招聘Python工程师标准>>>
在服务器上,经常需要启动数十个或者几十个虚拟机,按照我们现有的方式是安装一个虚拟机,然后复制相应的份数。例如,一个虚机的镜像大小是4G,十个虚机的大小就需要占用40G空间。
事实上在目前为止里面还没有执行任何程序,这些空间都是分配,实际并不一定都要使用。那么是否能够实现用多少分配多少呢?分析下可以发现,每个虚拟机里面的内核都是一样的,大部分时候我们都不需要去修改里面的内核,是否能够共用内核?
Copy-On-Write模式为我们提供了很好的解决方式,通过创建一个基础镜像(base image),里面把各个虚拟机都需要的环境都搭建好,然后基于这个镜像建立起一个个“增量镜像”(增量镜像的初始大小低于1M),每个“增量镜像”对应一个虚拟机,虚拟机对镜像中所有的改变都记录在“增量镜像”里面,基础镜像始终保持不变。这样我们建立十个虚拟机,需要的空间为:4G+10*1M=4G,一下节省了近36G的空间。
对于我们Flexbng的环境,cp/dp的虚机可以共用一个基础镜像,然后各自有自己的增量镜像。
好处有:
1)在部署环境时,需要拷贝的文件大小和磁盘占用空间就会降低很多,尤其是多cp/dp的环境。
2)基础镜像不会被修改,新拉虚机时可以快速创建个“增量镜像”使用
基本步骤:
1. 创建一个基础镜像flexbng-normal.qcow2, 该镜像包含OS和必需的软件包
qemu-img info flexbng-normal.qcow2
image: flexbng-normal.qcow2
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 2.4G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
- 清除基础镜像里面的临时文件(例如软件tar包、编译的文件、日志等等),然后退出虚机,并压缩基础镜像,压缩后的镜像为flexbng-base.qcow2。
qemu-img convert -c -O qcow2 flexbng-normal.qcow2 flexbng-base.qcow2
qemu-img info flexbng-base.qcow2
image: flexbng-base.qcow2
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 1.1G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
3. 创建增量镜像flexbng-delta.qcow2
qemu-img create -f qcow2 -b flexbng-base.qcow2 flexbng-delta.qcow2
qemu-img info flexbng-delta.qcow2
image: flexbng-delta.qcow2
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 193K
cluster_size: 65536
backing file: flexbng-base.qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
后面如果想将增量镜像中的修改合入到基础镜像中,需要执行commit命令:
qemu-img commit flexbng-delta.qcow2
实例展示:
在USB或者PXE部署时使用的增量镜像。