既然模版已经打好了,接下来的重头戏就是快速批量部署。

在 PVE 宿主机上,你可以使用下面的脚本实现“一键分身”。它支持指定起止 ID、主机名逻辑以及网络配置。


PVE 批量克隆 LXC 脚本 (batch_lxc.sh)

将此脚本保存在 PVE 宿主机(例如 /root/batch_lxc.sh)并赋予执行权限。

Bash

#!/bin/bash
# PVE 批量克隆 LXC 容器脚本

# --- 配置参数 ---
TEMPLATE_ID=100           # 你的模版 ID
START_ID=200              # 起始新容器 ID
COUNT=3                   # 克隆数量
HOSTNAME_PREFIX="node"    # 主机名前缀 (结果如 node200, node201...)
BRIDGE="vmbr0"            # 网桥
STORAGE="local-lvm"       # 存储位置 (根据你的 PVE 存储名修改,如 local-zfs, thin-data)
AUTO_START=1              # 1 为克隆后自动启动,0 为不启动

# --- 脚本逻辑 ---
echo "开始从模版 $TEMPLATE_ID 批量克隆 $COUNT 个容器..."

for ((i=0; i<COUNT; i++)); do
    NEW_ID=$((START_ID + i))
    NEW_HOSTNAME="${HOSTNAME_PREFIX}${NEW_ID}"

    echo "------------------------------------------------"
    echo "正在创建容器: $NEW_ID ($NEW_HOSTNAME)..."

    # 1. 执行全量克隆 (Full Clone)
    # 如果存储支持快照,可以去掉 --full 使用链接克隆以节省空间
    pct clone $TEMPLATE_ID $NEW_ID --hostname $NEW_HOSTNAME --full 1 --storage $STORAGE

    # 2. 配置网络 (默认 DHCP)
    # 如果需要静态 IP,可修改为: ip=192.168.1.$((100+i))/24,gw=192.168.1.1
    pct set $NEW_ID --net0 name=eth0,bridge=$BRIDGE,ip=dhcp

    # 3. 启动容器
    if [ $AUTO_START -eq 1 ]; then
        echo "正在启动 $NEW_ID..."
        pct start $NEW_ID
    fi

    echo "✅ 容器 $NEW_ID 创建成功!"
done

echo "------------------------------------------------"
echo "所有任务已完成!"

如何使用:

  1. 修改参数:根据你的实际环境修改脚本顶部的 TEMPLATE_ID 和 STORAGE。
  2. 运行脚本:bash batch_lxc.sh。

进阶技巧:针对你的 PVE 集群环境

既然你之前提到正在折腾 PVE 高可用 (HA) 集群 以及异构节点(Intel/AMD),这里有两个额外的建议:

1. 关于“链接克隆” (Linked Clone)

如果在克隆时去掉 --full 1,PVE 会创建一个依赖于模版的“链接克隆”。

  • 优点:秒级创建,几乎不占额外空间。
  • 注意:在集群环境下,模版必须存在于共享存储(如 Ceph, NFS, iSCSI)上,否则其他节点无法启动这些克隆出来的容器。

2. 关于 CPU 架构兼容性

虽然 LXC 共享宿主机内核,但如果你在模版里安装了特定于指令集的软件包(比如针对 Intel 优化的某些库),在 AMD 节点上可能会有细微的性能差异或异常。

  • 优雅做法:尽量保持模版内的软件为通用架构编译版。

3. 设置高可用 (HA)

如果你希望这些新创建的容器自动加入 HA:

Bash

# 在脚本循环中加入这一行
ha-manager add ct:$NEW_ID --group your-ha-group --state started