第 7 章 模板
模板是虚拟机的副本,您可以使用它来简化后续类似虚拟机的重复创建。模板捕获软件配置、硬件配置以及模板所基于的虚拟机上安装的软件配置。基于模板的虚拟机称为源虚拟机。
基于虚拟机创建模板时,将创建虚拟机的磁盘只读副本。此只读磁盘成为新模板的基础磁盘映像,以及基于模板创建的任何虚拟机的磁盘镜像。因此,环境中存在基于模板创建的任何虚拟机时,无法删除该模板。
基于模板创建的虚拟机使用与原始虚拟机相同的 NIC 类型和驱动程序,但会分配单独的 MAC 地址。
您可以通过 Templates 选项卡以及 Virtual Machines 选项卡创建虚拟机。在 Templates 选项卡中,右键单击所需的模板,再选择 New VM。有关为新虚拟机选择设置和控制的详情请参考 第 A.1.1 节 “虚拟机常规设置说明”。
7.1. 在准备部署作为模板封装虚拟机
这部分论述了封装 Linux 虚拟机和 Windows 虚拟机的步骤。封装是在基于该虚拟机创建模板之前从虚拟机中删除所有系统特定详情的过程。封装的目的是防止在基于同一模板创建的多个虚拟机上显示相同的详细信息。还需要确保其他功能的功能,如可预测的 vNIC 顺序。
7.1.1. 为将 Linux 虚拟机封装为模板
有两种方法可用来封装 Linux 虚拟机,以准备使用该虚拟机创建模板: 手动或使用 sys-unconfig 命令。手动封装 Linux 虚拟机要求您在虚拟机上创建一个文件,该文件将在下次启动虚拟机时作为启动各种配置任务的标志。sys-unconfig 命令允许您自动执行此过程。但是,这两种方法还需要手动删除特定于该虚拟机的虚拟机中的文件,或者可能导致基于该模板创建的虚拟机之间冲突。因此,两者都是封装 Linux 虚拟机的有效方法,将会获得相同的结果。
7.1.1.1. 手动封装作为模板部署的 Linux 虚拟机
在基于该虚拟机创建模板之前,您必须对 Linux 虚拟机进行规范化(密封)。
过程 7.1. 封装 Linux 虚拟机
这个步骤描述了封装虚拟机以用作模板所需的最小步骤。可以使用其他主机和特定于站点的步骤。
- 登录虚拟机。
- 为重新配置标记系统:
- 对于 Red Hat Enterprise Linux (RHEL) 6:
# touch /.unconfigured
- 对于 RHEL 7 或 Red Hat Virtualization Host (RHVH) 4.0:
# yum install initial-setup
注意必须注册您的系统才能接收inital-setup
软件包。
- 删除 SSH 主机密钥:
# rm -rf /etc/ssh/ssh_host_*
- 将主机名改为
localhost.localdomain
:- 对于 RHEL 6,编辑
/etc/sysconfig/network
中的HOSTNAME
值:HOSTNAME=localhost.localdomain
- 对于 RHEL 7 或 RHVH 4.0,请使用 hostnamectl 命令:
# hostnamectl set-hostname localhost.localdomain
- 删除
/etc/udev/rules.d/70-*
:# rm -rf /etc/udev/rules.d/70-*
- 从
/etc/sysconfig/network-scripts/ifcfg-eth*
中删除HWADDR
行和UUID
行。确保从此文件中删除所有静态信息,如 IP 地址、DNS 或网关。 - 从
/etc/
中删除 machine-id :machine-id
# cd /etc # chmod 777 machine-id # vi machine-id
删除机器 ID
。# chmod 444 machine-id
- 对于 RHEL 7,启用
initial-setup
服务:# systemctl enable initial-setup.service
- 取消注册系统:
# subscription-manager unregister # subscription-manager remove --all # subscription-manager clean
- (可选)从
/var/log
中删除所有日志,并从/root
中删除构建日志。 - 关闭虚拟机:
# poweroff
虚拟机密封并可以放入模板中。您可以从此模板部署 Linux 虚拟机,而无需遇到配置文件冲突。
7.1.1.2. 使用 sys-unconfig 将 Linux 虚拟机封装为模板
在基于该虚拟机创建模板之前,您必须对 Linux 虚拟机进行规范化(密封)。
过程 7.2. 使用 sys-unconfig 封装 Linux 虚拟机
- 登录虚拟机。
- 删除 SSH 主机密钥:
# rm -rf /etc/ssh/ssh_host_*
- 将主机名更改为
localhost.localdomain
。- 对于 Red Hat Enterprise Linux 6,编辑
/etc/sysconfig/network
中的HOSTNAME
值:HOSTNAME=localhost.localdomain
- 对于 Red Hat Enterprise Linux 7,使用 hostnamectl 命令:
# hostnamectl set-hostname localhost.localdomain
- 从
/etc/sysconfig/network-scripts/ifcfg-eth*
中删除HWADDR
行和UUID
行。 - (可选)从
/var/log
中删除所有日志,并从/root
中删除构建日志。 - 运行以下命令:
# sys-unconfig
虚拟机关闭;它现在已密封,并可进入模板中。您可以从此模板部署 Linux 虚拟机,而无需遇到配置文件冲突。
7.1.2. 为将 Windows 虚拟机封装为模板
为 Windows 虚拟机创建的模板必须经过规范(密封),然后才能用于部署虚拟机。这样可确保模板中不会再生成特定于机器的设置。
在使用之前,使用 Sysprep 封装 Windows 模板。Sysprep 生成一个完整的无人值守安装应答文件。多个 Windows 操作系统的默认值可在
/usr/share/ovirt-engine/conf/sysprep/
目录中找到。这些文件充当 Sysprep 的模板。可以根据需要复制、粘贴和更改这些文件中的字段。此定义将覆盖 Edit Virtual Machine 窗口上 Initial Run 字段中输入的任何值。
可以编辑 Sysprep 文件,以影响从 Sysprep 文件所附加的模板中创建的 Windows 虚拟机的各个方面。这包括置备 Windows、设置所需的域成员资格、配置主机名和设置安全策略。
替换字符串可用于替换
/usr/share/ovirt-engine/conf/sysprep/
目录中默认文件中提供的值。例如 :"<Domain><![CDATA[$JoinDomain$]]></Domain>"
可以用来指示要加入的域。
7.1.2.1. 密封 Windows 虚拟机的先决条件
重要
请勿在 Sysprep 运行时重启虚拟机。
- Windows 虚拟机参数已正确定义。
- 如果没有,点 Edit the Virtual Machines 选项卡,然后在 Operating System 和 Cluster 字段中输入所需的信息。
- 管理器上的覆盖文件中定义了正确的产品密钥。覆盖文件必须在
/etc/ovirt-engine/osinfo.conf.d/
下创建,其文件名在/etc/ovirt-engine/osinfo.conf.d/00-defaults.properties
下,并以.properties
结束。例如:/etc/ovirt-engine/osinfo.conf.d/10-productkeys.properties
。最后一个文件将具有优先权并覆盖任何其他文件。如果没有,请将 Windows 操作系统的默认值从/etc/ovirt-engine/osinfo.conf.d/00-defaults.properties
复制到覆盖文件中,并在productKey.value
和sysprepPath.value
字段中输入您的值。例 7.1. Windows 7 默认配置值
# Windows7(11, OsType.Windows, false),false os.windows_7.id.value = 11 os.windows_7.name.value = Windows 7 os.windows_7.derivedFrom.value = windows_xp os.windows_7.sysprepPath.value = ${ENGINE_USR}/conf/sysprep/sysprep.w7 os.windows_7.productKey.value = os.windows_7.devices.audio.value = ich6 os.windows_7.devices.diskInterfaces.value.3.3 = IDE, VirtIO_SCSI, VirtIO os.windows_7.devices.diskInterfaces.value.3.4 = IDE, VirtIO_SCSI, VirtIO os.windows_7.devices.diskInterfaces.value.3.5 = IDE, VirtIO_SCSI, VirtIO os.windows_7.isTimezoneTypeInteger.value = false
7.1.2.2. 封装 Windows 7、Windows 2008 或 Windows 2012 模板
在使用模板部署虚拟机之前,密封 Windows 7、Windows 2008 或 Windows 2012 模板。
过程 7.3. 封装 Windows 7、Windows 2008 或 Windows 2012 模板
- 从
C:\Windows\System32\sysprep\sysprep.exe
启动 Sysprep。 - 在 Sysprep 中输入以下信息:
- 在 System Cleanup Action 下,选择 Enter System Out-of-Experience (OOBE)。
- 如果需要更改计算机的系统标识号(SID),请选择 Generalize 复选框。
- 在 Shutdown Options 下,选择 Shutdown。
- 单击以完成密封过程;虚拟机将在完成后自动关闭。
Windows 7、Windows 2008 或 Windows 2012 模板已密封并准备好部署虚拟机。