如何在KVM环境中快速创建虚拟机
【注意】最后更新于 March 18, 2020,文中内容可能已过时,请谨慎使用。
计算机虚拟技术在软件测试,业务部署,远程办公等多应用中已经成为IT技术员工具箱中的基础工具。
这篇文章介绍KVM中如何快速创建新虚拟机。
主要涉及的知识点有:
- qemu-img 创建 overlay qcow2 磁盘
- cloud-init 配置
下面以创建 ubuntu18.04 虚拟机为例,进行介绍。
KVM 环境
如果 HOST 主机操作系统为 ubuntu ,其不同版本的KVM安装命令稍有不同:
- ubuntu18.04:
sudo apt-get install qemu-kvm libvirt-clients libvirt-daemon-system virtinst bridge-utils cpu-checker - ubuntu18.10 以后的版本:
sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker
安装完成后,需要确保以下服务开机运行:
sudo systemctl enable libvirtd
sudo systemctl start libvirtd
注意
这里并没有检查 HOST CPU 是否支持虚拟化技术,我们假设你知道如何检查 CPU 是否支持虚拟化。
下载云操作系统镜像
我们可以从 https://cloud-images.ubuntu.com/ 下载需要版本的镜像。ubuntu18.04 的下载地址为: https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
使用 qemu-img info bionic-server-cloudimg-amd64.img 命令查看镜像信息:
image: bionic-server-cloudimg-amd64.img
file format: qcow2
virtual size: 2.2G (2361393152 bytes)
disk size: 330M
cluster_size: 65536
Format specific information:
compat: 0.10
refcount bits: 16
可以看到,镜像文件格式为 qcow2 。这种格式的好处是 HOST 主机中的磁盘空间不必在创建虚拟机磁盘文件的时候一次性分配到位,而是有多少数据就占用多少磁盘空间。
创建虚拟机磁盘
假设 bionic-server-cloudimg-amd64.img 存放目录为: /vmdata
可以使用 qemu-img 创建一个 40G 大小的 overlay 的 qcow2 磁盘文件,/vmdata/images/example.qcow2
sudo qemu-img create -f qcow2 -o backing_file=/vmdata/bionic-server-cloudimg-amd64.img /vmdata/images/example.qcow2 40G
这种文件的特点是,不用将 bionic-server-cloudimg-amd64.img 的内容复制一遍,只是做了相应的关联,如果有数据的变化,就保存到新创建的 example.qcow2 里面去。另外需要注意的是,原始磁盘文件不能够随意变更。
准备 cloud-init 配置文件
cloud-init 配置内容有很多,大家可以参考官网文档
这里主要是修改 ubuntu 用户的密码和修改 apt 仓库源,其文件为 /vmdata/cloud_init.cfg
#cloud-config
hostname: test1
fqdn: test1.example.com
manage_etc_hosts: true
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
lock_passwd: false
ssh-authorized-keys:
- 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDGsZSn79Jcy9hJ0COttZXf3v7ZU565/PHovT0Mb3Ew4WS/YcIDH6GOKl7xq0ucj8xtNxZU82IJd/4CzBmZQGn/VitMpvj9wf0XNZnPHLfbpYrpdRwTXD3VyRQhdDT6VZUkLshTcpuduWtNHatJtAf/4DQW8K73tJNBZN0s663DaSex0ESwRg27y1gGnbJE5O+5yYGZ2/M1+4XAnZQSZu+xK1ekA0F5HdCXS2X6LmixeYo4MluqugGK3GbbO3otn7faasprdOuCrdjF9OecFYh10XTKsQnJDy2QxlhCrn1q3MRTLPIECNhZZ4W3yJN6K4Pl3EGWNQxCR0OhgVzVyMj /home/ubuntu/.ssh/id_rsa'
ssh_pwauth: yes
disable_root: false
chpasswd:
list: |
ubuntu:$6$c0XBA8x7HxUsVQls$ipbupa7HTCTZ6eGzVVOXyUAwdTeWgJ3YI9yD5BflzJiqXStJOqX5rRfTZBMrAw6EtURSP19PjjtuWYnlw/FIf1
expire: False
apt:
primary:
- arches: [default]
uri: http://mirrors.aliyun.com/ubuntu/
packages:
- qemu-guest-agent
# written to /var/log/cloud-init-output.log
final_message: "The system is finall up, after $UPTIME seconds"
注意:
一、 chpasswd:list:ubuntu: 后的字符串是给 ubuntu 用户的初始密码,可以使用下面的命令生成:
python3 -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
二、 ssh-authorized-keys: 后的内容,替换成你自己的公钥,就可以使用 SSH key 登陆。
生成 cdrom iso 文件
通过上面的配置文件,生成用于 cloind-init nocloud 挂载使用的 ISO 文件
sudo cloud-localds config.iso cloud_init.cfg
运行 virt-install 创建虚拟机
sudo virt-install --memory 2048 --vcpus 2 --name example01 --disk /vmdata/images/example.qcow2,device=disk,bus=virtio --disk /vmdata/config.iso,device=cdrom --os-type Linux --os-variant ubuntu18.04 --virt-type kvm --graphics none --network network=default,model=virtio --import
完成这最后一步,我们的虚拟机就创建完成了。我们从控制台输出的时间可以看到,整个过程只用了几十秒。
对比以前使用 ubuntu ISO 镜像文件安装系统、以及使用 virt-clone 创建VM所花费的时间,确实节约了不少!