欢迎光临
我们一直在努力

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

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

输出解读:

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

    最佳实践建议:

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

    赞(0)
    未经允许不得转载:171主机测评 » 使用 virt-install 命令行快速创建 KVM 虚拟机(以 CentOS 7 为例)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址