В этой заметке мы импортируем ранее подготовленный образ ОС в формате qcow2 в Proxmox в качестве шаблона ВМ, используя консольные команды QEMU.
Все примеры из статьи выполнялись в среде гипервизора Proxmox 9 (Debian 13).
🖐️Эй!
Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике — заглядывайте в Вороний чат @r4ven_me_chat🧐.
1️⃣ Подключаемся к серверу Proxmox по SSH:
ssh root@proxmox.home.lan⚠️Предупреждение
В моём примере я подключаюсь по SSH пользователем root. Это оправдано в случае тестовых стендов. Для работы на продуктиве крайне рекомендую подключаться под обычным пользователем и использовать sudo.
2️⃣ Выполняем ресайз диска (укажите подходящее вам значение):
qemu-img resize ./debian-13-generic-amd64.qcow2 20G3️⃣ Создаём новую виртуальную машину с любым именем, например debian13-k8s-template, ID, например 7777 и базовыми настройками (скорректируйте под ваши условия):
qm create 7777 --name "debian13-k8s-template" \
--memory 2048 --cores 2 --net0 virtio,bridge=vmbr04️⃣ Импортируем образ диска debian-13-generic-amd64.qcow2 в хранилище storage (замените на своё) и добавляем его к ВМ с ID 7777:
qm importdisk 7777 ./debian-13-generic-amd64.qcow2 storage --format qcow2
5️⃣ Устанавливаем SCSI контроллер и добавляем импортированный диск как scsi0:
qm set 7777 --scsihw virtio-scsi-single \
--scsi0 storage:7777/vm-7777-disk-0.qcow2
6️⃣ Устанавливаем порядок загрузки, указывая scsi0 как первый загрузочный диск:
qm set 7777 --boot order=scsi0
7️⃣ Добавляем cloud-init диск к виртуальной машине как ide0 (для автоматической настройки при первом запуске):
qm set 7777 --ide0 storage:cloudinit
8️⃣ Настраиваем пользователя, пароль и SSH для cloud-init:
# Создание пользователя
qm set 7777 --ciuser ivan
qm set 7777 --cipassword $(openssl passwd -6)
# Настройка IP
qm set 7777 --ipconfig0 ip=dhcp
# или статика
qm set 7777 --ipconfig0 ip=192.168.1.100/24,gw=192.168.1.1
# Добавление SSH ключа
qm set 7777 --sshkeys ~/.ssh/id_ed25519.pub💡 При необходимости создайте SSH ключ с помощью команды:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
Подробнее про сценарии cloud-init
Чтобы задействовать все возможности cloud-init необходимо использовать внешний файл-сценарий в формате yaml.
Подключить его можно такой командой:
qm set 7777 --cicustom "user=storage:snippets/cloud_init.yml"Обратите внимание, что для указанного хранилища (в моём примере storage) должен быть включён тип контента Snippets в Proxmox:
Пример cloud_init.yml:
hostname: debian-13-k8s
manage_etc_hosts: true
users:
- name: ivan
groups: sudo
shell: /usr/bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL8aS3Z5q70yiRgZkJbknB2ROiTl9vo+HGGF9Pgc9eF9 root@proxmox
chpasswd:
list: |
ivan:MySecretPassword123
expire: false
package_update: true
package_upgrade: true
packages:
- apt-transport-https
- ca-certificates
- curl
- containerd
- gpg
runcmd:
- echo "overlay" > /etc/modules-load.d/k8s.conf
- echo "br_netfilter" >> /etc/modules-load.d/k8s.conf
- modprobe overlay && modprobe br_netfilter
- containerd config default > /etc/containerd/config.toml
- sed -i '/SystemdCgroup/s/false/true/' /etc/containerd/config.toml
- systemctl restart containerd9️⃣ Настраиваем последовательный порт для консоли и видеокарту, связанную с ним:
qm set 7777 --serial0 socket --vga serial0
🔟 Включаем QEMU Guest Agent для взаимодействия между хостом и гостевой системой:
qm set 7777 --agent enabled=1
1️⃣1️⃣ Преобразуем виртуальную машину в шаблон (для клонирования и быстрого развертывания):
qm template 77771️⃣2️⃣ Пересканируем конфигурацию виртуальной машины (может быть полезно после внесения изменений):
qm rescan --vmid 77771️⃣3️⃣ Смотрим полную конфигурацию нашего шаблона виртуальной машины:
qm config 7777
1️⃣4️⃣ Проверяем список файлов в директории ВМ (хранилище storage), в моём случае это: /mnt/storage/images/7777/:
ls -l /mnt/storage/images/7777/
Видим сам образ и cloud-init диск👌.
❗️ Осторожно
При необходимости уничтожить вм-шаблон используйте команду:
qm destroy 77771️⃣5️⃣ Теперь спокойно клонируйте ваш шаблон в новую виртуальную машину в Proxmox:


1️⃣6️⃣ После запуска проверяем доступ к консоли новой ВМ по паролю:

1️⃣7️⃣ Проверяем подключение по SSH ключу:

Всё работает!
В следующей статье мы будем автоматизировать развёртывание инфраструктуры в Proxmox с помощью Terraform/OpenTofu. Не пропустите👨💻.
Спасибо, что читаете! Успехов вам😉.


