ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Виртуализация и хост-ноды

Шаблон Cloud-Init в Proxmox VE: импорт облачных образов Debian/Ubuntu и быстрое клонирование VPS

5 шагов 14 мин чтения 2 просмотров 0
Содержание

Если вы выдаёте клиентам VPS на выделенном сервере с Proxmox VE, установка каждой ВМ с ISO вручную — это долго и чревато ошибками. Гораздо эффективнее сделать шаблон Cloud-Init в Proxmox VE: импортировать официальный облачный образ Debian или Ubuntu, подключить диск cloud-init и превратить ВМ в шаблон. Тогда новый VPS — это клон плюс IP, SSH-ключ и пароль, готовый меньше чем за минуту. Инструкция для Proxmox VE 7.x/8.x, все команды выполняются на хосте от root.

В примерах: ID шаблона 9000, хранилище дисков local-lvm, публичный мост vmbr0, документационная сеть 203.0.113.0/24. Подставьте блок IP и шлюз, выданные IMIDC. Подробнее о публичных адресах — в статье «Назначение IP виртуальным машинам PVE».

Шаг 1: Загрузка официального облачного образа Debian / Ubuntu

Облачные образы — это минимальные системные диски от разработчиков дистрибутивов с предустановленным cloud-init, который при первой загрузке подхватывает имя хоста, пользователя, SSH-ключи и сеть. Для Debian берите сборку genericcloud (компактная, для KVM), для Ubuntu — server-cloudimg. При желании заранее установите qemu-guest-agent через virt-customize, чтобы Proxmox видел IP гостя и корректно его выключал.

cd /var/lib/vz/template/iso   # any directory with enough space
# Debian 12 (bookworm) generic cloud image
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2
# Ubuntu 24.04 LTS (noble) cloud image
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

# optional: preinstall qemu-guest-agent into the image
apt install -y libguestfs-tools
virt-customize -a debian-12-genericcloud-amd64.qcow2 --install qemu-guest-agent

Шаг 2: Создание ВМ через qm create и импорт образа через importdisk

Создаём пустую ВМ без диска, импортируем облачный образ как её диск, подключаем его как scsi0 и делаем загрузочным. При импорте Proxmox сам конвертирует образ в формат целевого хранилища.

qm create 9000 --name debian12-cloudinit --memory 2048 --cores 2 \
  --cpu host --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --ostype l26

# import the image as a disk of VM 9000 on storage local-lvm
qm importdisk 9000 debian-12-genericcloud-amd64.qcow2 local-lvm
# (PVE 8 also accepts: qm disk import 9000 debian-12-genericcloud-amd64.qcow2 local-lvm)

qm set 9000 --scsi0 local-lvm:vm-9000-disk-0,discard=on
qm set 9000 --boot order=scsi0
Используйте имя диска из вывода импорта (обычно vm-9000-disk-0). На каталоговом хранилище вроде local имя будет вида 9000/vm-9000-disk-0.raw.

Шаг 3: Диск Cloud-Init, пользователь, SSH-ключи и IP

Диск cloud-init — это виртуальный CD, куда Proxmox записывает параметры с вкладки Cloud-Init. Облачным образам обычно нужна последовательная консоль для корректного отображения в веб-консоли, поэтому задаём serial0. Пользователь и ключ на шаблоне служат значениями по умолчанию и переопределяются на каждом клоне.

qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent enabled=1

# defaults stored in the template (can be overridden per clone)
qm set 9000 --ciuser debian --sshkeys /root/.ssh/id_ed25519.pub
qm set 9000 --ipconfig0 ip=dhcp
qm set 9000 --nameserver "1.1.1.1 8.8.8.8"
qm cloudinit dump 9000 user

Последняя команда показывает сгенерированный user-data — убедитесь, что имя пользователя и ключ на месте.

Шаг 4: Преобразование ВМ в шаблон Cloud-Init

Не запускайте ВМ — сразу превращайте её в шаблон. Шаблон нельзя запустить, только клонировать, а его диск становится базовым образом только для чтения.

qm template 9000
qm list

Шаг 5: Быстрое клонирование VPS из шаблона с IP и SSH-ключами

Клоны бывают двух видов. Полный клон (--full) копирует независимый диск — это вариант для выдачи клиенту. Связанный клон создаётся почти мгновенно и экономит место, но зависит от базового диска шаблона (шаблон уже нельзя удалить), поэтому подходит для внутренних тестов. Каждому VPS задайте свой IP, ключ или начальный пароль и увеличьте диск: облачный образ весит всего 2–3 ГБ, а cloud-init расширит раздел при первой загрузке.

# full clone (independent disk) for a customer VPS
qm clone 9000 201 --name vps201 --full --storage local-lvm

# or a linked clone: created in seconds, shares the base disk
# qm clone 9000 202 --name vps202

qm set 201 --cores 2 --memory 4096
qm set 201 --ipconfig0 ip=203.0.113.21/24,gw=203.0.113.1
qm set 201 --sshkeys /root/customer201.pub --cipassword 'Change-Me-123'
qm resize 201 scsi0 +38G
qm start 201

# check
qm guest cmd 201 network-get-interfaces
ssh [email protected]

Для массового развёртывания оберните шаги в небольшой скрипт с параметрами ID, IP и ключ клиента:

#!/bin/bash
# usage: ./newvps.sh 205 203.0.113.25 /root/keys/c205.pub
ID=$1; IP=$2; KEY=$3
qm clone 9000 "$ID" --name "vps$ID" --full --storage local-lvm
qm set "$ID" --ipconfig0 ip="$IP"/24,gw=203.0.113.1 --sshkeys "$KEY"
qm resize "$ID" scsi0 +38G
qm start "$ID"

В веб-интерфейсе: правый клик по шаблону → Клонировать → режим «Полный клон», затем на вкладке Cloud-Init новой ВМ измените IP и SSH-ключ, нажмите «Пересоздать образ» и запустите ВМ.

Частые вопросы

Не удаётся зайти по SSH на клонированный VPS

Проверьте, что ipconfig0 совпадает с IP, маской и шлюзом от IMIDC; входите под пользователем ciuser (по умолчанию debian в Debian и ubuntu в Ubuntu), а не root; после изменения настроек Cloud-Init перезагрузите ВМ. Журнал cloud-init виден в последовательной консоли Proxmox.

После увеличения диска в системе по-прежнему 2 ГБ

Выполняйте qm resize до первой загрузки — тогда growpart из cloud-init расширит корневой раздел. Если ВМ уже загружалась, выполните внутри growpart /dev/sda 1 и resize2fs /dev/sda1 (имена разделов уточните через lsblk).

Можно ли использовать образы CentOS / Rocky / AlmaLinux?

Да. Rocky Linux и AlmaLinux публикуют образы GenericCloud в формате qcow2; процедура та же, пользователи по умолчанию — rocky и almalinux.

Если проблема не решена, создайте тикет в круглосуточную техподдержку IMIDC: https://www.imidc.com/submitticket.php

Помог ли вам данный ответ?

Похожие руководства