创建 vSphere 虚拟机模板
要重复且可靠地创建虚拟机通常非常困难。VMware vSphere 支持构建可以转换为模板的虚拟机。然后,你可以使用该模板来创建配置相同的虚拟机。Rancher 会在节点池中利用此功能来创建相同的 RKE1 和 RKE2 节点。
为了使用模板创建新的虚拟机,Rancher 有虚拟机必须预先安装的特定要求。根据这些要求配置虚拟机后,你需要准备虚拟机,然后再创建模板。准备工作完成后,虚拟机可以转换为模板并移动到内容库中,然后 Rancher 节点池就可以使用它了。
要求
Linux 和 Windows 虚拟机都需要特定工具才能供 vSphere 主机驱动使用。最关键的依赖项是 Linux 的 cloud-init 和 Windows 的 cloudbase-init。二者都用于通过配置主机名和设置 SSH 访问以及默认 Rancher 用户来配置虚拟机。如果需要其他配置,用户可以根据需要添加其他内容。此外,下面列出了其他要求以供参考。
备注
如果你有任何特定的防火墙规则或配置,则需要在创建模板之前将其添加到虚拟机。
Linux 依赖项
下面列出了需要在模板上安装的包。不同的发行版对应的名称会略有不同,例如,某些发行版会默认提供。
- curl
- wget
- git
- net-tools
- unzip
- apparmor-parser
- ca-certificates
- cloud-init
- cloud-guest-utils
- cloud-image-utils
- growpart
- cloud-initramfs-growroot
- open-iscsi
- openssh-server
- open-vm-tools
Windows 依赖项
模板上需要安装的包如下:
- Windows 容器功能
- cloudbase-init
- Docker EE - 仅限 RKE1
备注
RKE1 和 RKE2 对应的 Windows 模板的配置有所不同:
- RKE1 使用 Docker,因此任何 RKE1 模板都需要预先安装 Docker EE
- RKE2 不需要 Docker EE,因此不需要安装
创建模板
你可以手动创建虚拟机,也可以使用其他替代方法来创建虚拟机。
手动创建
- 在 VMware 中按照这些说明手动创建虚拟机。虚拟机运行后,你可以手动安装上面列出的依赖项,以便为 vSphere 主机驱动正确配置虚拟机。
- 根据你的特定环境和要求按需定制。
- 在创建模板之前进行最后的准备工作。
手动创建的替代方案
下面列出了创建虚拟机的其他替代选项:
Packer 是一种常用的替代方案。有关将其与 vSphere 一起使用的示例,请参阅参考。
准备虚拟机
创建具有所有必需依赖项(以及任何其他必需项)的虚拟机后,你必须执行最关键的下一个步骤,即准备将虚拟机转换为模板。此准备步骤会重置关键数据(例如虚拟机主机名、IP 等)以防止这些信息被带入新虚拟机。如果你无法执行此步骤,你也可以创建一个具有相同主机名、IP 地址等的虚拟机。
请注意,Linux 和 Windows 对应的准备步骤有所不同。
Linux 准备
以下命令将在 Linux 中重置你的虚拟机:
# 清理日志。
if [ -f /var/log/audit/audit.log ]; then
cat /dev/null > /var/log/audit/audit.log
fi
if [ -f /var/log/wtmp ]; then
cat /dev/null > /var/log/wtmp
fi
if [ -f /var/log/lastlog ]; then
cat /dev/null > /var/log/lastlog
fi
# 清理 udev 规则。
if [ -f /etc/udev/rules.d/70-persistent-net.rules ]; then
rm /etc/udev/rules.d/70-persistent-net.rules
fi
# 清理 /tmp 路径。
rm -rf /tmp/*
rm -rf /var/tmp/*
# 清理 SSH 主机密钥。
rm -f /etc/ssh/ssh_host_*
# 清理 machine-id。
truncate -s 0 /etc/machine-id
rm /var/lib/dbus/machine-id
ln -s /etc/machine-id /var/lib/dbus/machine-id
# 清理 shell 历史。
unset HISTFILE
history -cw
echo > ~/.bash_history
rm -fr /root/.bash_history
# 截断主机名、主机和 resolv.conf,并将主机名设置为 localhost。
truncate -s 0 /etc/{hostname,hosts,resolv.conf}
hostnamectl set-hostname localhost
# 清理 cloud-init。
cloud-init clean -s -l
Windows 准备
Windows 有一个名为 sysprep 的实用程序,用于一般化镜像并重置上述 Linux 项目。命令如下:
sysprep.exe /generalize /shutdown /oobe
转换为模板
- 关闭并停止虚拟机。
- 右键单击清单列表中的虚拟机,然后选择模板。
- 点击转换为模板。
结果:流程完成后,即可使用模板。
有关将虚拟机转换为模板的更多信息,请参阅 VMware 指南。
移动到内容库
Rancher 支持使用内容库提供的模板。内容库在 vSphere 中存储和管理内容,还支持发布和共享该内容。
以下是有关内容库的一些有用链接:
其他资源
以下是可能有用的其他资源列表: