Proxmox: создание шаблона виртуальной машины с Cloud‑Init

от автора

Каждый раз при создании новой виртуальной машины проходить через ручную установку ОС, разметку дисков, создание пользователей и прокидывание SSH‑ключей — сомнительное удовольствие, забирающее кучу времени.

К счастью, в Proxmox VE можно один раз потратить полчаса, настроить правильный «золотой» шаблон с Cloud‑Init и забыть о рутине, раскатывая свежие ВМ буквально в пару кликов. Но тут есть свои подводные камни: от правильного выбора видеоадаптера до хитростей с расширением дискового пространства через qm import.

Как собрать такой идеальный шаблон без лишней боли? Разберем по шагам.


1. Создание базового Linux шаблона

Для этого создаем самую обычную виртуальную машину со следующими характеристиками:

  • ID: 9000

  • Name: LinuxTemplate

  • Без ОС (Do not use any media)

  • Graphic card: Serial terminal 0

  • Qemu Agent: ✅

  • Disk: Удаляем

  • CPU Type: host

  • Cores: По необходимости

  • Memory: По необходимости

  • Start after created: ❌

Для информации

Serial terminal при клонировании через Cloud‑Init рекомендует использовать сам Proxmox. Поскольку технология Cloud‑Init разрабатывалась для развертывания серверов «headless» (безмониторных). Вдобавок это избавляет от накладных расходов на эмуляцию полноценного графического адаптера.

После создания нажимаем ПКМ и выбираем Convert to template.
На этом Generic Template готов. В дальнейшем, на его основе можно будет собирать другие шаблоны ВМ.

2. Создание шаблона виртуальной машины

Склонируем наш Generic Template

  • ID: 9001 (Любой ID)

  • Name: абсолютно любое. Я часто пишу систему, версию, размер диска (о диске позже). Например Alt10Template30GB

  • Mode: Full Clone

  • Target Storage: На всякий случай выбрать нужное хранилище После этого у нас появилась ВМ. Идем качать Cloud‑Init образ. Заходим в Shell нашей ноды и пишем:

wget <ссылка_на_cloud_image>

Например:

wget https://ftp.altlinux.org/pub/distributions/ALTLinux/p11/images/cloud/x86_64/alt-server-11.1-p11-cloud-x86\_64.qcow2

После скачивания лучше будет прописать ls, чтобы увидеть имя скачанного файла. Оно понадобится нам в следующей команде:

qm disk import <ID_склонированной_ВМ> <Имя_скачанного_Cloud_Init_образа> <Имя_Хранилища> --format qcow2

Например:

qm disk import 9007 alt-server-11.1-p11-cloud-x86_64.qcow2 local-lvm --format qcow2

Теперь у ВМ появился диск, но его размер равен загруженному ранее Cloud‑Init образу. Значит следующим действием мы должны расширить диск. Для себя я выделил самый удобный размер — 30гб. Переходим в Hardware, находим Unused Disk 0, нажимаем Edit, ставим вот такие параметры:

Далее Disk ActionResize, чтобы задать нужный размер диска.

Для информации

Узнать, нужна ли галочка SSD emulation можно узнать в <адрес_вашего_proxmox>:8006/pve-docs/chapter-qm.html#qm_hard_disk_discard

Важно

Resize работает только на увеличение. Поэтому формула такая: желаемый размер — изначальный размер, который прописан в:

Пример:
Хотим 30гб, изначальный диск 6гб, значит вписываем 24

Теперь самое интересное — Cloud‑Init. Для его включения нам необходимо добавить Cloud-Init Drive. Идем в Hardware нашей ВМ. Нажимаем AddCloudInit Drive

После этого действия у нас стала активна вкладка Cloud-init в окошке ВМ.

Здесь все — проще некуда:

  • User — пользователь, который будет основным, помимо root в системе

  • Password — пароль для пользователя выше

  • DNS domain\servers — я обычно оставляю по умолчанию

  • SSH public key — SSH ключ пользователя выше

  • IP Config (net 0) — Это настройка IP для ВМ. Для шаблона я выставляю параметры DHCP:

    Но если мне понадобится статический IP‑адрес, то я его выставлю в этой же вкладке, но после клонирования ВМ из шаблона (об этом позже). Итоговые настройки данной вкладки выглядят +‑ так:

Для информации

Поле «For» показывает комментарий к SSH‑ключу (текст после ключа)

После создания Cloud‑Init необходимо указать порядок загрузки. Заходим во вкладку OptionsBoot Order:

Отключаем все, кроме scsi0 и перетаскиваем его на самый верх.

Осталось самое приятное — после всей проделанной работы мы конвертируем ВМ в шаблон

Вид шаблона в общем пуле виртуальных машин

Вид шаблона в общем пуле виртуальных машин

3. Клонирование ВМ

Итак, клонируем ВМ. ПКМ по нашему шаблону:

На всякий случай я всегда заполняю поля Mode и Target Storage.

Для демонстрации того, что все работает, уже в склонированной ВМ я поменяю адрес на статический:

Запускаем ВМ и ждем 2–3 минуты.
Можно подключиться и раньше. А чтобы узнать, закончил работу Cloud‑Init или нет, нужно прописать команду sudo cloud-init status --wait:

На скриншоте мы видим, что пользователь создался, а IP успешно присвоился. Подключался я по SSH‑ключу, так что здесь тоже все работает.

Как только Cloud‑Init прекратит свою работу, мы увидим следующую картину:

А за процессом можно наблюдать в консоли через Веб‑интерфейс Proxmox:


На этом всё! Надеюсь, этот гайд сэкономит вам время при настройке тестовых стендов или домашней лаборатории.

Если заметили неточности, знаете, как улучшить этот процесс, или у вас возникли вопросы — велком в комментарии, с удовольствием пообщаемся и обсудим!

Всем добра!

ссылка на оригинал статьи https://habr.com/ru/articles/1066900/