ALT Container OS: различия между версиями
Kaf (обсуждение | вклад) Нет описания правки |
Kaf (обсуждение | вклад) |
||
Строка 326: | Строка 326: | ||
== OSTREE-подветки и производные подсистемы == | == OSTREE-подветки и производные подсистемы == | ||
На настоящий момент (2.12.2021) реализована подветка ''altcos/x86_64/Sisyphus/k8s'' для развертывания kubernetes-кластера. Необходимые docker-образы для развертывания кластера включены в ostree-репозиторий. Так что для разворачивания кластера наличие доступа в Интернет не требуется. | |||
Документация по разворачиванию кластера в QEMU/KVM с использованием BTRFS-тома для хранения docket-образов и контейнеров приведена на странице | |||
[https://www.altlinux.org/ALT_Container_OS_%D0%BF%D0%BE%D0%B4%D0%B2%D0%B5%D1%82%D0%BA%D0%B0_K8S|ALT Container OS подветка K8S]. | |||
До конца 2021 года планируется выпуск подветки ''altcos/x86_64/P10/k8s''. | |||
В начале 2022 года планируется поддержка разворачивания среды ''openshift'' на ostree-дистрибутивах ''ALTCOS''. |
Версия от 08:32, 2 декабря 2021
ALT Container OS (ALTCOS) — дистрибутив на основе пакетной базы ALT Linux, являющий аналогом Fedora CoreOS, имеющий следующие особенности:
- минимальный набор пакетов для поддержки контейнеризации (docker, docker-compose, docker swarm, podman);
- малый объем занимаемый на диске ~1.2GB;
- минимальное время (пере)загрузки системы - несколько секунд;
- повышенная защищенность за счет монтирования в режиме ТОЛЬКО НА ЧТЕНИЕ системных каталогов;
- монолитность — атомарные обновления с возможностью отката на предыдущую версию;
- поддержка потоков, для различных платформ и архитектур ALT Linux. На данный момент (22.10.2021) поддерживаются потоки altcos/x86_64/sisyphus, altcos/x86_64/p10 (архитектура x86_64, платформы sisyphus, p10). В дальнейшем планируется добавить поддержку потоков для других платформ и архитектур;
- автоматическое развертывание на множестве (виртуальных) машин без участия оператора;
- поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность.
Обновления ALTCOS выполняются с помощью ostree, что позволяет обновлять систему целиком за одно действие и при необходимости загрузиться в предыдущее состояние.
Во время установки для первоначальной настройки используется технология ignition (https://coreos.github.io/ignition/getting-started/). Она позволяет, предварительно описав шаблоны конфигурации в ignition-файлах, без участия оператора разворачивать систему на множестве серверов локальной сети или облака.
Ignition-конфигурация во время установки позволяет:
- создавать пользователей;
- разбивать диски на партиции, создавать RAID-диски, инициализирвать файловые системы, монтировать их;
- создавать файлы, в том числе и конфигурационные для создания новых сервисов systemd, сетевых интерфейсов и т.п.
В ALTCOS есть специальный пользователь altcos, включенный в группы docker и wheel, то есть имеющий право запускать команды docker, sudo, podman, .... Во время первоначальной настройки через ignition можно установить пароль пользователям altcos и root.
В настоящее время (22.10.2021) ALTCOS можно установить с помощью ISO-образа или при помощи ignition настроить QCOW2.
В дальнейшем планируется поддержка установки в различные облачные среды, а также сетевой установки с использованием PXE.
Получение ALTCOS-образов
ALTCOS-образы доступны на сайте https://altcos.altlinux.org/.
Для архитектуры x86_64 поддерживаются следующие платформы:
- sisyphus - поток altcos/x86_64/sisyphus;
- p10 - поток altcos/x86_64/p10;
- последующие платформы.
В дальнейшем предполагается поддержка других архитектур.
Кроме этого планируется механизм создания в рамках каждого потока (ветки) подветок со специализированным программным обеспечением. Например: altcos/x86_64/Sisyphus/k8s - подветка с kubernetes и т.п.
Технически будет возможно обеспечить механизм создания и ведения подветок пользователями ALTCOS.
В рамках каждой платформы формируется поток версий формата <Поток>.<Дата>.<Мажорная_версия>.<Минорная_версия>.
Минорная_версия увеличивается при выходе новых версий пакетов.
Мажорная_версия как и Дата увеличиваются при изменении состава пакетов образа
В настоящее время (версия 1.0 - 22.10.2021) поддерживаются платформы sisyphus, p10.
Для получения образы выберите:
- архитектуру;
- версию;
- тип образа (в версии 1.0 ISO, QCOW2);
- несжатый или сжатый формат
и кликните на клавишу Скачать.
После загрузки выбранный образ доступен на локальном компьютере (как правило в папке Загрузки домашнего директория). Формат имени файла <имя_ветки>.<тип_образа>[.xz]
ISO-образ для установки на 'голое железо' необходимо командой dd записать на носитель (USB или CD/DVD диск).
Сжатый QCOW2 образ необходимо распаковать командой
xz -d <имя_ветки>.<тип_образа>.xz
QCOW2 образ используется для создания виртуальных машин в qemu/kvm и облачных платформах, поддерживающих этот формат.
Установка ALTCOS из ISO
В загрузочном меню выбрать пункт "Install ALTCOS" или дождаться, когда он будет выбран через 10 секунд по умолчанию.
После завершения загрузки отображаются подсказки команд. Доступна мышь, чтобы скопировать эти команды в командную строку.
Пример конфигурационного файла ignition, полное имя которого указано в примере команды установки, позволяет установить пароль "1" пользователю с именем altcos. Если требуется другой пароль, можно его сгенерировать командой
mkpasswd --method=yescrypt
Конфигурационный файл ignition можно загрузить доступными в установочном ISO командами scp и curl.
При помощи lsblk определить имя файла устройства, на которое будет выполняться установка, и передать его в качестве первого параметра скрипту altcos-installer.sh. Второй параметр — полный путь к конфигу ignition.
Установка выполняется на весь диск, и значит все данные, находившиеся на нем до установки, будут удалены. На предупреждение об этом следует нажать клавишу "y".
Установщик спросит пароль root.
Установка завершится вопросом о необходимости перезагрузки. При нажатии клавиши "y" будет выполнена перезагрузка.
Загрузиться в свежеустановленную систему можно будет, выбрав в загрузочном меню пункт загрузки с жесткого диска.
На рисунке ниже представлен результат загрузки.
Запуск ALTCOS из QCOW2
При первом запуске ALTCOS из образа QCOW2 надо передать qemu параметр командой строки -fw_cfg name=opt/com.coreos/config,file=/path/to/config.ign, в котором прописать путь к своему конфигурационному файлу ignition. Пример конфига, в котором устанавливается пароль пользователя altcos можно найти по данной ссылке
Автоматическое обновление ALTCOS
После загрузки системы запускается сервис zincati, контролирующий наличие новых версий установленного потока (altcos/x86_64/sisyphus, altcos/x86_64/p10, …). При появлении новой версии происходит ее автоматическая загрузка и, в зависимости от режима, перезагрузка системы. Поддерживаются следующие режимы перезагрузки:
- Немедленная. Если в системе нет пользователей — немедленная перезагрузка. Если есть — рассылка сообщений пользователям, ожидание их выхода и перезагрузка после их выхода или через 10 минут.
- По расписанию. Перезагрузка происходит в указанный интервал времени.
- Согласованная. Перезагрузка производится с участием центрального сервиса, контролирующего порядок перезагрузки серверов кластера для минимизации времени простоя ключевых сервисов.
Ручное обновление ALTCOS
Для ручного обновления используется команда
ostree admin upgrade
После выполнения этой команды можно посмотреть состояние. Новая загрузочная среда будет обозначена словом pending.
[root@localhost altcos]# ostree admin status alt-containeros c5d2012fe6a8ddd2526305fc78f5018b3962b1334ce237598b4356e2eb9eee7c.0 (pending) Version: sisyphus.20211006.1.0 origin refspec: altcos:altcos/x86_64/sisyphus * alt-containeros 5e5befec2377dc5a7ee801f816ee5e63a625809379cf375131704a3a57ffbad7.0 Version: sisyphus.20211006.0.0 origin refspec: altcos:altcos/x86_64/sisyphus [root@localhost altcos]#
В загрузочном меню появится новый пункт меню, соответствующий новой загрузочной среде. Он будет выбран по умолчанию.
После перезагрузки в новую загрузочную среду старая будет обозначена словом rollback.
[root@localhost altcos]# ostree admin status * alt-containeros c5d2012fe6a8ddd2526305fc78f5018b3962b1334ce237598b4356e2eb9eee7c.0 Version: sisyphus.20211006.1.0 origin refspec: altcos:altcos/x86_64/sisyphus alt-containeros 5e5befec2377dc5a7ee801f816ee5e63a625809379cf375131704a3a57ffbad7.0 (rollback) Version: sisyphus.20211006.0.0 origin refspec: altcos:altcos/x86_64/sisyphus [root@localhost altcos]#
Работа с контейнерами в ALTCOS
ALT Container OS поддерживает два основных режима работы с контейнерами:
- серверный — демон dockerd с клиентским приложением docker;
- бессерверный — клиентское приложение podman.
Серверный вариант позволяет клиентским приложениям (docker, ...) работать с демоном dockerd как локально, так и удаленно через REST-интерфейс, но считается менее защищенным, чем бессерверный вариант podman.
Бессерверный вариант podman, появившийся относительно недавно, выполняет функции сервера и работает напрямую с файловой системой.
Оба клиентских приложения имеют похожий набор команд, но хранят образы и контейнеры в различных каталогах. Образы, скачанные приложением docker, недоступны приложению podman и наоборот.
Серверный вариант (docker, dockerd) удобен для проектов с небольшим числом запускаемых сервисов (не более десятка).
Он позволяет запускать как отдельные контейнеры, так и по YML-файлу описания стеки сервисов как на одном сервере (через docker-compose), так и на кластере серверов (docker stack).
Бессерверный вариант (podman) позволяет запускать отдельные контейнеры и может (как и серверный вариант) использоваться в кластере kubernetes.
Примеры работы в режиме docker
Запуск контейнера
Скачайте базовый образ платформы p8 alt:p8:
$ docker pull alt:p8 latest: Pulling from library/alt 86bd305d9be6: Pull complete 006b17da3256: Pull complete Digest: sha256:c4eb4ad40440b7c3297c14c91048aa07cbe2534f9e629f4bc9b0d113ca57821f Status: Downloaded newer image for alt:latest docker.io/library/alt:latest
Запустите каманды echo и cat в контейнере образа:
$ docker run --rm -i alt:p8 sh -c "echo -ne 'Привет из docker-контейнера '; cat /etc/altlinux-release" Привет из docker-контейнера ALT p8 starter kit (Hypericum)
Пример работы в режиме docker-compose
В данном примере разворачивается стек из двух сервисов:
- postgres — сервис базы данных postgres 13-й версии;
- pgadmin — административный WEB-интерфейс для работы с сервером.
Для запуска сервиса административного интерфейса используется официальный образ dpage/pgadmin4.
Для запуска сервера базы данных используется образ kafnevod/alt.p8-postgres:13, собранный на базе образа alt:p10.
Для сборки образа kafnevod/alt.p8-postgres:13 использовался следующий Dockerfile:
FROM alt:p10 ENV PGPASS=q1w2e3 RUN \ apt-get update; \ apt-get install -y postgresql13-server; RUN \ echo -ne "$PGPASS\n$PGPASS\n" | su -s /bin/sh -l postgres -c 'initdb --pgdata="/var/lib/pgsql/data" --locale="ru_RU.UTF-8" -U postgres -W'; \ sed -i -e "/^#listen_addresses/a\ listen_addresses = '*'" /var/lib/pgsql/data/postgresql.conf; \ echo "host all all 0.0.0.0/0 md5" >> /var/lib/pgsql/data/pg_hba.conf CMD exec su -c "/usr/bin/postgres -D /var/lib/pgsql/data $POSTGRES_PARAMS" -s /bin/sh postgres
В переменной PGPASS задается пароль администатора базы данных postgres. После установки пакета postgresql13-server в файлах конфигурации включается прием соединения по протоколу TCP/IP и авторизацию md5.
Файл docker-compose.yml для запуска сервисов:
В файле docker-compose.yml для сервера базы данных задается именованный том для хранения базы данных, а также логин и пароль для работы с административным интерфейсом:
version: "3" services: postgres: image: kafnevod/alt.p8-postgres:13 volumes: - DB:/var/lib/pgsql/data pgadmin: image: dpage/pgadmin4 environment: - PGADMIN_DEFAULT_EMAIL=test@altcos.altlinux.org - PGADMIN_DEFAULT_PASSWORD=Secret ports: - 80:80 volumes: DB:
Запуск сервисов
Сервисы запускаются командой docker-compose:
$ docker-compose up -d Creating network "docker-compose_default" with the default driver Creating volume "docker-compose_DB" ис запцскается в виртуальном with default driver Creating docker-compose_postgres_1 ... done Creating docker-compose_pgadmin_1 ... done
Настройка и работа с pgadmin4 через WEB-интерфейс
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):
В поле Login введите значение переменной _PGADMIN_DEFAULT_EMAIL, в поле пароля значение переменной PGADMIN_DEFAULT_PASSWORD файла docker-compose.yml.
В закладке General в поле Name введите имя базы данных: postgres.
В закладке Connection
- в поле Host введите имя сервиса postgres файла docker-compose.yml;
- в полях Maintenance database, Username имя базы (postgres) и имя пользователя (postgres)
- в поле Password значение переменной PGPASS файла Dockerfile.
После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.
Пример работы в режиме podman
Скачайте образ fanux/tetris
$ sudo podman pull --all-tags fanux/tetris Trying to pull docker.io/fanux/tetris:latest... Getting image source signatures Copying blob 08d48e6f1cff done Copying blob abf1e846b79b done Copying blob 92f626025fce done Copying blob 5bd1005002cc done Copying config 82f6127899 done Writing manifest to image destination Storing signatures 82f61278995f8c959b38174bc66bc053289cbb68cc47b2edca1ff10fafe28828
Запустите игру
$ sudo podman run --rm -it fanux/tetris game
Подготовка конфигурационного файла ignition
Формат конфигов ignition (JSON) человекочитаемый, но сложный для написания. Удобнее писать конфиг на YAML, а затем с помощью butane (https://coreos.github.io/butane/) преобразовывать YAML в JSON. Утилиту butane можно установить командой
apt-get install butane
Для преобразования конфига из YAML в JSON можно использовать команду
butane < cfg.yaml > cfg.ign
Описание подготовленных файлов конфигурации для установки ALTCOS
В каталоге /configs/ сайта https://altcos.altlinux.org/ размещены подготовленные файлы конфигурации для установки ACOS. Он содержит следующие подкаталоги:
- butane - человекочитаемые файлы конфигурации в формате butane. Суффикс .btn.
- ignition - соответствующие файлы конфигурации в формате ignition. Суффикс .ign.
В настоящий момент в нем находятся следующие файлы конфигураций:
- users - указание пароля и открытого ключа для пользователя altcos, создание пользователя user;
- containers - установка файлов для запуска описанных примеров для работы с контейнерами;
- storage - форматирование второго диска и монтирование его в каталог /var/lib/docker
users - описание пользователей
Файлы конфигурации:
Конфигурация:
- задает пароль пользователя altcos (1), добавляет один открытый ключ;
- добавляем пользователя user (пароль 012345), добавляет один открытый ключ.
Вы можете скорректировать пароли и список открытых ключей для указанных пользователей, добавить новых пользователей и т.д.
containers - установка файлов для запуска описанных примеров для работы с контейнерами
Файлы конфигурации:
Использовав во время установки ignition-файл https://altcos.altlinux.org/configs/ignition/containers.ign Вы в домашнем каталоге пользователя altcos получаете развернутое дерево для запуска описанных выше примеров запуска контейнеров.
/var/home/altcos/ `-- examples `-- docker |-- docker | `-- hello.sh |-- docker-compose | |-- docker-compose.yml | |-- start.sh | `-- stop.sh `-- podman `-- tetris.sh
- /var/home/altcos/examples/docker/docker - скрипт hello.sh запуска контейнера;
- /var/home/altcos/examples/docker/docker-compose - файл описания сервисов docker-compose.yml и с
крипты запуска и остановки сервисов;
- /var/home/altcos/examples/podman/tetris.sh - скрипт запуска контейнера игры tetris через podman.
storage - форматирование второго диска и монтирование его в каталог /var/lib/docker
Файлы конфигурации:
Как правило при установке ALTCOS корневая файловая система имееет небольшой объем (несколлько гигабайт). Это недостаточно для развертывания множество docker-контейнеров, располагающихся в каталогах /usr/lib/docker, /usr/lib/containers.
В этой ситуации целесообразно примонтировать общий каталог /var/lib на отдельный диск достаточного для разворачивания контейнеров объемы.
В указанном примере на втором доступном диске /dev/sdb
- создается единственный раздел /dev/sdb1, занимающий весь диск
- создается файловая система формата ext4;
- созданная файловая система монтируется на каталог /var/lib/.
Обратите внимание - при наличие параметра with_mount_unit: true в элемента storage.filesystem файла формата butane, в файле формата ignition создается дополнительный элемент systemd.units, обеспечивающий монтирование созданной файловой системы.
OSTREE-подветки и производные подсистемы
На настоящий момент (2.12.2021) реализована подветка altcos/x86_64/Sisyphus/k8s для развертывания kubernetes-кластера. Необходимые docker-образы для развертывания кластера включены в ostree-репозиторий. Так что для разворачивания кластера наличие доступа в Интернет не требуется.
Документация по разворачиванию кластера в QEMU/KVM с использованием BTRFS-тома для хранения docket-образов и контейнеров приведена на странице Container OS подветка K8S. До конца 2021 года планируется выпуск подветки altcos/x86_64/P10/k8s.
В начале 2022 года планируется поддержка разворачивания среды openshift на ostree-дистрибутивах ALTCOS.