使用 virt-install 命令行快速创建 KVM 虚拟机
-
- 1. 引言
- 2. 环境与前提条件
- 3. virt-install 命令详解
-
- 3.1 创建 worker02 节点
- 3.2 创建 lb 节点
- 4. 执行过程与输出
- 5. 虚拟机管理常用命令
- 6. 总结与最佳实践
1. 引言
在虚拟化运维和云计算环境中,KVM (Kernel-based Virtual Machine) 是 Linux 上广泛使用的开源虚拟化解决方案。virt-install 是 virt-manager 工具集的一部分,它提供了一个强大的命令行界面,用于快速、自动化地创建和管理 KVM 虚拟机。与图形化工具相比,命令行方式更适合脚本化部署、批量操作和远程管理。
本文将演示如何使用 virt-install 命令,通过一条指令快速创建两台基于 CentOS 7 模板的虚拟机:worker02(计算节点)和 lb(负载均衡器节点)。我们将详细解析命令中的每个参数,并展示执行过程与结果。
2. 环境与前提条件
在开始之前,请确保您的宿主机满足以下条件:
- 操作系统: 支持 KVM 的 Linux 发行版(如 CentOS, RHEL, Ubuntu, Fedora)。
- 虚拟化支持: CPU 支持硬件虚拟化(Intel VT-x 或 AMD-V),并在 BIOS 中已启用。
- KVM 已安装: 已安装 qemu-kvm, libvirt, virt-install 等必要软件包。# 在 CentOS/RHEL 上检查并安装
sudo yum install -y qemu-kvm libvirt libvirt-python libguestfs-tools virt-install
sudo systemctl start libvirtd
sudo systemctl enable libvirtd - 网络准备: 准备好用于虚拟机桥接的物理网络接口(本例为 enp5s0)。
- 磁盘镜像: 已准备好一个可用的 CentOS 7 磁盘镜像文件(例如通过 virt-builder 或 cloud-image 制作的基础镜像),并放置在 /var/lib/libvirt/images/ 目录下,作为模板。本例假设模板文件名为 centos7-base.qcow2,我们将基于它创建新的虚拟机磁盘。
3. virt-install 命令详解
我们将创建两台虚拟机,命令结构相同,参数根据角色调整。
3.1 创建 worker02 节点
echo "=== 创建worker02 ===" && sudo virt-install \\
–name worker02 \\
–memory 4096 \\
–vcpus 2 \\
–disk /var/lib/libvirt/images/worker02.qcow2,format=qcow2 \\
–network type=direct,source=enp5s0,source_mode=bridge,model=virtio \\
–os-variant centos7.0 \\
–import \\
–noautoconsole \\
–check all=off
参数解析:
- –name worker02: 指定虚拟机的名称为 worker02。
- –memory 4096: 为虚拟机分配 4096 MB(4 GB)内存。
- –vcpus 2: 为虚拟机分配 2 个虚拟 CPU 核心。
- –disk /var/lib/libvirt/images/worker02.qcow2,format=qcow2: 指定虚拟机的磁盘文件路径和格式。qcow2 格式支持快照、动态扩容等高级特性。此命令会基于已有的模板镜像创建一个新的 worker02.qcow2 文件(写时复制)。
- –network type=direct,source=enp5s0,source_mode=bridge,model=virtio: 配置网络。
- type=direct: 使用 MacVTap 或 SR-IOV 直通模式,让虚拟机直接使用物理网卡 enp5s0,性能接近物理机。
- source=enp5s0: 指定宿主机物理网卡接口。
- source_mode=bridge: 设置直通模式为桥接,虚拟机将获得与宿主机同网段的独立IP。
- model=virtio: 使用 virtio 半虚拟化网卡驱动,以获得最佳I/O性能。
- –os-variant centos7.0: 告知 virt-install 客户机操作系统是 CentOS 7.0,以便优化一些默认配置(如时钟、磁盘控制器类型)。
- –import: 关键参数。表示不是从安装介质(ISO)开始安装,而是直接“导入”一个已有的磁盘镜像文件(即我们的模板)来创建虚拟机。这避免了交互式安装过程。
- –noautoconsole: 创建完成后不自动连接到虚拟机的控制台(VNC/Spice)。因为我们使用已有镜像,系统已预装,无需观看启动过程。
- –check all=off: 跳过所有检查(如磁盘路径是否存在、网络是否可用等)。在自动化脚本中常用,以避免因环境细微差异导致命令中断。
3.2 创建 lb 节点
创建负载均衡器节点的命令与 worker02 类似,主要区别在于资源分配更少(适合轻量级服务)。
echo "=== 创建lb ===" && sudo virt-install \\
–name lb \\
–memory 2048 \\
–vcpus 2 \\
–disk /var/lib/libvirt/images/lb.qcow2,format=qcow2 \\
–network type=direct,source=enp5s0,source_mode=bridge,model=virtio \\
–os-variant centos7.0 \\
–import \\
–noautoconsole \\
–check all=off
- –name lb: 虚拟机名称为 lb。
- –memory 2048: 分配 2 GB 内存。
- –disk …/lb.qcow2: 磁盘文件对应命名为 lb.qcow2。
4. 执行过程与输出
将上述两条命令在宿主机终端中依次执行(或写入脚本执行),您将看到类似以下的输出:
=== 创建worker02 ===
开始安装……
创建域…… | 00:00:00
域创建完成。
=== 创建lb ===
开始安装……
创建域…… | 00:00:00
域创建完成。
输出解读:
重要说明:由于使用了 –noautoconsole,命令完成后不会弹出图形界面。虚拟机已在后台启动。您可以使用 virsh 命令来管理它们。
5. 虚拟机管理常用命令
创建完成后,可以使用以下命令进行验证和管理:
# 查看所有运行中的虚拟机
sudo virsh list
# 查看所有虚拟机(包括未运行的)
sudo virsh list –all
# 启动虚拟机
sudo virsh start worker02
# 关闭虚拟机(发送ACPI关机信号,需系统内支持)
sudo virsh shutdown worker02
# 强制关闭虚拟机(断电)
sudo virsh destroy worker02
# 连接到虚拟机控制台(需要虚拟机配置了串口或VNC)
sudo virsh console worker02
# 编辑虚拟机配置(XML)
sudo virsh edit worker02
# 删除虚拟机(–remove-all-storage 会同时删除磁盘文件)
sudo virsh undefine worker02 –remove-all-storage
# 查看虚拟机信息
sudo virsh dominfo worker02
6. 总结与最佳实践
通过 virt-install –import 命令,我们可以实现秒级克隆和部署基于模板的虚拟机,极大地提升了效率。这种方法非常适合需要快速部署大量相同或相似配置虚拟机的场景,例如:
- 搭建 Kubernetes 集群的各个节点。
- 部署分布式测试环境。
- 快速复制生产环境进行故障排查。
最佳实践建议:
希望这篇指南能帮助您熟练掌握使用命令行快速创建 KVM 虚拟机的技巧!

