创建模版
# 下载带cloud-init的ubuntu镜像
wget -O /var/lib/vz/template/iso/ubuntu-22.04-server-cloudimg-amd64.img http://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img
TEMPLATE_ID=9999
# 创建虚拟机
qm create $TEMPLATE_ID --name ubuntu22-template --memory 8192 --net0 virtio,bridge=vmbr0 --onboot 1
# 导入云镜像
qm importdisk $TEMPLATE_ID /var/lib/vz/template/iso/ubuntu-22.04-server-cloudimg-amd64.img local-lvm
# 设置硬盘总线为virtio
qm set $TEMPLATE_ID --virtio0 local-lvm:vm-9999-disk-0
# 修改虚拟机的引导顺序
qm set $TEMPLATE_ID --boot c --bootdisk virtio0
# 虚拟机添加cloud-init硬件设备
qm set $TEMPLATE_ID --ide2 local-lvm:cloudinit
# (使用OVMF才需要)设置串口显卡,否则你的虚拟机启动不了
qm set $TEMPLATE_ID --serial0 socket --vga serial0
# 将虚拟机设置成模板(这个虚拟机只能被克隆,无法运行)
qm template $TEMPLATE_ID
以下附加操作会造成VM启动或无法关机故障
1,使用EFI BIOS(OVMF),但没设置串口显卡
2,允许QEMU Guest Agent
创建配置文件(可选)
cat >/var/lib/vz/snippets/user-data.yaml <<EOF
#cloud-config
disable_root: False
chpasswd:
expire: False
ssh_pwauth: True
EOF
这个文件必须放在snippets内(数据中心>存储>片段),并可对所有宿主机有效,不然虚拟机会迁移或启动失败
部署实例
VM_ID=123
# 从模版clone出一台虚拟机
qm clone $TEMPLATE_ID $VM_ID --name ubuntu
# 默认镜像硬盘只有2G,扩容到100G
qm disk resize $VM_ID virtio0 +100G
# 设置硬件
qm set $VM_ID --cores 2 --memory 8192
# 设置root密码
qm set $VM_ID --ciuser root --cipassword 123123
# 配置静态网络
qm set $VM_ID --ipconfig0 ip=10.0.10.123/24,gw=10.0.10.1,ip6=dhcp
# 设置DNS,默认用网关地址(可选)
qm set $VM_ID --nameserver 114.114.114.114
#附加配置,就是上一步中创建的文件(可选)
qm set $VM_ID --cicustom "user=local:snippets/user-data.yaml"
# 设置ssh密钥(可选)
qm set $VM_ID --sshkey ~/.ssh/id_rsa.pub
#如发生无法关机等情况,请删下面目录中虚拟机相关id的conf文件
rm /var/lock/qemu-server/lock-$VM_ID.conf
qm stop $VM_ID
安装qemu-guest-agent
https://www.ctyun.cn/developer/article/474676370411589
https://blog.csdn.net/qq_43626147/article/details/128289823
参考:
https://cloudinit.readthedocs.io/en/latest/index.html
https://pve.proxmox.com/wiki/Cloud-Init_Support
https://pve.proxmox.com/pve-docs/qm.1.html