[IT-инфраструктура, Сетевые технологии, DevOps, Софт] Работа с пакетами в изолированной среде. Использование zfs datasets и jail’ов
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В предыдущей статье мы рассказали, как работает система дистрибуции плагинов в новой версии ИКС. Сегодня речь пойдет о том, как разворачивать отдельно взятый плагин в системе.
Предпочтительнее всего, чтобы каждый плагин запускался в изолированной среде, подготовленной специально с учетом требований конкретного плагина. Причем, в среде, которая позволит взаимодействовать системе с плагином и плагинами между собой. Далее, для понимания, что это применимо к стандартной работе с пакетами, мы будем использовать термин “пакет”
Что выбрать?
Что используют для этого в большинстве случаев? Конечно, Docker!
pkg install docker
pkg: No packages available to install matching 'docker' have been found in the repositories
У Docker’а нет официальной поддержки FreeBSD, и такого пакета в репозитории конечно же нет. В предыдущей версии ИКС мы использовали неофициальный самописный порт docker’a, но его поддержка достаточно трудоемка, а кроме того всплывает немало подводных камней при его использовании.
Но у FreeBSD есть собственная, изначальная поддержка изолированных сред. Она называется jail и для наших целей подходит не хуже, чем docker. Стоит заметить, что она появилась намного раньше, чем контейнеры в Linux. Посмотрим как настраивается типичный контейнер (клетка в терминологии bsd).
Подготовка датасета и установка пакета
Прежде всего нужно создать датасет, на котором будет настроена клетка пакета. В нашей системе используется файловая система ZFS, которая позволяет создавать любое количество наследуемых датасетов.
По умолчанию в системе есть датасет с базовым миром (world) FreeBSD, от которого создаем снапшот (снимок):
zfs snapshot zp000111/freebsd@snap
zp000111 — это имя нашего корневого пула файловой системы. Мы можем посмотреть его через команду zfs mount. zp000111/freebsd — имя датасета, в котором хранится мир. Имя снимка указывается через символ @. Этот снимок мы создаем один раз и в дальнейшем все датасеты для пакетов будут наследоваться от него.
От этого снимка мы создаем клон, в котором будет жить наш пакет:
zfs clone zp000111/freebsd@snap zp000111/packets/<packet_name>
Предварительно сделаем монтирование датасета к текущей системе:
mount -t zfs zp000111/packets/<packet_name> /mnt/packets/<packet_name>
И теперь мы можем выполнить в него установку нужного пакета:
pkg -r /mnt/packets/<packet_name> install -y <packet_name>
Ключ -r обеспечивает установку внутрь указанной директории.
Если есть необходимость, можем установить другие нужные пакеты, например mc для удобной работы внутри пакета.
Выполняем размонтирование. Это не обязательно, но полезно, чтобы в дальнейшем пройти весь путь для запуска клетки:
umount /mnt/packets/<packet_name>
Подготовка клетки
Для начала необходимо определиться с хранением данных пакета в рабочей системе. Пусть это будет директория /usr/local/share/packets
Добавляем в нее директорию <packet_name>
mkdir /usr/local/share/packets/<packet_name>
Теперь создаем файл с точкой монтирования <packet_name>.fstab. В нем находится информация для клетки о том, какая директория в смонтированном датасете синхронизируется:
/usr/local/share/packets/<packet_name> /mnt/packets/<packet_name>/usr/local/share/data nullfs rw 0 0
Так мы сообщаем, что к директории в нашей рабочей системе будет подключена директория /usr/local/share/data в нашем примонтированном пакете. Это клетка (файловая система nullfs), разрешено как чтение, так и запись для обмена данными с внешней системой (rw), сохранение информации о файловой системе и проверка ее целостности не требуется (0 и 0).
Сохраняем файл в удобном месте, например в /usr/local/etc/packets/<packet_name>/<packet_name>.fstab
Теперь нам необходимо настроить конфигурационный файл для клетки нашего пакета.
Типичный конфиг с минимальными настройками выглядит следующим образом
SPL
host.hostname = "<packet_name>";
path = " /mnt/packets/<packet_name>";
interface = «em0»;
ip4.addr = 192.168.0.1;
allow.raw_sockets = 1;
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown;";
exec.clean;
enforce_statfs = 0;
mount.devfs;
mount.fstab = /usr/local/etc/packets/<packet_name>/<packet_name>.fstab;
В качестве интерфейса указываем одну из сетевых карт в системе. Присваиваем ему ip-адрес, который будет доступен снаружи. Также, для работы сетевых функций, таких как ping или traceroute разрешаем опцию allow.raw_sockets.
Раздел команд exec указывает какие команды выполнять для запуска и отключения системы внутри клетки. Поскольку это стандартный мир FreeBSD, то указываем базовые пути для включения и выключения системы.
Последними тремя опциями мы разрешаем монтирование внешних систем, подключаем физические устройства и монтируем во внешнюю папку нашу папку с данными внутри клетки согласно созданному файлу fstab.
Сохраняем наш файл в удобном месте, например в той же директории /usr/local/etc/packets/<packet_name>/<packet_name>.jail.conf
Монтирование пакета и запуск клетки
У нас все готово, чтобы запустить пакет в клетке. Начнем с того, что примонтируем датасет пакета:
mount -t zfs zp000111/packets/<packet_name> /mnt/packets/<packet_name>
Теперь можем запускать клетку:
jail -f /usr/local/etc/packets/<packet_name>/<packet_name>.jail.conf -c <packet_name>
Опцией -r мы указываем путь до конфигурационного файла, а -c что необходимо создать новую клетку с указанным именем.
Наша клетка запустилась, можем проверить это:
jls -j <packet_name>
Будет выведена строка с именем клетки и ее id в системе jail’ов.
Теперь, если нам необходимо войти в рабочую систему пакета, выполним команду:
jexec <jail_id> /bin/tcsh
Для остановки клетки и отмонтирования пакета выполняем обратные команды:
jail -f /usr/local/etc/packets/<packet_name>/<packet_name>.jail.conf -r <packet_name>
umount /mnt/packets/<packet_name>
Притом все данные, которые были сохранены пакетом в папке /usr/local/share/data своей файловой системы, будут доступны по пути /usr/local/share/packets/<packet_name> во внешней системе.
Итого
Таким образом, мы создали изолированную среду для нашего пакета.
Клетка снаружи будет пинговаться по указанному адресу, и, соответственно, все сетевые сервисы, поднятые в ней будут по нему также доступны. А поскольку пользовательские данные хранятся во внешней папке рабочей системы, то их легко хранить и резервировать.
Похожая система будет работать и в новых версиях ИКС, что сделает его использование еще более легким и приятным.
На этом на сегодня все, спасибо за внимание!
===========
Источник:
habr.com
===========
Похожие новости:
- [Информационная безопасность, Софт] «Лаборатория Касперского» заявила об обнаружении нового зловреда ЦРУ
- [Информационная безопасность, IT-инфраструктура, CRM-системы] Нам нечего терять! Безопасность для самых маленьких… компаний
- [Учебный процесс в IT, Законодательство в IT, Софт] «Закон о запрете просвещения» чиновники готовили на пиратском ПО Microsoft
- [Разработка для Office 365, Дизайн, История IT, Софт, IT-компании] Microsoft в 2022 году поменяет шрифт по умолчанию в Office
- [IT-инфраструктура, Сетевые технологии, Сетевое оборудование] Huawei ADN: первая в индустрии сеть с автономным управлением третьего уровня
- [IT-инфраструктура, DevOps, Облачные сервисы] Подход Multicloud Native Service: что это такое и как поможет сделать IT-систему максимально отказоустойчивой
- [Исследования и прогнозы в IT] Исследование актуальных потребностей IT-служб
- [Тестирование IT-систем, Сетевые технологии, Тестирование веб-сервисов, Тестирование мобильных приложений] Начинающему QA: полезные функции снифферов на примере Charles Proxy
- [Карьера в IT-индустрии, Конференции, IT-компании] Дорасти до сеньора и даже выше: советы по развитию IT-специалиста
- [Системное администрирование, IT-инфраструктура, Алгоритмы, Бизнес-модели] Доступность ИТ-сервисов как ключевой бизнес показатель, и причем тут арбуз
Теги для поиска: #_itinfrastruktura (IT-инфраструктура), #_setevye_tehnologii (Сетевые технологии), #_devops, #_soft (Софт), #_internet_kontrol_server (интернет контроль сервер), #_iks (икс), #_freebsd, #_jail, #_zfs, #_zfs_datasets, #_blog_kompanii_internet_kontrol_server (
Блог компании Интернет Контроль Сервер
), #_itinfrastruktura (
IT-инфраструктура
), #_setevye_tehnologii (
Сетевые технологии
), #_devops, #_soft (
Софт
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 21-Ноя 21:58
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В предыдущей статье мы рассказали, как работает система дистрибуции плагинов в новой версии ИКС. Сегодня речь пойдет о том, как разворачивать отдельно взятый плагин в системе. Предпочтительнее всего, чтобы каждый плагин запускался в изолированной среде, подготовленной специально с учетом требований конкретного плагина. Причем, в среде, которая позволит взаимодействовать системе с плагином и плагинами между собой. Далее, для понимания, что это применимо к стандартной работе с пакетами, мы будем использовать термин “пакет” Что выбрать? Что используют для этого в большинстве случаев? Конечно, Docker! pkg install docker pkg: No packages available to install matching 'docker' have been found in the repositories У Docker’а нет официальной поддержки FreeBSD, и такого пакета в репозитории конечно же нет. В предыдущей версии ИКС мы использовали неофициальный самописный порт docker’a, но его поддержка достаточно трудоемка, а кроме того всплывает немало подводных камней при его использовании. Но у FreeBSD есть собственная, изначальная поддержка изолированных сред. Она называется jail и для наших целей подходит не хуже, чем docker. Стоит заметить, что она появилась намного раньше, чем контейнеры в Linux. Посмотрим как настраивается типичный контейнер (клетка в терминологии bsd). Подготовка датасета и установка пакета Прежде всего нужно создать датасет, на котором будет настроена клетка пакета. В нашей системе используется файловая система ZFS, которая позволяет создавать любое количество наследуемых датасетов. По умолчанию в системе есть датасет с базовым миром (world) FreeBSD, от которого создаем снапшот (снимок): zfs snapshot zp000111/freebsd@snap zp000111 — это имя нашего корневого пула файловой системы. Мы можем посмотреть его через команду zfs mount. zp000111/freebsd — имя датасета, в котором хранится мир. Имя снимка указывается через символ @. Этот снимок мы создаем один раз и в дальнейшем все датасеты для пакетов будут наследоваться от него. От этого снимка мы создаем клон, в котором будет жить наш пакет: zfs clone zp000111/freebsd@snap zp000111/packets/<packet_name> Предварительно сделаем монтирование датасета к текущей системе: mount -t zfs zp000111/packets/<packet_name> /mnt/packets/<packet_name> И теперь мы можем выполнить в него установку нужного пакета: pkg -r /mnt/packets/<packet_name> install -y <packet_name> Ключ -r обеспечивает установку внутрь указанной директории. Если есть необходимость, можем установить другие нужные пакеты, например mc для удобной работы внутри пакета. Выполняем размонтирование. Это не обязательно, но полезно, чтобы в дальнейшем пройти весь путь для запуска клетки: umount /mnt/packets/<packet_name> Подготовка клетки Для начала необходимо определиться с хранением данных пакета в рабочей системе. Пусть это будет директория /usr/local/share/packets Добавляем в нее директорию <packet_name> mkdir /usr/local/share/packets/<packet_name> Теперь создаем файл с точкой монтирования <packet_name>.fstab. В нем находится информация для клетки о том, какая директория в смонтированном датасете синхронизируется: /usr/local/share/packets/<packet_name> /mnt/packets/<packet_name>/usr/local/share/data nullfs rw 0 0 Так мы сообщаем, что к директории в нашей рабочей системе будет подключена директория /usr/local/share/data в нашем примонтированном пакете. Это клетка (файловая система nullfs), разрешено как чтение, так и запись для обмена данными с внешней системой (rw), сохранение информации о файловой системе и проверка ее целостности не требуется (0 и 0). Сохраняем файл в удобном месте, например в /usr/local/etc/packets/<packet_name>/<packet_name>.fstab Теперь нам необходимо настроить конфигурационный файл для клетки нашего пакета. Типичный конфиг с минимальными настройками выглядит следующим образомSPLhost.hostname = "<packet_name>";
path = " /mnt/packets/<packet_name>"; interface = «em0»; ip4.addr = 192.168.0.1; allow.raw_sockets = 1; exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown;"; exec.clean; enforce_statfs = 0; mount.devfs; mount.fstab = /usr/local/etc/packets/<packet_name>/<packet_name>.fstab; В качестве интерфейса указываем одну из сетевых карт в системе. Присваиваем ему ip-адрес, который будет доступен снаружи. Также, для работы сетевых функций, таких как ping или traceroute разрешаем опцию allow.raw_sockets. Раздел команд exec указывает какие команды выполнять для запуска и отключения системы внутри клетки. Поскольку это стандартный мир FreeBSD, то указываем базовые пути для включения и выключения системы. Последними тремя опциями мы разрешаем монтирование внешних систем, подключаем физические устройства и монтируем во внешнюю папку нашу папку с данными внутри клетки согласно созданному файлу fstab. Сохраняем наш файл в удобном месте, например в той же директории /usr/local/etc/packets/<packet_name>/<packet_name>.jail.conf Монтирование пакета и запуск клетки У нас все готово, чтобы запустить пакет в клетке. Начнем с того, что примонтируем датасет пакета: mount -t zfs zp000111/packets/<packet_name> /mnt/packets/<packet_name> Теперь можем запускать клетку: jail -f /usr/local/etc/packets/<packet_name>/<packet_name>.jail.conf -c <packet_name> Опцией -r мы указываем путь до конфигурационного файла, а -c что необходимо создать новую клетку с указанным именем. Наша клетка запустилась, можем проверить это: jls -j <packet_name> Будет выведена строка с именем клетки и ее id в системе jail’ов. Теперь, если нам необходимо войти в рабочую систему пакета, выполним команду: jexec <jail_id> /bin/tcsh Для остановки клетки и отмонтирования пакета выполняем обратные команды: jail -f /usr/local/etc/packets/<packet_name>/<packet_name>.jail.conf -r <packet_name> umount /mnt/packets/<packet_name> Притом все данные, которые были сохранены пакетом в папке /usr/local/share/data своей файловой системы, будут доступны по пути /usr/local/share/packets/<packet_name> во внешней системе. Итого Таким образом, мы создали изолированную среду для нашего пакета. Клетка снаружи будет пинговаться по указанному адресу, и, соответственно, все сетевые сервисы, поднятые в ней будут по нему также доступны. А поскольку пользовательские данные хранятся во внешней папке рабочей системы, то их легко хранить и резервировать. Похожая система будет работать и в новых версиях ИКС, что сделает его использование еще более легким и приятным. На этом на сегодня все, спасибо за внимание! =========== Источник: habr.com =========== Похожие новости:
Блог компании Интернет Контроль Сервер ), #_itinfrastruktura ( IT-инфраструктура ), #_setevye_tehnologii ( Сетевые технологии ), #_devops, #_soft ( Софт ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 21-Ноя 21:58
Часовой пояс: UTC + 5