11.2. 创建虚拟机模板

要创建可正常工作的多个虚拟机(VM)克隆,您可以对删除源虚拟机的唯一信息和配置,如 SSH 密钥或持久性网络 MAC 配置。这将创建一个虚拟机 模板,您可以使用它来轻松且安全地创建虚拟机克隆。

您可以 使用 virt-sysprep 工具 创建虚拟机模板或根据您的要求 手动创建它们

11.2.1. 使用 virt-sysprep 创建虚拟机模板

要从现有虚拟机(VM)创建克隆模板,您可以使用 virt-sysprep 工具。这会删除某些可能导致克隆工作不正常的配置,如特定的网络设置或系统注册元数据。因此,virt-sysprep 可以更高效地创建虚拟机的克隆,并确保克隆可以更加可靠地工作。

先决条件

  • 在主机上安装了包含 virt-sysprep 工具的 guestfs-tools 软件包:

    # dnf install guestfs-tools
  • 充当模板的源虚拟机已关闭。
  • 您知道源虚拟机的磁盘镜像所在的位置,并且您是虚拟机磁盘镜像文件的所有者。

    请注意,在 libvirt 的 系统连接 中创建的虚拟机的磁盘镜像位于 /var/lib/libvirt/images 目录中,默认由 root 用户拥有:

    # ls -la /var/lib/libvirt/images
    -rw-------.  1 root root  9665380352 Jul 23 14:50 a-really-important-vm.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 an-actual-vm-that-i-use.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
  • 可选: 源虚拟机磁盘上的所有重要数据都已备份。如果要保留源虚拟机完好无损,请首先 克隆 它,并将克隆转换为模板。

流程

  1. 确保您已作为虚拟机磁盘镜像的所有者登录:

    # whoami
    root
  2. 可选: 复制虚拟机的磁盘镜像。

    # cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2

    这用于之后验证虚拟机是否已成功转换为模板。

  3. 使用以下命令,将 /var/lib/libvirt/images/a-really-important-vm.qcow2 替换为源虚拟机磁盘镜像的路径。

    # virt-sysprep -a /var/lib/libvirt/images/a-really-important-vm.qcow2
    [   0.0] Examining the guest ...
    [   7.3] Performing "abrt-data" ...
    [   7.3] Performing "backup-files" ...
    [   9.6] Performing "bash-history" ...
    [   9.6] Performing "blkid-tab" ...
    [...]

验证

  • 要确认进程成功,请将修改的磁盘镜像与原始镜像进行比较。以下示例显示了成功创建模板:

    # virt-diff -a /var/lib/libvirt/images/a-really-important-vm-orig.qcow2 -A /var/lib/libvirt/images/a-really-important-vm.qcow2
    - - 0644       1001 /etc/group-
    - - 0000        797 /etc/gshadow-
    = - 0444         33 /etc/machine-id
    [...]
    - - 0600        409 /home/username/.bash_history
    - d 0700          6 /home/username/.ssh
    - - 0600        868 /root/.bash_history
    [...]

其它资源

11.2.2. 手动创建虚拟机模板

要从现有虚拟机(VM)创建模板,您可以手动重置或取消配置客户虚拟机来为克隆做好准备。

先决条件

  • 确保您知道源虚拟机的磁盘镜像的位置,并且是虚拟机磁盘镜像文件的所有者。

    请注意,在 libvirt 的 系统连接 中创建的虚拟机的磁盘镜像默认位于 /var/lib/libvirt/images 目录中,并由 root 用户拥有:

    # ls -la /var/lib/libvirt/images
    -rw-------.  1 root root  9665380352 Jul 23 14:50 a-really-important-vm.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 an-actual-vm-that-i-use.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
  • 确保虚拟机已关闭。
  • 可选: 虚拟机磁盘上的所有重要数据都已备份。如果要保留源虚拟机,请首先克隆它,并编辑克隆以创建模板。

流程

  1. 配置虚拟机以进行克隆:

    1. 在克隆上安装任何所需的软件。
    2. 为操作系统配置任何非唯一的设置。
    3. 配置任何非唯一的应用设置。
  2. 删除网络配置:

    1. 使用以下命令删除任何持久性 udev 规则:

      # rm -f /etc/udev/rules.d/70-persistent-net.rules
      注意

      如果没有删除 udev 规则,第一个 NIC 的名称可能是 eth1 而不是 eth0。

    2. /etc/NetworkManager/system-connections/ 目录中的 NMConnection 文件中删除唯一信息。

      1. 删除 MAC 地址、IP 地址、DNS、网关以及任何其他 唯一 信息或非必要设置。

        *ID=ExampleNetwork
        BOOTPROTO="dhcp"
        HWADDR="AA:BB:CC:DD:EE:FF"                  <- REMOVE
        NM_CONTROLLED="yes"
        ONBOOT="yes"
        TYPE="Ethernet"
        UUID="954bd22c-f96c-4b59-9445-b39dd86ac8ab" <- REMOVE
      2. /etc/hosts/etc/resolv.conf 文件中删除类似的 唯一 信息和非必要设置。
  3. 删除注册详情:

    • 对于在 Red Hat Network (RHN) 上注册的虚拟机:

      # rm /etc/sysconfig/rhn/systemid
    • 对于使用 Red Hat Subscription Manager (RHSM) 注册的虚拟机:

      • 如果您不打算使用原始虚拟机:

        # subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
      • 如果您打算使用原始虚拟机:

        # subscription-manager clean
        注意

        原始 RHSM 配置文件保留您 ID 代码的门户中。克隆后,使用以下命令重新激活虚拟机上的 RHSM 注册:

        # subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
  4. 删除其他唯一的详情:

    1. 删除 SSH 公钥和私钥对:

      # rm -rf /etc/ssh/ssh_host_example
    2. 删除 LVM 设备的配置:

      # rm /etc/lvm/devices/system.devices
    3. 如果在多台计算机上运行,删除任何其他特定于应用程序的标识符或配置可能会导致冲突。
  5. 删除 gnome-initial-setup-done 文件,将虚拟机配置为在下次引导时运行配置向导:

    # rm ~/.config/gnome-initial-setup-done
    注意

    在下次引导时运行的向导依赖于已从虚拟机中删除的配置。另外,在克隆的第一次引导时,会建议您更改主机名。