Что такое шаблон VM и зачем нужен cloud-init
Шаблон в Proxmox VE — это заготовка виртуальной машины, из которой можно быстро клонировать новые VM без повторной установки операционной системы. Cloud-init — стандарт настройки облачных образов при первом старте: он задаёт имя хоста, сеть, пользователя и SSH-ключ до того, как система полностью загрузится.
Вместе шаблон и cloud-init превращают разворачивание сервера в операцию на минуту: клонировали шаблон, передали параметры сети и ключа, запустили VM — она сама сконфигурируется при первой загрузке. Это особенно полезно при массовом создании виртуальных машин с одинаковой базовой конфигурацией.
Как подготовить облачный образ под шаблон
Для шаблона используется не обычный ISO, а готовый облачный образ дистрибутива в формате qcow2 — он уже содержит агент cloud-init и не требует ручной установки через инсталлятор.
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
qm create 9000 --name ubuntu-24-04-template --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
Номер 9000 условный: в качестве ID шаблонов удобно резервировать диапазон 9000-9999, чтобы не путать их с рабочими VM. Название стоит сразу сделать говорящим, например с версией дистрибутива.
Как создать шаблон из VM в Proxmox VE
После создания VM в неё импортируют скачанный диск и подключают отдельное устройство cloud-init, которое хранит параметры первого запуска.
qm importdisk 9000 noble-server-cloudimg-amd64.img local-zfs
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-zfs:vm-9000-disk-0
qm set 9000 --ide2 local-zfs:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket --vga serial0
qm template 9000
Последняя команда qm template 9000 превращает обычную VM в шаблон: диск переводится в режим только для чтения, а сама VM пропадает из списка запускаемых — теперь она служит источником для клонов.
Настройка cloud-init: пользователь, SSH-ключ, сеть
Параметры первого запуска задаются на вкладке Cloud-Init карточки VM или через CLI ещё до превращения VM в шаблон.
| Параметр | Назначение |
|---|---|
| User | имя учётной записи, которая будет создана в системе |
| SSH public key | публичный ключ для входа без пароля |
| IP Config | статический IP или DHCP для сетевого интерфейса |
| DNS domain/servers | домен поиска и адреса DNS-серверов |
Если задать пользователя и ключ на уровне шаблона, каждый клон получит одинаковые стартовые данные, а конкретный IP-адрес удобнее переопределять уже после клонирования — под конкретный сервер.
Клонирование VM из шаблона: связанные и полные клоны
Из шаблона можно сделать два типа клонов: связанный (linked clone) и полный (full clone). Связанный клон хранит только разницу с диском шаблона и создаётся почти мгновенно, но зависит от исходного шаблона и требует хранилище с поддержкой такого режима. Полный клон копирует весь диск целиком и не зависит от шаблона после создания.
qm clone 9000 201 --name web-01 --full
Подробнее о разнице между снимками и клонами, а также о том, когда связанный клон опаснее полного, рассказано в статье про снапшоты и клонирование VM.
Автоматизация массового разворачивания через API
Клонирование и настройку cloud-init удобно вызывать скриптом, если серверы разворачиваются регулярно: параметры IP, имени и ключа можно передать сразу после клонирования одной командой.
qm clone 9000 202 --name web-02 --full
qm set 202 --ipconfig0 ip=10.0.0.22/24,gw=10.0.0.1
qm set 202 --sshkeys ~/.ssh/deploy_key.pub
qm start 202
Тот же результат достигается через REST API без консоли узла — это удобно для CI/CD и внешних систем оркестрации. Подробности вызовов и авторизации через токен описаны в статье про REST API и автоматизацию Proxmox VE.
Чек-лист перед использованием шаблона в продакшене
- Образ основан на официальном облачном дистрибутиве с поддержкой cloud-init.
- ID шаблонов вынесены в отдельный диапазон и не пересекаются с рабочими VM.
- SSH-ключ в шаблоне ведёт на учётную запись, к которой нет доступа у посторонних.
- Выбран осознанно тип клона: связанный для скорости, полный для независимости от шаблона.
- Процесс клонирования и настройки сети проверен на тестовом сервере перед массовым запуском.
После проверки шаблон можно смело использовать для повторяемого развёртывания серверов одинаковой конфигурации без ручной установки ОС на каждой машине.