目录

在 Proxmox VE 上用 Gentoo Cloud-Init 镜像做模板

Gentoo 官方推出了 qcow2 镜像,带 Cloud-Init 支持。这篇记录怎么在 Proxmox VE 上把它做成模板。

Cloud-Init 负责虚拟机的早期初始化。虚拟机第一次启动时,它会应用主机名、IP、DNS、要装的软件包等配置。

Proxmox 模板与 Cloud-Init 结合使用,可以快速部署新的虚拟机。模板可用于快速创建新虚拟机,而 Cloud-Init 负责初始化新虚拟机,使你只需设置主机名和初始用户账户。这样,每次创建新虚拟机时,就不再需要从头安装操作系统。

这个地方有多个版本:

这里选带 Cloud-Init 支持的版本。别写死日期,从 latest-di-amd64-cloudinit.txt 取当前文件:

MIRROR=https://distfiles.gentoo.org/releases/amd64/autobuilds
FILE=$(curl -s "$MIRROR/latest-di-amd64-cloudinit.txt" | awk '/^[0-9]/{print $1; exit}')
wget -c "$MIRROR/$FILE"
QCOW2=$(basename "$FILE")

首先创建一个叫gentoo-cloudinit的虚拟机,虚拟机类型为q35:

qm create 114514 --name gentoo-cloudinit --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --machine q35

导入qcow2镜像以及调整对应的磁盘大小:

这里的ceph-pve是我的存储卷,你可以根据你的实际情况去调整

qm set 114514 --scsi0 ceph-pve:0,discard=on,ssd=1,format=qcow2,import-from=/root/$QCOW2
qm disk resize 114514 scsi0 20G

format=qcow2 适用于目录类存储。如果 ceph-pve 是 Ceph RBD,去掉 format=qcow2,RBD 用 raw。 设置启动顺序:

qm set 114514 --boot order=scsi0

配置cpu和内存:

qm set 114514 --cpu host --cores 2 --memory 2048

配置 UEFI:

qm set 114514 --bios ovmf --efidisk0 ceph-pve:1,format=qcow2,efitype=4m

同样,RBD 存储要去掉 format=qcow2。

配置cloud init:

qm set 114514 --ide2 ceph-pve:cloudinit
qm set 114514 --agent enabled=1

这里可以根据实际情况去进行配置,一般来说是用户名、dns、ssh key、获取ip的方式:

为了方便我这里将其转换成了模板:

qm template 114514

这里只讲一下如何在UI上用这个模板,实际生产环境的话尽量避免这种用法。

这里选择克隆:

这里需要注意一下克隆的方式是选择full clone不是link clone,填写好虚拟机名称之后即可克隆:

克隆完成之后打开虚拟机即可享用新鲜的gentoo了:

我这里没有直接用cloud init设置固定ip,查了一下arp表拿到了当前虚拟机的ip。实际你可以通过cloud init设置固定ip,这样更方便管理一些。

通过ssh进行连接:

在有了gentoo cloud init镜像之后在生产环境中使用gentoo的阻力其实小了很多。

可以用 Packer 定期构建镜像。

也可以在内网放一台构建机,给 emerge 配代理,离线构建也不是问题;发布 binpkg 后,每个节点就不用再花大量时间和资源编译更新了。

Gentoo的灵活性很高能够根据不同的硬件进行优化,可以打portage的快照按照快照去做binpkg进行增量更新。在大规模节点的情况下只需要维护好一份portage的配置即可维护成本也是很低的。

在我看来,Gentoo 在生产环境里还是很有搞头的,就看以后有没有更多公司愿意吃这个螃蟹,并且回馈上游。