Сборка образов

Требования к Узлу сборки

  1. Системные требования
    1. ОЗУ от 8 Гб
    2. CPU
      1. Не менее 2 vCPU
      2. Архитектура - x86-64
      3. Тип виртуализации - host
    3. Жёсткий диск рекомендуется от 50 ГБ.
      На носителе должно быть достаточно места для:
      1. Установки хостовой ОС Astra Linux (ориентируйтесь на системные требования к Операционной системе)
      2. Хранения необходимых файлов для установки гостевой ОС (утилита при подготовке скачивает локально установочный диск Astra Linux, а также бинарные компоненты инструментов контейнеризации)
      3. Хранения файлов гостевой ОС и результатов сборки: squashfs и qcow2-образы (ориентировочно 10-12 ГБ на проект)
  2. Требования к ПО:
    1. ОС СН Astra Linux оперативное обновление 1.8.4 или более свежее
    2. Python v3.11
  3. Доступ к репозиториям
    1. Сетевой репозиторий Основной (main) Astra Linux 1.8.4
    2. Для сборки проекта по Шаблону kubernetes дополнительно
      1. Сетевой доступ к репозиторию mirror.yandex.ru или его зеркалу
      2. Сетевой репозиторий Расширенный (extended) Astra Linux 1.8.4
    3. Для установки пакетов ПО elafris
      1. Сетевой репозиторий Серверный (server) Astra Linux 1.8.4

Подготовка Узла сборки

  1. Установите ОС СН Astra Linux Оперативное обновление 1.8.4 или более свежее.
    При установке ОС ориентируйтесь на требования к безопасности и уровню защищённости, необходимые для вашей инфраструктуры
  2. Настройте доступ к Основному и Серверному сетевым репозиториям Astra Linux соответствующей версии
  3. Установите пакеты 
    1. astra-elafris - пакет с основными программными модулями
    2. astra-elafris-presets-docker - шаблоны для сборки ОС с инструментом docker

При необходимости сборки иммутабельной ОС для развёртывания кластера kubernetes выполните дополнительные действия:

  1. Настройте доступ к Расширенному репозиторию
  2. Установите пакеты
    1. astra-elafris-presets-kubernetes - шаблоны для сборки ОС с компонентами kubernetes
    2. astra-elafris-boot - инструменты для подготовки инфраструктуры для сетевой загрузки
  3. Убедитесь, что с узла сборки есть доступ до репозитория mirror.yandex.ru или его зеркалу в локальной сети

Описание улититы командной строки astra-elafris

Описание CLI

Команда astra-elafris [GLOBAL_OPTIONS] COMMAND

astra-elafris [GLOBAL_OPTIONS] COMMAND

Утилита для создания образов на базе Astra Linux

Global options:
  -h, --help                      Показать это сообщение справки и выйти
  -c, --config-file CONFIG_FILE   Основной конфигурационный файл (по умолчанию: ./elafris.yaml)
      --log-file LOG_FILE         Путь к файлу журналов (по умолчанию: /var/log/astra-elafris.log)
      --log-level LOG_LEVEL       Детализированность журналирования (info, debug) (по умолчанию: info)
  -v, --version                   Версия
  -u, --umount                    Отмонтировать временные диски, остановить сборочную ВМ
  --preset-list                   Вывести список преднастроенных проектов (шаблонов)

Commands:
  genproject - сгенерировать проект из готовых преднастроенных проектов
  build      - создать образ

Команда astra-elafris genproject -p PROJECT [OPTIONS]

astra-elafris genproject -p PROJECT [OPTIONS]

Options:
  -h, --help                        Показать это сообщение справки и выйти
  -p, --project PROJECT             Путь/имя создаваемого проекта
  -f, --force                       Перезаписать существующий проект
      --servers SERVERS             Сгенерировать в проекте файл servers.yaml. Формат - MAC[:hostname[:ip]][, MAC[:hostname[:ip]]]
      --servers-file SERVERS_FILE   Путь к файлу с настройками для серверов
      --preset PRESET               Название шаблона (из списка preset-list)
  -d, --download                    Скачать заново файлы для проекта из файла download.yaml
  • Ключи --servers и --servers-file явдяются взаимоисключающими. Проект создаётся либо из данных командной строки, либо из данных в файле

