html
今年对我的家庭实验室来说简直是一次启示,因为我终于把在Windows桌面和NAS上的一堆容器和虚拟机迁移到了一个专用的迷你PC上,使用Proxmox作为虚拟机监控器。然后我对HA集群兴奋不已,但最后发现这些迷你PC的性能不够,把整个系统迁移到一台内存超大的Strix Halo迷你PC上。
假期过后,它会放在一个6U机箱的专用服务器上,但这不断变化的规模让我明白了一件事。我得更聪明地选择用来创建容器和虚拟机的镜像,同时我也意识到,自动化工具是我下一个知识盲区。
Proxmox提供了相当不错的基础镜像和即用型服务,但我更习惯用其他Linux版本,所以不太用这些。我一直在手动安装虚拟机和转换容器,现在该停下来了。Proxmox让你可以用多种方式创建自己的模板,而我一直在偷懒。
Proxmox有很多基础镜像,但它们都有一个共同点
基础意味着没有最近的更新
Proxmox 提供了相当不错的镜像选择,但它们有一个问题:并不总是最新的。这很麻烦,因为用现有模板的一个原因就是我不想经历从ISO安装程序安装、更新和清理虚拟机的麻烦。
不过一旦你在主机上设置了任何虚拟机或LXC,就可以从中创建一个模板,然后用这个模板复制你家庭实验室的成功之路。只需像往常一样设置,然后右键点击列表中的虚拟机,选择‘创建模板’。不过这并不总是最佳方法,Proxmox为特定用例提供了更多选择。
Cloud-Init让事情变得更快
Proxmox支持的大部分内容都可以用自定义模板构建。如果你只初始化一个新的虚拟机,那没问题。但如果你想要几个来玩集群,每个又需要稍微不同的设置呢?这就麻烦了,不过Cloud-Init让这简单多了。
不过,初始设置不算简单哦。设置Cloud-Init模板需要花点时间,因为你得运行一系列shell命令,让虚拟机处于可用状态。然后你可以向虚拟机添加用户帐户、网络和SSH设置等详细信息。这对测试没问题,但在生产环境中把凭据加到虚拟机模板可就大忌了。我稍后会告诉你怎么用一些自动化工具来添加这些内容。
另外,不要忘记你现在可以使用OCI注册表镜像
Proxmox VE 9.1增加了另一种方法,可以直接从你选择的OCI注册表拉取镜像来制作自己的镜像。这包括Docker、Containerd和Podman,确保没错,它不会直接拉取和运行容器,而是下载后为你转换成LXC。
不再需要手动拉取容器、运行它,再把运行中的容器导出为Proxmox用的归档文件,这太棒了,因为每次都麻烦。去本地存储池,在CT模板部分点击‘从OCI注册表拉取’。就像用docker pull命令行一样,输入你喜欢的镜像库。比如,把radhifadlillah/shiori添加到参考框中,在标签框中填latest,你就能看到一个下载按钮。
然后就和创建其他基础镜像一样:部署容器,右键点击容器名称,选择‘转换为模板’。
让我们用 Packer 再来自动化一些事情
Hashicorp 是基础设施即代码(IoC)的霸主
到目前为止,所有的方法都有效,能帮你节省时间。不过我们总能在家庭实验室里进一步优化,实际上,没有比 HashiCorp 的工具更好了。我们之前用 Proxmox 介绍过 Terraform,这次我们要用一个不同的工具 Packer,它可以让你定义制作机器镜像的过程,包括 Docker、LXC 和虚拟机,并自动创建镜像,包含更新、用户账户和我们想要的其他信息。
这就像看着你的电脑复活,为你创建一个虚拟机,看到这一切真是太神奇了。我是在电影中计算机智能的时代长大的,电脑通过命令行和用户对话,看到这种程度的自动化让我想起了那些惊奇的感觉。
是时候开始我们的虚拟机模板了
我们需要一个基础镜像和一个定义文件
和其他基础设施即代码工具一样,Packer 使用简单易懂的文本文件作为构建指令。我需要一个名为 ubuntu-2510-desktop.pkr.hcl 的文本文件在 Cursor 中打开,这是我现在最喜欢的编辑器。首先,我们要添加指令,让 Packer 下载与我的 PVE 节点交互所需的 Proxmox 插件。
# ubuntu-2510-desktop.pkr.hcl
packer {
required_plugins {
proxmox = {
version = ">= 1.1.1"
source = "github.com/hashicorp/proxmox"
我不打算把这个文件的每一个部分都列出来,因为会很长,但我会放出一般结构。在 Proxmox 插件之后,我们需要定义用户名、密码和 Proxmox 节点的 URL,以便告诉 Packer 如何连接到我们的节点。接下来的部分告诉 Packer 从哪里下载 Ubuntu 25.10 ISO,并且我们希望将其存储在 Proxmox 节点的本地存储池中。
接着,我们输入虚拟机所需的详细信息,包括内存、核心数、操作系统、网络适配器的详细信息,以及要创建的虚拟磁盘。在创建其余的 HCL2 文件之前,我们可以利用 Cloud-Init,让 Packer 为我们处理 Ubuntu 安装中所有繁琐的部分。首先,我们创建一个名为 cidata 的文件夹,并在其中创建 user-data 和 meta-data 文件,这两个文件在 Packer 运行时将作为挂载的 CD。我们在 user-data 文件中添加以下内容:
#cloud-config
autoinstall:
version: 1
refresh-installer:
语言环境: en_US.UTF-8
键盘布局:
布局: 美国
身份标识:
主机名: ubuntu-desktop(乌班图桌面)
设置的密码: "secretgoeshere"
用户名: ubuntu(乌班图)
SSH设置:
允许使用密码: 否
install-server: true
授权密钥列表:
- "ssh-ed25519 你生成的 SSH 密钥 name@email"
package_update: true
package_upgrade: true
软件包:
- qemu-guest-agent
- cloud-init
这告诉 cloud-init 这不是一个 shell 脚本,告诉系统在继续之前下载最新的 Ubuntu 安装程序,设置区域、键盘布局、用户名和密码等,并为虚拟机配置 SSH 密钥,并告诉 Packer 更新已安装的操作系统,同时添加 qemu-guest-agent 和 cloud-init 软件包。你可以在这里添加任何你想要的软件包,比如你喜欢的工具或应用程序,但添加的软件包越多,所需的时间就会越长。
然后回到 HCL2 文件,添加一个挂载 cidata 文件夹的部分,以便进行 SSH 连接。还有一个部分是关于设置 GRUB 和引导加载程序的正确命令;以及在 Proxmox 节点上为 VM 命名。
在这个阶段,在终端仿真器中运行 "packer build ./ubuntu-2510-desktop.pkr.hcl" 将启动 Packer,您可以前往您的 Proxmox 节点观看魔法的过程。大约十分钟后,Packer 将通过 SSH 连接到正在运行的 VM,以重置 cloud-init,准备将此 VM 转换为模板,就完成了。
自己制作的 Proxmox 模板更好
像 Proxmox 这样的虚拟化平台的强大之处在于,它们能提供一个虚拟的空白空间,以创建您想要的实验和生产架构。刚开始时设置单独的容器或 VM 是可以的,但一旦掌握了基础,您就可以把时间花在学习其他东西上。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.