0 环境约定

  • • PVE 8.2 / Debian 12 基础模板

  • • 节点已启用 ZFS(RAID-1 SSD)

  • • 管理网段 192.168.10.0/24,网关 192.168.10.1

  • • 所有命令均以 root 身份在节点 Shell 执行


1 模板准备

# 更新模板索引
pveam update

# 下载 Debian 12 标准模板(200 MB 左右)
pveam download local debian-12-standard_12.0-1_amd64.tar.zst

# 验证 SHA256
sha256sum /var/lib/vz/template/cache/debian-12-standard_12.0-1_amd64.tar.zst
# 输出应与官网一致,否则重下

2 创建脚本化:7 张配置卡逐项拆解

下面给出 CLI 等价参数,方便后续批量。Web 向导与命令行一一对应,可混合使用。

步骤

Web 字段

CLI 参数

默认值 → 建议值

生产坑位

① 通用

VMID / 主机名

--vmid 120

--hostname ct-gitlab.home.arpa

下个可用 ID / CT-100

主机名含中文时 API 返回 Parameter verification failed. hostname - invalid format

② 存储

根磁盘

--rootfs local-zfs:20

local-lvm:8

ZFS 才能快照;8 GB 装 Docker 两镜像即满

③ CPU

核心数

--cores 2

1

LXC 热插拔即时生效,无需关机

④ 内存

RAM + SWAP

--memory 2048 --swap 4096

512 / 512

编译型 CI 建议 4 G+;swap 避免 OOM kill

⑤ 网络

IPv4

--net0 name=eth0,bridge=vmbr0,ip=192.168.10.120/24,gw=192.168.10.1

DHCP

DHCP 租约变化会导致 Ansible 失联

⑥ DNS

DNS 域 / 服务器

--searchdomain home.arpa --nameserver 192.168.10.1

漏写则 apt update 报 Temporary failure resolving...

⑦ 特权

无特权容器

--unprivileged 0

1

需在容器内跑 Docker 或需要 mknod 时必须特权

一键命令示例(含注释):

pct create 120 \
  --hostname ct-gitlab.home.arpa \
  --storage local-zfs \
  --rootfs 20 \
  --cores 2 \
  --memory 2048 \
  --swap 4096 \
  --net0 name=eth0,bridge=vmbr0,ip=192.168.10.120/24,gw=192.168.10.1 \
  --nameserver 192.168.10.1 \
  --searchdomain home.arpa \
  --unprivileged 0 \
  --features nesting=1 \
  --ostemplate local:vztmpl/debian-12-standard_12.0-1_amd64.tar.zs

3 启动后 30 秒自检清单

# 1. 容器内系统版本
pct enter 120 -- cat /etc/os-release | grep PRETTY

# 2. 网络连通
pct enter 120 -- ping -c 3 192.168.10.1

# 3. DNS 解析
pct enter 120 -- dig +short github.com

# 4. 磁盘剩余
pct enter 120 -- df -h /

# 5. 特权状态(CapEff 全 f 表示特权)
pct enter 120 -- grep CapEff /proc/self/status

4 常见回滚场景

症状

根因

最快修复

docker: overlay2: unknown filesystem

忘记 --features nesting=1

关机后 pct set 120 --features nesting=1

apt update

 报 Could not resolve

未写 nameserver

pct set 120 --nameserver 8.8.8.8

容器无法快照

使用 local-lvm

迁移磁盘到 ZFS:pct move-disk 120 scsi0 local-zfs


5 小结

  • • 主机名、DNS、静态 IP 是最容易被忽视却最影响后期自动化的三要素

  • • 磁盘 20 GB 起步、特权开关 + nesting 一步到位,能节省 80% 后续排障时间

  • • CLI 参数与 Web 向导 100 % 对应,写好模板后可批量 for i in {121..125}; do pct create $i ...; done 快速生成同规格容器集群

把以上命令保存为 create_ct.sh,下次再开新容器只需改 3 个变量,真正的“ Infrastructure as Code ”从这一步开始。