使用 virt-install 命令行快速创建 KVM 虚拟机(以 CentOS 7 为例)

使用 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-installvirt-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-buildercloud-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
域创建完成。

输出解读:

  1. 开始安装......: virt-install 开始处理创建请求。
  2. 创建域......: "域" (Domain) 是 libvirt 中对虚拟机实例的称呼。进度条显示创建过程,由于是导入现有镜像并创建稀疏磁盘文件,此过程通常非常快(几秒钟)。
  3. 域创建完成。: 虚拟机已成功创建并注册到 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 集群的各个节点。
  • 部署分布式测试环境。
  • 快速复制生产环境进行故障排查。

最佳实践建议:

  1. 模板准备:精心准备一个"黄金镜像"模板,完成系统初始化、常用软件安装、安全加固和通用配置。
  2. 资源配置 :根据虚拟机实际角色(计算密集型、内存密集型、I/O密集型)合理分配 --memory--vcpus
  3. 网络规划:对于生产环境,建议使用隔离的网络桥接或OVS,而非本例中的直接物理桥接,以增强安全性和灵活性。
  4. 存储后端:对于性能要求高的场景,考虑使用 LVM、Ceph RBD 或 NFS 等共享存储作为磁盘后端,而不是本地文件。
  5. 自动化 :将 virt-install 命令封装到 Shell 脚本、Ansible Playbook 或 Terraform 配置中,实现完全自动化的基础设施部署。

希望这篇指南能帮助您熟练掌握使用命令行快速创建 KVM 虚拟机的技巧!

相关推荐
|_⊙1 小时前
进程间通信(System V 标准下的多种通信方式)
linux·运维·服务器
云登指纹浏览器1 小时前
指纹浏览器自动化API对接实战总结:技术方案选型 + 避坑指南
运维·后端·自动化
蹉跎岁月新2 小时前
Jenkins创建一个maven-project
运维·jenkins·maven
zincsweet2 小时前
C++ 实现进程池:主从架构、管道通信与任务调度
linux·c++
草莓熊Lotso2 小时前
【CMake】静态库的编译、链接与引用全解析
linux·c语言·数据库·c++·软件工程·cmake
原来是猿2 小时前
性能测试(1)
运维·服务器·python·压力测试
郝学胜-神的一滴2 小时前
CMake 012:Linux 下动态库与可执行程序的单文件构建
linux·服务器·开发语言·c++·软件构建·cmake
为思念酝酿的痛10 小时前
POSIX信号量
linux·运维·服务器·后端
专业白嫖怪10 小时前
什么是docker
运维·docker·容器