静看光阴荏苒
不管不顾不问不说也不念

创建Proxmox Debian12 cloud-init模板

记录下具体的操作步骤,期间也遇到一些问题,把解决办法也做个记录。其实以前也记录过系统模板制作的步骤,只是现在觉得直接用各种cloud image更方便省事。

在pve内把debian的cloud image下载下来:

wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2

我用的是genericcloud,这个更小巧一点。但据说和q35机型不兼容。。不过我也没用q35。。需要其他的也可以在这里下载:

https://cloud.debian.org/images/cloud/bookworm/latest/

然后创建vm,注意网络配置,如不是vmbr0则需要修改:

qm create 20000 \
--name debian12-cloud-init \
--cpu host \
--cores 2 \
--memory 2048 \
--net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-pci \
--agent enabled=1

导入刚下载的image:

qm set 20000 --scsi0 local-zfs:0,import-from=/root/debian-12-genericcloud-amd64.qcow2,cache=writeback

这里要注意存储的id,我这里是local-zfs,存储id可在pve面板的“数据中心”-“存储”找到,同时该存储id的内容要有“磁盘映像”权限:

[可选]如果后续要修改vm磁盘的配置,可以用这个命令:

qm set 20000 --scsi0 local-zfs:vm-20000-disk-0,cache=writeback

添加cloud-init设备:

qm set 20000 --ide2 local-zfs:cloudinit

修改vm启动顺序:

qm set 20000 --boot order=scsi0

添加串行端口:

qm set 20000 --serial0 socket --vga serial0

设置系统的root账户和密码:

qm set 20000 --ciuser=root --cipassword="setyourpassword"

设置dns服务器,我准备是开only ipv6,所以这里就只配了2个ipv6的dns:

qm set 20000 --nameserver="2001:4860:4860::8888 2001:4860:4860::8844"

转换成系统模板:

qm template 20000

到这里其实这个模板就已经可以用了,但是默认的debian cloud image不能满足我的需求,所以还需要进行定制。

cloud-init可以做的事情很多,包括但不限于pve面板上面的那些内容,pve面板其实只实现了很基本的cloud-init功能。

实际上我们可以自己创建一个cloud-init片段来自定义所有cloud-init的配置。

首先还是转到pve面板的“数据中心”-“存储”,单击“添加”-“目录”:

进到对应的目录:

cd /cloud-init-snippets/snippets

导出刚才系统模板的默认cloud-init配置:

qm cloudinit dump 20000 user

输出的内容类似于:

#cloud-config
hostname: debian12-cloud-init
manage_etc_hosts: true
fqdn: debian12-cloud-init
user: root
disable_root: False
password: hidden
chpasswd:
  expire: False
package_upgrade: true

新建一个配置文件:

nano /cloud-init-snippets/snippets/userdata.yaml

把刚才导出的默认内容写入,同时加入我们自定义的内容:

#cloud-config
manage_etc_hosts: true
timezone: Asia/Shanghai
user: root
disable_root: False
password: hidden
chpasswd:
  expire: False
package_upgrade: true
packages:
  - qemu-guest-agent
runcmd:
  - sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config
  - sed -i 's/PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config
  - systemctl reload sshd
  - systemctl enable --now qemu-guest-agent

我删掉了hostname和fqdn相关的配置,因为一旦使用自定义配置文件后,这两个参数就没配置的意义了,后面会说到原因。

其次安装并启动了qemu-guest-agent,如果不使用qemu代理的话pve面板里面的“重启”和“关机”将不能正常工作。

debian cloud image内默认的ssh配置不允许root登录,也不允许使用密码登录,我进行了修改,方便用户登录ssh进行管理。

如果还有其他的需求,可根据cloud-init的文档来慢慢搓配置文件:

https://cloudinit.readthedocs.io/en/latest/reference/examples.html
https://cloudinit.readthedocs.io/en/latest/reference/modules.html

然后配置系统模板使用我们的自定义配置文件:

qm set 20000 --cicustom "user=snippets:snippets/userdata.yaml"

如果要删除自定义配置:

qm set 20000 --delete cicustom

回到pve面板,克隆一台vm:

注意这里的名称,如果没有使用自定义的cloud-init配置文件,则vm的hostname将匹配这里的名称。

一旦使用了自定义的cloud-init配置文件,则hostname自动匹配就失效了,这个问题困扰我许久,找了半天,最终在这个贴子找到一个比较简单的解决办法:

https://forum.proxmox.com/threads/hostname-not-set-via-cloudinit-with-cicustom-and-ubuntu-22-04.110446/

转到对应vm-“选项”,编辑“SMBIOS设置”:

在“串行”写入如下内容,其中h=后面的内容就是你要设置的hostname:

ds=nocloud;h=prod-test

如图所示:

这样hostname的问题就解决了。

现在转到“硬件”-“硬盘”,可以看到默认的大小只有2GB:

你可以点击“磁盘操作”-“调整大小”,然后在界面内输入增量大小:

然后转到“cloud-init”,在这里我们需要配置vm的ip:

我没有配置dhcp/slaac,这里直接用静态地址:

启动vm检查相关配置:

由此可见,以后要创建一台vm就非常轻松了,步骤大概是:从系统模板克隆vm-根据需要调整磁盘大小-配置IP地址-[可选]配置hostname。

这可比挂载iso安装要方便多了,而且还能定制系统内容。

赞(2)
未经允许不得转载:荒岛 » 创建Proxmox Debian12 cloud-init模板
分享到: 更多 (0)

评论 8

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    多克隆几个小鸡,是不是只能手动设置IP地址 我发现自动获取不到
    PVE8.03 只有/cloud-init-snippets/images这个文件夹

    chenmo8个月前 (02-17) Google Chrome 121.0.0.0 Google Chrome 121.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 可以按这篇文章配置简单区域的sdn,自带了dhcp功能:https://lala.im/8925.html
      或者你可以单独用一台小鸡在里面安装dhcp服务器。

      LALA8个月前 (02-19) Google Chrome 121.0.0.0 Google Chrome 121.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 不创建目录也可以,把默认的存储(一般是local)里面的权限加上“片段”,然后把配置文件放到/var/lib/vz/snippets。没有snippets目录就新建一个。
      然后:qm set 20000 –cicustom “user=local:snippets/userdata.yaml”

      LALA8个月前 (02-19) Google Chrome 121.0.0.0 Google Chrome 121.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    lala怎么修改cloud-init的源,默认设置出来的模板是官方源,国内用太慢了

    cyril7个月前 (02-26) Google Chrome 121.0.0.0 Google Chrome 121.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 等我研究一下。。

      LALA7个月前 (03-02) Google Chrome 122.0.0.0 Google Chrome 122.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
  3. #3

    有一点点问题,好兄弟,看看这个配置咋回事,写不进去ip
    #cloud-config
    hostname: debian12-cloud-init
    manage_etc_hosts: true
    timezone: Asia/Shanghai
    user: root
    disable_root: False
    password: $5$dL6H//HE$IfvP3MouHNpSF.I5ebI4AWWpA5UrP7wm65hFs5MM2.A
    chpasswd:
    list: |
    root: {$password}
    expire: False
    package_upgrade: true
    network:
    version: 2
    ethernets:
    eth0:
    addresses:
    – 10.0.0.2/24
    routes:
    – to: default
    via: 10.0.0.1

    max6个月前 (03-26) Chrome 103.0.5060.54 Chrome 103.0.5060.54 iPhone iOS 16.6 iPhone iOS 16.6回复

分享创造快乐

广告合作资源投稿