Команда astra-elafris build -p PROJECT -o OUTPUT [OPTIONS]

astra-elafris build -p PROJECT -o OUTPUT [OPTIONS]

options:
  -h, --help              Показать это сообщение справки и выйти
  -p, --project PROJECT   Путь/имя к проекту, из которого будет создан образ
  --force                 Принудительно перезаписать файлы
  -o, --output OUTPUT     Формат выходных данных (sqsh, qcow_sqsh); sqsh - генерация squashfs файлов, qcow_sqsh - генерация qcow2 файла.
  --servers               Создать образы для серверов

Структура каталогов

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

opt
├── elafris 
|   ├── astra-elafris.py         Основной модуль elafris
|   ├── elafris                  Каталог с программными модулями
|   │   └── ...
|   ├── elafris.yaml             Конфигурационный файл
|   ├── my_build_1               Каталог собираемого проекта "my_build_1"
|   │   ├── output               Каталог с результатами сборки проекта
|   │   │   └── ...
|   │   └── settings             Каталог с конфигурацией проекта
|   │       └── ...
|   ├── my_build_2               Каталог собираемого проекта "my_build_2"
|   │   ├── output
|   │   └── settings
|   └── registry                 Каталог для загрузки файлов, используемых при сборке проекта
|       └── ...
└── elafris-presets              Предустановленные шаблоны
    └── presets
        ├── os
        └── projects
  • Каталог registry служит для загрузки необходимых бинарных файлов и используется всеми проектами с целью оптимизации занимаемого объема диска. Создаётся в момент создания первого проекта.
  • Каталоги проектов содержат в себе все необходимые настройки и формируются командой genproject в соответствии с параметрами, указанными пользователем
  • В каталоге ./elafris/project_name/output выкладывается результат сборки проекта

Сетевая загрузка

Требования к узлу Сетевой загрузки

  • Доступность по протоколам pxe, tftp, samba (67/UDP, 69/UDP, 445/TCP) с загружаемых узлов.
    Порты будут открыты в процессе настройки сервисов.
  • Объем хранилища под образы для сетевой загрузки ориентировочно 1 ГБ для проекта.
  • Наличие двух сетевых интерфейсов, если предполагается изоляция внутренней и внешней сетей и доступ во внешнюю сеть через Узел сетевой загрузки как шлюз.

Подготовка узла Сетевой загрузки

  1. На том же сервере, где развёрнут Узел сборки, установите пакет astra-elafris-boot
  2. Подготовьте один или несколько проектов для сетевой загрузки (см. пример в предыдущем разделе Инструкции)

Описание улититы командной строки astra-elafris-boot

Описание CLI

Команда astra-elafris-boot [OPTIONS]

astra-elafris-boot [OPTIONS]

options:
  -h, --help                      Показать это сообщение справки и выйти
  -c, --boot-config BOOT_CONFIG   Основной конфигурационный файл (по умолчанию: ./elafris-boot.yaml)
  -p, --project PROJECT           Путь/имя проекта
      --log-file LOG_FILE         Путь к файлу журналов (по умолчанию: /var/log/astra-elafris-boot.log)
      --log-level LOG_LEVEL       Детализированность журналирования (info, debug) (по умолчанию: info)
  -v, --version                   Версия
  -l, --links                     Создать или пересоздать ссылки и меню для загрузки. Совместно с -p.
  -b, --boot                      Настройка компонентов загрузки dnsmasq,samba
  -d, --dhcp                      Настройка фиксированных адресов для DHCP. Совместно с -p.
  -A, --all                       Комплексная настройка boot+links+dhcp. Требует проект -p

Конфигурационный файл elafris-boot.yaml

boot_srv:
  # адрес dhcp,dns,haproxy и tftp сервера, будет использоваться для всех настроек
  ip: 192.168.0.1
  # диапазон выдаваемых адресов
  dhcp_range: 192.168.0.10,192.168.0.100,255.255.255.0,6h
  # дополнительные настройки dhcp, и dns. Если не заданы, то будут взяты из /etc/resolv.conf
  # dhcp_options:
  #  - option:domain-name,mydomain.local
  # server:
  #   - 1.2.3.4
  #   - 5.6.7.8
  # тип файлов для чтения из конфигурации dhcp
  # conf_dir_files: str = ',*.conf',
  # неизменяемый префикс, который должен быть добавлен к файлам меню загрузки.
  # pxe_prefix: str = '01'
