Pine, Alpine linux на базе OSTree
Выбирая что Операционные системы запускается на ваших серверах - это вопрос удобства и знакомства. Удобство означает, что вы хотите что-то, что доставляет вам как можно меньше проблем, знакомство означает, что вы бы предпочли нет чтобы узнать дополнительные вещи, если вам это не нужно.
Мои серверы домашние питомцытак что я могу вручную вводить несколько команд время от времени и не требовать полной автоматизации.
После опробования CoreOS за год перешел на свой упрощенный дистрибутив на основе альпийских и Остри.
Эта версия альпинизма заимствована у платформа а также проектно-атомный и предполагается установить как корневую файловую систему, доступную только для чтения, с обновлениями, происходящими атомарно, то есть либо они завершаются успешно, либо система возвращается в предыдущее состояние. Для того, чтобы это было возможно, в системе всегда должно быть как минимум два снимка выпущенной версии файловой системы, доступной на хранилище.
В каких средах будет работать система? Я нацелился ОВЗ и [KVM], но в целом можно сказать контейнеры а также виртуальные машины с основным отличием в том, что контейнеры не запускают собственное ядро, в частности, у них нет процесса загрузки, они вызывают непосредственно в в этом система (которая, например, вDockerfile
это будет определятьсяCMD
илиENTRYPOINT
операторов), который отвечает за управление деревом процессов, которые будут поддерживать работу контейнера (как и в обычном сеансе, если процесс init умирает, контейнер завершается). Также контейнеры не могут настраивать системные кнопки и могут иметь дополнительные ограничения на возможности.
Как строится образ?
Вprepare.sh
script обрабатывает зависимости, большинство из которых представляют собой пакеты, предлагающие общие инструменты cli, такие какcoreutils
, util-linux
, binutils
, утилиты для работы с блочными устройствами, такими какblkid
, sfdisk
, multipath-tools
и файловые системы сxfsprogs
а такжеe2fsprogs
. Вsquashfs-tools
package используется в конце для сжатия встроенной корневой файловой системы. Аglib
пакет совместимости также установлен по умолчанию, потому что alpine основан наmusl
, пакет совместимости работает, предоставляя некоторые библиотеки, построенные на основе.
Деревья файлов для виртуальных машин и контейнеров строятся соответственно сmake.sh
а такжеmake_ovz.sh
. Это упрощенное описание шагов
установить версию для сборки в соответствии с тегом репозитория
создать каталог для нового дерева и очистить среду
создать базовые целевые каталоги и каталоги, необходимые для ostree, напримерsysroot
создавать символические ссылки в соответствии с стандарт иерархии файловой системы
копировать кастомные сервисы и кастомные конфиги
настроить chroot с подключенными системными каталогами
загрузите alpine rootfs с помощью базовых пакетов
примените минимальную конфигурацию к rootfs, такую как учетные данные, часовой пояс, имя хоста.
копировать сервисы, которые будут запускаться с помощью init
настроить конфигурацию загрузки с указанным образом ядра
при желании добавить собственные модули ядра
выполнять уборку
зафиксировать rootfs[1] в ostree репозиторий
Для контейнеров последовательность такая же, но конфигурация меняется, поскольку система не загружается с загрузчик ostree имеет проблемы с проверкой окружающей среды, мы должны применить некоторые обходные пути и настроить некоторые устройства, которые обычно обрабатываются initramfs шаг. Вот как ОВЗ или LXC шаблоны настроены.
Как только у нас есть дерево зафиксированных файлов ostreebuild.sh
илиbuild-update.sh
заботится о производстве артефакта, который будет распространяться. Разница между скриптами в том, что версия обновления начинается с предыдущего репозитория ostree, и также создает дельта-артефакт, который работающая система может применить к своему экземпляру ostree для выполнения обновлений. Это упрощенное описание шагов сборки
если новая сборка
создать новые разделы на новом образе, смонтированном как устройство петли
еще
смонтировать sysroot и загрузочные разделы предыдущей сборки
очистить предыдущие развертывания ostree (фермы ссылок) на смонтированной сборке
зафиксировать новое построенное дерево на смонтированной сборке
проверить целостность и контрольные суммы
создать новую дельту для обновлений
выполнить развертывание ostree, чтобы восстановить конфигурацию загрузки
удалить старые коммиты ostree
проверить целостность загрузочного раздела
размонтировать новый обновленный образ сборки
сгенерировать контрольную сумму изображения и сжать ее (сsquashfs
для контейнеров)
Конфигурация разделов применяется с помощью fdisklayout.cfg
файла, который определяет размеры разделов, у нас есть один раздел для rootfs (~430M
), загрузочный раздел (~40M
) и раздел подкачки (~40M
). С контейнерами просто пропустите установку предыдущей сборки через устройство цикла и просто потяните новую фиксацию ostree поверх старого (извлеченного) репозитория ostree.
Что я включил в этот образ (кроме установленных пакетов)?
Небольшая библиотека вfunctions.sh
для общих задач, выполняемых в оболочке
ostree-скрипты обновления с механизмом блокировки на базе KV store
скрипты мониторинга для ввода-вывода как локальные (iomon
) и сеть (tcpmon
)
сценарии установки для сред выполнения контейнеров, отличных отbubblewrap
: podman
, toolbox
Что было раньше, а что больше нет
sup
: Как дела использовался для оркестрации (развертывания контейнеров) и конфигурации хост-машины, но затем я переключился на анзибль из-за того, что в sup были давние ошибки, в которых не было исправления, я не выбирал ansible с самого начала, потому что не хотел, чтобы зависимость python устанавливалась на каждом сервере, в конце концов я остановился на вторичном alpine chroot на хост-машинах, расположенных в/opt/alp
я установил дополнительное менее важное программное обеспечение. Однако сегодня я бы снова переключился с анзибля на Pyinfra , потому что
это питон без шаблона (у ansible есть псевдоDSL
который вызывает больше головных болей, чем те, которые он решает)
он выполняет свои рецепты с помощью простых команд ssh, поэтому на целевых хостах нет требований к зависимости от Python.
containerpilot
: Вариант использования пилотного контейнера - управление сложными зависимостями между контейнерами без сценариев оболочки ... он перестал получать обновления от радостный и был переведен в режим обслуживания, мне также не нравились требования к памяти, и использование памяти постоянно увеличивалось в течение длительного периода безотказной работы. Я переключил его на простые сценарии оболочки с помощью консул , Я мог бы поискать более подходящие альтернативы, если сценарии оболочки начнут слишком разрастаться. Более тяжелые решения, такие как Кубернеты, роиться или кочевник были отброшены с самого начала.
beegfs
: Раньше я поставлял модуль ядра, необходимый для beegfs но через некоторое время это нарушило совместимость, и тот факт, что не было должным образом поддерживаемого предохранитель модуль был сделан полностью отказаться от него, в настоящее время я не использую [DFS] на своих серверах, но возможность иметь готовую файловую систему для подключения к сети все еще привлекательна.
Чтобы установить образ, вы можете либо загрузить его на хостинг-провайдера, либо установить из VNC, в случае виртуальных машин, но я обычно захватываю существующую установку, потому что это всегда возможно, а также, пока я тестировал сценарий установки на версии дистрибутив linux, обычно я использую debian-8 или ubuntu-14, не тестировал другие, так как я всегда находил их доступными. Шаги настройки следующие
обеспечить поддержку https для загрузок
скачать версию busybox
установить связь-ферму busybox
определить адреса ipv4 / ipv6 для конфигурации сети
обеспечить возможности chroot
скачать изображение сосны и извлечь его
если ВМ
мигать над целевым устройством
установить на петлевое устройство
запишите конфигурацию локальной сети через быть прошитым rootfs
если контейнер
скопируйте службу инициализации (для контейнеров) через основную корневую точку монтирования/sbin/init
если ВМ
разделить оставшийся диск стандартным (xfs
) перегородки
размонтировать
проверить целостность разделов
перезагружать
я сделал сосна 5 years from time of writing and I am still using it, and I see no reasons to switch to anything else. Alpine as a linux distro is great, simple, and I have never experienced breakage. I can easily deploy on NATed серверы, которые, как правило, предлагают сверхнизкие ресурсы, на самом деле у меня есть коробка, работающая только с64M
оперативной памяти, и все еще у меня есть все необходимые мне функции.
[1] | корневая файловая система |