我们想向您展示将 Cloud Images 与 KVM 结合使用的优势。使用 OpenStack 的优势之一是能够使用云镜像。这些云映像可以从 Distribution 网站下载,并且是其操作系统的预构建版本。无需安装。缺点是您通常需要注入 SSH 密钥才能登录。使用 OpenStack,这很容易,Horizon 界面允许您选择要添加的密钥。如果您不想完全使用 OpenStack,但希望通过 QEMU 和 KVM 最有效地使用这些映像,那么您可以这样做,而且这并不困难。在本模块中,我们将学习如何下载云映像并创建一个 cloud-init 磁盘以在首次启动时自定义映像。您将看到如何在不需要 OpenStack 的情况下使用 KVM 中的云映像快速创建虚拟机。
下载云镜像,第一步是定位您需要的云镜像。我建议使用您喜欢的搜索引擎并查找“<发行版> 云图像”:
- Ubuntu:https : //cloud-images.ubuntu.com/
- CentOS:https : //cloud.centos.org/centos/
- Debian : Index of /images/cloud
- Fedora : Fedora Cloud
- openSUSE : Index of /repositories/Cloud:/Images:
下载后,我建议将图像保留在下载位置(例如主目录)上保持不变。稍后可以将其复制到正确的图像目录。复制文件而不是移动,因为它会给您留下一个未受影响的主图像,您可以在以后再次需要它时再次复制它。
下载最新的 Ubuntu 18.04 服务器镜像:
$ wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
要下载最近的 CentOS 7 映像:
$ wget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1809.qcow2
Ubuntu 上的默认用户帐户是“ ubuntu ”,CentOS 上是“ centos ”。
调整虚拟磁盘大小
虚拟磁盘大小可能非常小。在将其用于任何虚拟系统之前,我们可能会选择增加大小。我们可以查询当前的大小:
$ 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: 324M
cluster_size: 65536
Format specific information:
compat: 0.10
refcount bits: 16
我们可以看到默认大小是 2.2 GB。我们可以将大小增加一定数量 (+5G) 或增加到目标大小 (10G)。我们将使用目标大小并制作一个 10GB 的虚拟磁盘。如果有以下情况,实际使用的大小不应有太大变化:
$ qemu-img resize bionic-server-cloudimg-amd64.img 10G
Image resized.
再次检查信息时,我们可以看到调整大小有效:
$ qemu-img info bionic-server-cloudimg-amd64.img
image: bionic-server-cloudimg-amd64.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 324M
cluster_size: 65536
Format specific information:
compat: 0.10
refcount bits: 16
复制主盘
我们现在可以将磁盘文件复制到/var/lib/libvirt/images/ 以供虚拟机使用。我们也可以使用qemu-img命令来运行副本。
$ sudo qemu-img convert -f qcow2 bionic-server-cloudimg-amd64.img /var/lib/libvirt/images/proxy1.img
即使我们下载的图像是正确的 qcow2 格式,我们仍然可以使用此命令作为有效副本,并确保目标文件是 qcow2,与下载的格式无关。
创建云配置文件
我们需要在第一次启动时自定义映像。我们之前提到过,云系统通常仅限于通过 SSH 进行基于密钥的身份验证。这意味着我们不能使用用户名和密码。我们需要注入 SSH 密钥或为默认用户设置密码。我们还将借此机会设置主机名。我们将创建一个文本文件,该文件必须以#cloud-config开头
#cloud-config
password: Password1
chpasswd: { expire: False }
ssh_pwauth: True
hostname: proxy1
对于我的测试系统,我通常使用相同的密码,但您当然可以选择适合您的安全要求的密码。该文件是不言自明的,但我们需要将其复制到 ISO 文件上,以便在系统启动时使用。为此,我们将使用命令 cloud-localds。如果没有安装这个包,你可以添加它:
$ sudo apt install cloud-init-tools
安装后,我们可以从文本文件 cloud.txt 在图像目录中创建 ISO 文件 proxy1.iso:
$ sudo cloud-localds /var/lib/libvirt/images/proxy1.iso cloud.txt
我们现在有两个磁盘用于我们将要创建的虚拟机,proxy1.img 和 proxy1.iso。我们现在准备将这些磁盘导入 QEMU/KVM 虚拟机。我们可以使用 virt-install 或 virt-manager 来做到这一点。为了便于说明,我们将使用命令行和virt-install命令。
创建虚拟机
正如我们之前提到的,这些云镜像的一大特点是能够非常快速地运行虚拟机,无需安装。我们只需要导入磁盘映像并结合云配置 ISO 文件,即可自定义映像以允许密码验证。我们将使用 CLI 中的 virt-install 来执行此操作。如果需要,您可以使用以下命令安装软件包:
$ sudo apt install virtinstall
安装后,我们可以创建脚本来导入磁盘或直接从命令行运行。这是使用我之前创建的磁盘的示例:
sudo virt-install \
--name proxy1\
--memory 1024 \
--disk /var/lib/libvirt/images/proxy1.img,device=disk,bus=virtio \
--disk /var/lib/libvirt/images/proxy1.iso,device=cdrom \
--os-type linux \
--os-variant ubuntu16.04 \
--virt-type kvm \
--graphics none \
--network network=default \
--import
运行该命令时,将创建虚拟机元数据并启动映像。我们将连接到系统的控制台。我们可以使用提供给 cloud-config 的密码以 Ubuntu 用户身份登录。
如果您还记得,我们还增加了虚拟磁盘的大小,我们可以使用命令lsblk来查看结果:
$ lsblk /dev/vda
NAME MAJ:MINRM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 10G 0 disk
├─vda1 252:1 0 9.9G 0 part /
├─vda14 252:14 0 4M 0 part
└─vda15 252:15 0 106M 0 part /boot/efi