Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018)

Материал из 0x1.tv

Докладчик
Денис Силаков.jpg
Денис Силаков

Пользователи OpenVZ активно пользуются шаблонами контейнеров для создания новых виртуальных окружений. В «legacy» OpenVZ (с ядром 2.6.x) шаблон представляет собой архив с готовым образом файловой системы, который можно напрямую использовать для новых контейнеров.

В репозиториях OpenVZ содержится несколько десятков как официальных шаблонов, так и шаблонов от сообщества. Официальные шаблоны для OpenVZ создавались не копированием образа ФС заранее подготовленного контейнера, а специальными инструментальными средствами, входящими в коммерческие версии Virtuozzo.

Возможности этих инструментов существенно шире, чем одноразовая подготовка образа ФС для контейнера.

Начиная с OpenVZ 7, код этих утилит открыт и администраторы могут использоваться ими не просто для создания контейнеров, но и для их сопровождения на протяжении всего жизненного цикла.

Видео

on youtube

Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.

Презентация

Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018).pdf

Thesis

Виды

В OpenVZ 7 есть шаблоны двух типов — ОС и приложений. Первые используются для создания контейнеров с заданным дистрибутивом, вторые — для установки, удаления и обновления конкретного приложения или стека программ в контейнере, где уже установлена ОС. Каждый шаблон приложения рассчитан на использование в контейнере, созданном из шаблона определённой ОС — можно создать контейнер с CentOS 6 на основе шаблона ОС CentOS 6, а затем добавить туда MySQL с помощью шаблона приложения MySQL для CentOS 6.

Шаблоны ОС разделяются на базовый (устанавливающий ОС в минимальном варианте) и кастомизированные, отличающиеся от базового настройками или набором предустановленных программ.

Согласно правилам именования, базовый шаблон содержит имя, версию и архитектуру ОС (например, «centos-6-x86_64»), кастомизированные содержат некоторый дополнительный суффикс («centos-6-x86_64-server»), а имя шаблона приложения содержит название приложения и название базового шаблона целевой ОС («mysql-centos-6-x86_64»).

Структура

Шаблон в OpenVZ 7 -это набор конфигурационных файлов, на основе которых готовится образ образ ФС. Эти файлы вместе с закэшированными образами ФС хранятся в директории /vz/template. Структура поддиректорий соответствует названию ОС шаблона — например, «centos/6/x86_64». Конфигурация базового шаблона ОС хранится в файле config/os/default, кастомизированных — в файлах config/os/<суффикс>. Файлы шаблонов приложений для данной ОС — в config/app/<имя_приложения>/default. Имена файлов самоговорящие — packages, package_manager, repositories, summary и так далее.

Шаблоны могут содержать скрипты, выполняемые на определённой стадии их развёртывания — перед либо сразу после завершения одного из шагов cache, install, upgrade и remove. Скрипт, выполняемый перед тем или иным шагом, имеет префикс «pre-» (например, ), а после завершения шага — префикс «post-».

Утилиты

Управление шаблонами осуществляется с помощью утилиты vzpkg.

Для установки шаблона ОС необходимо дать ей команду в OpenVZ 7 эта команда сводится к установке RPM-пакета с файлами соответствующего шаблона. После установки шаблона ОС, желательно сразу создать кэш входящих в него пакетов и образ диска с установленными пакетами командой vzpkg create cache.

Имя шаблона ОС можно передать стандартным утилитам при создании контейнера:

 # prlctl create c1 --vmtype=ct --ostemplate=centos-6-x86_64

Установить шаблон приложения в работающий контейнер можно с помощью vzpkg:

 # vzpkg install c1 mysql

Утилита vzpkg может также обновлять внутри работающих контейнеров пакеты, относящиеся к тому или иному шаблону, обновлять кэшированные образы и производить много других полезных действий — см. «man vzpkg».

Механизм работы

При создании кэша для шаблона ОС, разворачивается заранее подготовленное минимальное chroot-окружение с «родным» для целевой системы пакетным менеджером, модифицированным для целей vztt. С помощью этого менеджера осуществляется установка необходимых пакетов (перечисленных в os-packages) из репозиториев, указанных в os_repositories.

Chroot-окружения и модифицированные пакетные менеджеры входят в пакеты vzpkgenv*. Обновляются пакеты vzpkgenv достаточно редко — только если в новых версиях пакетных менеджеров и связанной с ними инфраструктуре (например, в структуре метаданных репозиториев) происходят радикальные изменения. Если же имеющийся пакетный менеджер способен устанавливать пакеты от новой версии дистрибутива, то нет никаких причин его не использовать.

Создание шаблонов

Проще всего создать шаблон на основе уже существующего. Достаточно создать каталог для шаблона в соответствии с его именем, скопировать файлы из исходного шаблона и внести необходимые изменения. Если все модификации сводятся к изменению набора пакетов или настроек по умолчанию, то много времени это не займёт.

Можно создать шаблон с нуля с помощью утилиты vzmktmpl из пакета vztt-build, которому на вход надо передать файл с инструкциями. Примеры инструкций есть в /usr/share/vztt/samples.


Шаблоны контейнеров в OpenVZ 7 (Денис Силаков, OSSDEVCONF-2018)!.jpg

Примечания и ссылки



Plays:22   Comments:0