Формат шаблона зависит от типа виртуализации в кластере:
- KVM — архив .xz с образом диска ОС в формате RAW;
- LXD — архив tar.gz с содержимым файловой системы и файлом метаданных.
Требования к шаблону
Разметка диска и установка ОС
Используйте разметку диска GPT. Для первого раздела диска укажите тип BIOS boot и размер 2 Мб. Для второго раздела диска укажите тип Linux filesystem и минимально возможный размер (например, 4 ГБ). Установите ОС на второй раздел в минимальной конфигурации.
Для пространства подкачки рекомендуется не выделять отдельный раздел, а создать swap-файл объёмом 512 Мб.
Установка дополнительного ПО
QEMU Guest Agent
ПО QEMU Guest Agent необходимо для взаимодействия платформы с ВМ. Порядок установки:
-
Установите пакеты ПО:
ОС CentOS, AlmaLinuxyum -y install qemu-guest-agent
ОС Debian, Ubuntu, Astra Linuxapt -y install qemu-guest-agent
-
Добавьте QEMU Guest Agent в автозагрузку:
systemctl enable --now qemu-guest-agent
-
Проверьте статус QEMU Guest Agent:
systemctl status qemu-guest-agent
-
Проверьте статус службы SELinux:
sestatus
Если статус отличается от disable:
-
Отключите SELinux. Для этого замените в файле /etc/selinux/config строку
SELINUX=enforcing
на
SELINUX=disabled
- Перезагрузите ОС.
-
-
Если в файле /etc/sysconfig/qemu-ga есть строка вида
BLACKLIST_RPC=guest-file-open,guest-file-close,guest-file-read,guest-file-write,guest-file-seek,guest-file-flush,guest-exec,guest-exec-status
- Закомментируйте или удалите эту строку.
-
Перезапустите QEMU Guest Agent:
systemctl restart qemu-guest-agent
SPICE
Если к ВМ, созданным из шаблона, нужно будет подключаться по SPICE, установите пакеты ПО spice-vdagent и spice-webdavd:
apt -y install spice-vdagent spice-webdavd
yum -y install spice-vdagent
Для шаблона с ОС CentOS добавьте запуск ПО в автозагрузку:
systemctl enable spice-vdagent
Системные утилиты
Проверьте наличие утилит curl и vim:
curl -V
vim --version
Если какая-то из утилит не установлена, установите её:
apt -y install curl vim
yum -y install curl vim
Настройка SSH
Разрешите подключение по SSH с учётной записью суперпользователя и аутентификацией по паролю. Для этого укажите в файле /etc/ssh/sshd_config параметры:
PermitRootLogin yes
PasswordAuthentication yes
Очистка истории команд
После установки и настройки всех пакетов ПО очистите историю команд:
rm /root/.bash_history
history -c
Шаблон для KVM-кластера
Чтобы подготовить шаблон:
- Создайте виртуальную машину (ВМ) с нужной версией ОС.
- Настройте ОС и установите необходимые пакеты ПО.
- Остановите ВМ.
-
Определите в каком формате сохранён диск ВМ:
qemu-img info <disk_path> | grep "file format"
Пояснения к команде -
Скопируйте файл диска ВМ в отдельную директорию. Если диск сохранён не в формате RAW, конвертируйте его в формат RAW:
qemu-img convert -f <disk_format> -O raw <disk_path> <image_path>
Пояснения к команде -
Оптимизируйте файл образа с помощью утилиты virt-sparsify:
LIBGUESTFS_BACKEND=direct virt-sparsify --in-place <image_path>
Пояснения к команде -
Очистите образ от персональной информации с помощью утилиты virt-sysprep:
LIBGUESTFS_BACKEND=direct virt-sysprep --format=raw --operations <sysprep_ops> --add <image_path> --root-password random
Пояснения к команде -
Чтобы у ВМ, создаваемых из шаблона, был уникальный параметр machine-id, выполните команду:
LIBGUESTFS_BACKEND=direct virt-sysprep --format=raw --operations machine-id --add <image_path> --root-password random
Пояснения к команде -
Создайте архив с образом в формате .xz:
xz <image_path>
Пояснения к команде - Скопируйте архив в директорию репозитория.
- Добавьте информацию о шаблоне в файл описания репозитория metadata.json. Подробнее см. в статье Репозитории шаблонов ОС.
Шаблон для LXD-кластера
Чтобы подготовить шаблон:
- Создайте директорию /rootfs и скопируйте туда содержимое файловой системы. Для шаблона ОС на основе Debian вы можете использовать утилиту debootstrap, для шаблона ОС на основе Red Hat Linux — утилиту yumbootstrap.
- Внесите необходимые изменения в файлы ОС.
- Создайте файл метаданных metadata.yaml с обязательными параметрами:
- architecture — архитектура процессора. Например, x86_64 или amd64;
-
creation_date — время создания шаблона в Unix time.
Пример файла metadata.yamlarchitecture: amd64 creation_date: 1600761137
Подробнее о формате файла см. в официальной документации LXD.
- Создайте архив tar.gz с директорией /rootfs и файлом metadata.yaml.
- Скопируйте архив в директорию репозитория.
- Добавьте информацию о шаблоне в файл описания репозитория metadata.json. Подробнее см. в статье Репозитории шаблонов ОС.