创建 vSphere 虚拟机模板

要重复且可靠地创建虚拟机通常非常困难。VMware vSphere 支持构建可以转换为模板的虚拟机。然后,你可以使用该模板来创建配置相同的虚拟机。Rancher 会在节点池中利用此功能来创建相同的 RKE1 和 RKE2 节点。

为了使用模板创建新的虚拟机,Rancher 有虚拟机必须预先安装的特定要求。根据这些要求配置虚拟机后,你需要准备虚拟机,然后再创建模板。准备工作完成后,虚拟机可以转换为模板移动到内容库中,然后 Rancher 节点池就可以使用它了。

要求

Linux 和 Windows 虚拟机都需要特定工具才能供 vSphere 主机驱动使用。最关键的依赖项是 Linux 的 cloud-init 和 Windows 的 cloudbase-init。二者都用于通过配置主机名和设置 SSH 访问以及默认 Rancher 用户来配置虚拟机。如果需要其他配置,用户可以根据需要添加其他内容。此外,下面列出了其他要求以供参考。

创建 vSphere 虚拟机模板 - 图1备注

如果你有任何特定的防火墙规则或配置,则需要在创建模板之前将其添加到虚拟机。

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 依赖项

模板上需要安装的包如下:

创建 vSphere 虚拟机模板 - 图2备注

RKE1 和 RKE2 对应的 Windows 模板的配置有所不同:

  • RKE1 使用 Docker,因此任何 RKE1 模板都需要预先安装 Docker EE
  • RKE2 不需要 Docker EE,因此不需要安装

创建模板

你可以手动创建虚拟机,也可以使用其他替代方法来创建虚拟机。

手动创建

  1. 在 VMware 中按照这些说明手动创建虚拟机。虚拟机运行后,你可以手动安装上面列出的依赖项,以便为 vSphere 主机驱动正确配置虚拟机。
  2. 根据你的特定环境和要求按需定制。
  3. 在创建模板之前进行最后的准备工作。

手动创建的替代方案

下面列出了创建虚拟机的其他替代选项:

Packer 是一种常用的替代方案。有关将其与 vSphere 一起使用的示例,请参阅参考

准备虚拟机

创建具有所有必需依赖项(以及任何其他必需项)的虚拟机后,你必须执行最关键的下一个步骤,即准备将虚拟机转换为模板。此准备步骤会重置关键数据(例如虚拟机主机名、IP 等)以防止这些信息被带入新虚拟机。如果你无法执行此步骤,你也可以创建一个具有相同主机名、IP 地址等的虚拟机。

请注意,Linux 和 Windows 对应的准备步骤有所不同。

Linux 准备

以下命令将在 Linux 中重置你的虚拟机:

  1. # 清理日志。
  2. if [ -f /var/log/audit/audit.log ]; then
  3. cat /dev/null > /var/log/audit/audit.log
  4. fi
  5. if [ -f /var/log/wtmp ]; then
  6. cat /dev/null > /var/log/wtmp
  7. fi
  8. if [ -f /var/log/lastlog ]; then
  9. cat /dev/null > /var/log/lastlog
  10. fi
  11. # 清理 udev 规则。
  12. if [ -f /etc/udev/rules.d/70-persistent-net.rules ]; then
  13. rm /etc/udev/rules.d/70-persistent-net.rules
  14. fi
  15. # 清理 /tmp 路径。
  16. rm -rf /tmp/*
  17. rm -rf /var/tmp/*
  18. # 清理 SSH 主机密钥。
  19. rm -f /etc/ssh/ssh_host_*
  20. # 清理 machine-id。
  21. truncate -s 0 /etc/machine-id
  22. rm /var/lib/dbus/machine-id
  23. ln -s /etc/machine-id /var/lib/dbus/machine-id
  24. # 清理 shell 历史。
  25. unset HISTFILE
  26. history -cw
  27. echo > ~/.bash_history
  28. rm -fr /root/.bash_history
  29. # 截断主机名、主机和 resolv.conf,并将主机名设置为 localhost。
  30. truncate -s 0 /etc/{hostname,hosts,resolv.conf}
  31. hostnamectl set-hostname localhost
  32. # 清理 cloud-init。
  33. cloud-init clean -s -l

Windows 准备

Windows 有一个名为 sysprep 的实用程序,用于一般化镜像并重置上述 Linux 项目。命令如下:

  1. sysprep.exe /generalize /shutdown /oobe

转换为模板

  1. 关闭并停止虚拟机。
  2. 右键单击清单列表中的虚拟机,然后选择模板
  3. 点击转换为模板

结果:流程完成后,即可使用模板。

有关将虚拟机转换为模板的更多信息,请参阅 VMware 指南

移动到内容库

Rancher 支持使用内容库提供的模板。内容库在 vSphere 中存储和管理内容,还支持发布和共享该内容。

以下是有关内容库的一些有用链接:

其他资源

以下是可能有用的其他资源列表: