使用 virt-install 命令行快速创建 KVM 虚拟机
-
- [1. 引言](#1. 引言)
- [2. 环境与前提条件](#2. 环境与前提条件)
- [3. virt-install 命令详解](#3. virt-install 命令详解)
-
- [3.1 创建 worker02 节点](#3.1 创建 worker02 节点)
- [3.2 创建 lb 节点](#3.2 创建 lb 节点)
- [4. 执行过程与输出](#4. 执行过程与输出)
- [5. 虚拟机管理常用命令](#5. 虚拟机管理常用命令)
- [6. 总结与最佳实践](#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等必要软件包。bash# 在 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 节点
bash
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 类似,主要区别在于资源分配更少(适合轻量级服务)。
bash
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
域创建完成。
输出解读:
开始安装......:virt-install开始处理创建请求。创建域......: "域" (Domain) 是 libvirt 中对虚拟机实例的称呼。进度条显示创建过程,由于是导入现有镜像并创建稀疏磁盘文件,此过程通常非常快(几秒钟)。域创建完成。: 虚拟机已成功创建并注册到 libvirt 中。
重要说明 :由于使用了 --noautoconsole,命令完成后不会弹出图形界面。虚拟机已在后台启动。您可以使用 virsh 命令来管理它们。
5. 虚拟机管理常用命令
创建完成后,可以使用以下命令进行验证和管理:
bash
# 查看所有运行中的虚拟机
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 集群的各个节点。
- 部署分布式测试环境。
- 快速复制生产环境进行故障排查。
最佳实践建议:
- 模板准备:精心准备一个"黄金镜像"模板,完成系统初始化、常用软件安装、安全加固和通用配置。
- 资源配置 :根据虚拟机实际角色(计算密集型、内存密集型、I/O密集型)合理分配
--memory和--vcpus。 - 网络规划:对于生产环境,建议使用隔离的网络桥接或OVS,而非本例中的直接物理桥接,以增强安全性和灵活性。
- 存储后端:对于性能要求高的场景,考虑使用 LVM、Ceph RBD 或 NFS 等共享存储作为磁盘后端,而不是本地文件。
- 自动化 :将
virt-install命令封装到 Shell 脚本、Ansible Playbook 或 Terraform 配置中,实现完全自动化的基础设施部署。
希望这篇指南能帮助您熟练掌握使用命令行快速创建 KVM 虚拟机的技巧!