系统环境
Proxmox VE 7.2-7

TL;DR

简单来说就是在原有容器模板的基础上添加自己需要的额外配置,
对于一个模板来说最好仅添加你日常所需服务的通用的部分。
你也不希望新容器一生成发现局域网里蹦出来两个dhcp服务器吧(笑

为什么要自己做模板?

我个人对全新环境的需求比较简单,
无非是预配ssh pubkey,安装好常用工具(nano、htop、lsof、iperf3等)
省下每次开机后数分钟的安装时间。

或者有运行k3s/k8s实验环境,需要快速生成一个worker节点,
通过预装好容器环境的模板开机,只需要简单修改配置即可快速向注册中心注册节点。

接触过各种公有云的小伙伴可能会想到cloud-init + 开机脚本的方案,
但是对于HomeLab这种可以直接接触系统镜像/模板的环境来说,
直接通过模板开机要比原生环境+开机脚本要快速的多,类似于云环境的自定义ISO/vmdk功能。

模板制作

先通过自带模板创建一个LXC容器,
在这里我选择 ubuntu22.04 LTS 作为例子

容器创建

创建后通过SSH进入容器

# 更新APT软件源与现有软件  
apt update && apt upgrade -y
 
# 安装自己需要的软件
apt install -y nano git curl wget htop iperf3 lsof ssh-import-id
 
# 通过GitHub导入公钥
# 该功能通过上面👆安装的ssh-import-id实现
ssh-import-id-gh AkkiaS7
 
# 修改sshd_config 阻止密码验证
# 找到PasswordAuthentications 设置为 no
nano /etc/ssh/sshd_config

完成安装与修改后,在PVE面板中关闭该容器,
然后点击转换成模板

关闭容器

模板使用

右键点击制作好的模板,选择克隆

克隆

克隆的两种模式

注意克隆模式有“链接克隆”与“完整克隆”两种,
区别如下:

  • 链接克隆:通过链接原始模板的方式立即创建新的容器映像,所有该模式下的克隆共享该模板的原始数据,因此最初不占用额外空间,对于新容器中的改动通过写时复制技术写入到新的数据块中。
  • 完整克隆:等效于完整复制一份新的磁盘映像,在该模式下允许克隆至其它存储空间中。

对于需要通过同一个模板大量创建容器的场景,选择链接克隆可以减小空间占用。

克隆完成后,容器默认处于关闭的状态,
注意修改网络选项中的IP地址为不冲突的IP,
或在创建模板时使用DHCP作为分配地址的方式。

网络设置

开机验证先前加载的ssh公钥及安装的软件与配置与创建的模板一致。
到此完成了所有lxc模板的制作与使用步骤。