Формат шаблона зависит от типа виртуализации в кластере:

  • KVM — архив .xz с образом диска ОС в формате RAW;
  • LXD — архив tar.gz с содержимым файловой системы и файлом метаданных.

Требования к шаблону


Разметка диска и установка ОС

Используйте разметку диска GPT. Для первого раздела диска укажите тип BIOS boot и размер 2 Мб. Для второго раздела диска укажите тип Linux filesystem и минимально возможный размер (например, 4 ГБ). Установите ОС на второй раздел в минимальной конфигурации.

Для пространства подкачки рекомендуется не выделять отдельный раздел, а создать swap-файл объёмом 512 Мб.

Установка дополнительного ПО

QEMU Guest Agent

ПО QEMU Guest Agent необходимо для взаимодействия платформы с ВМ. Порядок установки:

  1. Установите пакеты ПО:

    ОС CentOS, AlmaLinux

    yum -y install qemu-guest-agent
    CODE

    ОС Debian, Ubuntu, Astra Linux

    apt -y install qemu-guest-agent
    CODE
  2. Добавьте QEMU Guest Agent в автозагрузку:

    systemctl enable --now qemu-guest-agent
    CODE
  3. Проверьте статус QEMU Guest Agent:

    systemctl status qemu-guest-agent
    CODE
  4. Проверьте статус службы SELinux:

    sestatus
    CODE

    Если статус отличается от disable:

    1. Отключите SELinux. Для этого замените в файле /etc/selinux/config строку

      SELINUX=enforcing
      CODE

      на

      SELINUX=disabled
      CODE
    2. Перезагрузите ОС.
  5. Если в файле /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
    CODE


    1. Закомментируйте или удалите эту строку.
    2. Перезапустите QEMU Guest Agent:

      systemctl restart qemu-guest-agent
      CODE

SPICE

Если к ВМ, созданным из шаблона, нужно будет подключаться по SPICE, установите пакеты ПО spice-vdagent и spice-webdavd:

Debian, Ubuntu, Astra Linux

apt -y install spice-vdagent spice-webdavd
BASH

CentOS, AlmaLinux

yum -y install spice-vdagent
BASH

Для шаблона с ОС CentOS добавьте запуск ПО в автозагрузку: 

systemctl enable spice-vdagent
BASH

Системные утилиты

Проверьте наличие утилит curl и vim:

curl -V
BASH
vim --version
BASH

Если какая-то из утилит не установлена, установите её: 

Debian, Ubuntu, Astra Linux

apt -y install curl vim
BASH

CentOS, AlmaLinux

yum -y install curl vim
BASH

Настройка SSH

Разрешите подключение по SSH с учётной записью суперпользователя и аутентификацией по паролю. Для этого укажите в файле /etc/ssh/sshd_config параметры

PermitRootLogin yes
PasswordAuthentication yes
CODE

Очистка истории команд

После установки и настройки всех пакетов ПО очистите историю команд:

rm /root/.bash_history
BASH
history -c 
BASH

Шаблон для KVM-кластера


Чтобы подготовить шаблон:

  1. Создайте виртуальную машину (ВМ) с нужной версией ОС.
  2. Настройте ОС и установите необходимые пакеты ПО. 

  3. Остановите ВМ.
  4. Определите в каком формате сохранён диск ВМ:

    qemu-img info <disk_path> | grep "file format"
    BASH

    <disk_path> — путь к диску ВМ

  5. Скопируйте файл диска ВМ в отдельную директорию. Если диск сохранён не в формате RAW, конвертируйте его в формат RAW:

    qemu-img convert -f <disk_format> -O raw <disk_path> <image_path>
    BASH

    <disk_format> — формат исходного диска

    <disk_path> — пусть к диску ВМ

    <image_path> — путь для сохранения образа

  6. Оптимизируйте файл образа с помощью утилиты virt-sparsify:

    LIBGUESTFS_BACKEND=direct virt-sparsify --in-place <image_path>
    CODE

    <image_path> — путь к файлу с образом

  7. Очистите образ от персональной информации с помощью утилиты virt-sysprep:

    LIBGUESTFS_BACKEND=direct virt-sysprep --format=raw --operations <sysprep_ops> --add <image_path> --root-password random
    CODE

    <sysprep_ops> — информация для удаления. Рекомендуемое значение: defaults,ca-certificates,kerberos-data,user-account. Подробнее см. в документации к утилите.

    <image_path> — путь к файлу с образом

    --root-password random — задать случайный пароль для root-пользователя

  8. Чтобы у ВМ, создаваемых из шаблона, был уникальный параметр machine-id, выполните команду: 

    LIBGUESTFS_BACKEND=direct virt-sysprep --format=raw --operations machine-id --add <image_path> --root-password random
    BASH

    <image_path> — путь к файлу с образом

    --root-password random — задать случайный пароль для root-пользователя

  9. Создайте архив с образом в формате .xz:

    xz <image_path>
    CODE

    <image_path> — путь к файлу с образом

  10. Скопируйте архив в директорию репозитория.
  11. Добавьте информацию о шаблоне в файл описания репозитория metadata.json. Подробнее см. в статье Репозитории шаблонов ОС.

Шаблон для LXD-кластера


Чтобы подготовить шаблон:

  1. Создайте директорию /rootfs и скопируйте туда содержимое файловой системы. Для шаблона ОС на основе Debian вы можете использовать утилиту debootstrap, для шаблона ОС на основе Red Hat Linux — утилиту yumbootstrap.
  2. Внесите необходимые изменения в файлы ОС.
  3. Создайте файл метаданных metadata.yaml с обязательными параметрами:
    1. architecture — архитектура процессора. Например, x86_64 или amd64;
    2. creation_date — время создания шаблона в Unix time.

      Пример файла metadata.yaml

      architecture: amd64
      creation_date: 1600761137
      CODE

      Подробнее о формате файла см. в официальной документации LXD.

  4. Создайте архив tar.gz с директорией /rootfs и файлом metadata.yaml.

  5. Скопируйте архив в директорию репозитория.
  6. Добавьте информацию о шаблоне в файл описания репозитория metadata.json. Подробнее см. в статье Репозитории шаблонов ОС.