pathes:
#  boot_root_path: '/opt/elafris/boot'
#  root_path: '/opt/elafris'

Обязательно проверить и переназначить, если требуется, параметры DHCP сервера:

  • boot_srv.ip - используется для указания утилите IP-адреса, который будет использоваться всеми сервисами сетевой загрузки. Указанный IP-адрес должен быть назначен на один из сетевых интерфейсов до начала работы с утилитой astra-elafris-boot
  • boot_srv.dhcp_range - диапазон IP-адресов, которые будет назначать dhcp-сервер

Остальные параметры можно оставить по умолчанию, если не планируется тонкая настройка алгоритма.

Структура каталогов

В процессе работы утилиты astra-elafris-boot формируется каталог boot

boot
├── pxe                                         каталог с файлами для обеспечения pxe-загрузки
│   ├── pxelinux.cfg                            конфигурации сетевой загрузки в формате pxe
│   │   ├── 01-08-00-27-30-0a-c9                конфигурации сетевой загрузки сервера с указанным MAC
│   │   └── default
│   ├── kernels                                 каталог для хранения ядра и initramfs загружаемой системы
│   │   └── my_build_1                          ядро linux для проекта my_build_1
│   │       ├── initrd.img-6.1.152-1-generic
│   │       └── vmlinuz-6.1.152-1-generic
│   ├── chain.c32
│   ├── ldlinux.c32
│   ├── libcom32.c32
│   ├── libutil.c32
│   ├── menu.c32
│   ├── pxelinux.0
│   └── vesamenu.c32
└── sqsh                                        образы файловой системы загружаемой ОС
    └── my_build_1                              образы файловой системы загружаемой ОС проекта my_build_1
        ├── 08-00-27-30-0a-c9                   образы (или ссылки) для загрузки на сервер с указанным MAC
        │   ├── debug                           каталог для образов, загружаемых в конфигурации debug
        │   │   ├── 10_filesystem.squashfs
        │   │   ├── 50_settings.squashfs
        │   │   └── 99_administrator.squashfs
        │   └── regular                         каталог для образов, загружаемых в конфигурации regular
        │       ├── 10_filesystem.squashfs
        │       └── 50_settings.squashfs
        ├── debug
        │   ├── 10_filesystem.squashfs
        │   └── 99_administrator.squashfs
        └── regular
            └── 10_filesystem.squashfs

Требования к серверу, на который загружается ОС

  • Физический или виртуальный сервер
  • Поддержка BIOS
  • ОЗУ
    • минимум - 4 ГБ
    • максимум - в зависимости от предполагаемой нагрузки в виде контейнеров или pod'ов kubernetes
  • CPU - от 2 vCPU
  • Сетевой интерфейс с возможностью загрузки по протоколу PXE
  • Жёсткий диск
    • минимум - 512 МБ (хранение настроек, минимальные логи)
    • максимум - в зависимости от потребностей контейнеров

Процесс загрузки

  1. Сконфигурируйте BIOS сервера на загрузку по сети
  2. Укажите для сетевой загрузки тот интерфейс, MAC-адрес которого был использован в параметре --servers
  3. Сохраните настройки и перезагрузите сервер

Загрузка ВМ из QCOW2-образа

Системные требования

  • Гипервизор с поддержкой QCOW2-формата
  • Объем диска - 12 ГБ (хранение самого образа, CoW слой для записи и хранения настроек и данных контейнеров)
  • ОЗУ
    • минимум - 4 ГБ
    • максимум - в зависимости от предполагаемой нагрузки в виде контейнеров или pod'ов kubernetes
  • Сетевой интерфейс - по необходимости, для загрузки образов контейнеров и подключения к сервисам в контейнерах

Процесс загрузки

  1. Скопировать образ(ы) qcow2, полученные в результате сборки проекта, на гипервизор
  2. Создайте на основе образов Виртуальные машины и запустите их
  3. Если нужно, сконфигурируйте окружение ВМ