ALT Container OS: различия между версиями
Kaf (обсуждение | вклад) Нет описания правки |
Snejok (обсуждение | вклад) мНет описания правки |
||
(не показано 17 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
<span id="alt-container-os"></span> | |||
'''ALT Container OS | = ALT Container OS = | ||
* минимальный набор пакетов для поддержки контейнеризации ( | |||
'''ALT Container OS (ALTCOS)''' — дистрибутив на основе пакетной базы '''ALT Linux''', являющий аналогом '''Fedora CoreOS''', имеющий следующие особенности: | |||
* минимальный набор пакетов для поддержки контейнеризации (docker, docker-compose, docker swarm, podman); | |||
* малый объем занимаемый на диске ~1.2GB; | * малый объем занимаемый на диске ~1.2GB; | ||
* минимальное время (пере)загрузки системы - несколько секунд; | * минимальное время (пере)загрузки системы - несколько секунд; | ||
* повышенная защищенность за счет монтирования в режиме ТОЛЬКО НА ЧТЕНИЕ системных каталогов; | * повышенная защищенность за счет монтирования в режиме ТОЛЬКО НА ЧТЕНИЕ системных каталогов; | ||
* монолитность — атомарные обновления с возможностью отката на предыдущую версию; | * монолитность — атомарные обновления с возможностью отката на предыдущую версию; | ||
* поддержка потоков, для различных платформ и архитектур | * поддержка потоков, для различных платформ и архитектур ALT Linux; | ||
* автоматическое развертывание на множестве (виртуальных) машин без участия оператора; | * автоматическое развертывание на множестве (виртуальных) машин без участия оператора; | ||
* поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность. | * поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность. | ||
Обновления ''ALTCOS'' выполняются с помощью | Обновления '''ALTCOS''' выполняются с помощью [https://ostreedev.github.io/ostree/ ostree], что позволяет обновлять систему целиком за одно действие и при необходимости загрузиться в предыдущее состояние. | ||
Во время установки для первоначальной настройки используется технология | |||
'' | Во время установки для первоначальной настройки используется технология [https://coreos.github.io/ignition/getting-started/ ignition]. Она позволяет, предварительно описав шаблоны конфигурации в '''ignition'''-файлах, без участия оператора разворачивать систему на множестве серверов локальной сети или облака. '''ignition'''-конфигурация во время установки позволяет: | ||
* создавать пользователей; | * создавать пользователей; | ||
* разбивать диски на партиции, создавать | * разбивать диски на партиции, создавать RAID-диски, инициализирвать файловые системы, монтировать их; | ||
* создавать файлы, в том числе и конфигурационные для создания новых '' | * создавать файлы, в том числе и конфигурационные для создания новых сервисов systemd, сетевых интерфейсов и т.п. | ||
В '''ALTCOS''' есть специальный пользователь '''altcos''', включенный в группы '''docker''' и '''wheel''', то есть имеющий право запускать команды '''docker''', '''sudo''', '''podman''', …. Во время первоначальной настройки через '''ignition''' можно установить пароль пользователям '''altcos''' и '''root'''. '''ALTCOS''' можно установить с помощью '''ISO'''-образа или при помощи '''ignition''' настроить '''qcow2'''. | |||
<span id="образы-доступны-на-сайте-altcos"></span> | |||
== Образы доступны на сайте [https://altcos.altlinux.org/ altcos] == | |||
[[File:Altcos-index-page.png|frameless|none]] | |||
Для получения образы выберите: | |||
* Архитектуру (e.g. <code>x86_64</code>) | |||
* Репозиторий (e.g. <code>p10</code>) | |||
* Ветку (e.g. <code>base</code>) | |||
и кликлинте на ссылку <code>Скачать</code> желаемого формата в столбце загрузок. | |||
После загрузки выбранный образ доступен на локальном компьютере (как правило в папке Загрузки домашнего директория). Формат имени файла <code><репозиторий>_<ветка>.<архитектура>.<версия>.<платформа>.<формат>[.xz]</code>. | |||
Например: <code>sisyphus_base.x86_64.20231114.0.0.metal.iso</code> | |||
ISO-образ для установки на ‘голое железо’ необходимо командой dd записать на носитель (USB или CD/DVD диск). | |||
Сжатый qcow2 образ необходимо распаковать командой | |||
<syntaxhighlight lang="sh">xz -d <имя образ>.xz</syntaxhighlight> | |||
QCOW2 образ используется для создания виртуальных машин в qemu/kvm и облачных платформах, поддерживающих этот формат. | |||
<span id="установка-altcos-из-iso"></span> | |||
== Установка ALTCOS из ISO == | |||
В загрузочном меню выбрать пункт '''ALT Container OS'''. [[File:Iso-grub-menu.png|frameless|none]] | |||
'' | После завершения загрузки появится приглашение для ввода логина. Необходимо зайти под пользователем '''root'''. [[File:Iso-login.png|frameless|none]] | ||
Пример конфигурационного файла '''ignition''' (/usr/share/altcos/config_example.ign), позволяет установить пароль “1” пользователю с именем altcos. Если требуется другой пароль, можно его сгенерировать командой: | |||
<syntaxhighlight lang="sh">mkpasswd --method=yescrypt</syntaxhighlight> | |||
А затем заменить строку в поле <code>passwordHash</code> на результат <code>mkpasswd</code> | |||
[[File:Iso-ignition-config-example.png|frameless|none]] | |||
При помощи '''lsblk''' определить имя файла устройства, на которое будет выполняться установка, и передать его в качестве первого параметра скрипту '''altcos-installer.sh'''. Второй параметр — полный путь к конфигу '''ignition'''. | |||
[[File:Iso-altcos-installer.png|frameless|none]] | |||
Установка выполняется на весь диск, и значит все данные, находившиеся на нем до установки, будут удалены. На предупреждение об этом следует нажать клавишу “''y''”. | |||
[[File:Iso-altcos-installer-accept.png|frameless|none]] | |||
'' | Установщик спросит пароль '''root'''. | ||
[[File:Iso-altcos-installer-ask-root.png|frameless|none]] | |||
Установка завершится вопросом о необходимости перезагрузки. При нажатии клавиши “''y''” будет выполнена перезагрузка. | |||
[[File:Iso-altcos-installer-reboot.png|frameless|none]] | |||
Грузимся в установленную систему. [[File:Installed-altcos-from-iso.png|frameless|none]] | |||
Логинимся под нужным пользователем. [[File:Installed-altcos-from-iso-login.png|frameless|none]] | |||
<span id="запуск-altcos-из-qcow2"></span> | |||
== Запуск ALTCOS из qcow2 == | |||
При первом запуске '''ALTCOS''' из образа '''qcow2''' надо передать '''qemu''' параметр командой строки <code>-fw_cfg name=opt/com.coreos/config,file=/path/to/config.ign</code>, в котором прописать путь к своему конфигурационному файлу ''ignition''. Пример конфига, в котором устанавливается пароль пользователя ''altcos'' можно найти по [http://git.altlinux.org/gears/s/startup-installer-acos.git?p=startup-installer-acos.git;a=blob_plain;f=altcos/config_example.ign;hb=3a2fa607922539331ee5c78044c67e118dfa689f данной ссылке] | |||
[ | |||
[[File:Qemu-grub.png|frameless|none]] | |||
<span id="автоматическое-обновление-altcos"></span> | |||
== Автоматическое обновление ALTCOS == | == Автоматическое обновление ALTCOS == | ||
После загрузки системы запускается сервис zincati, контролирующий наличие новых версий установленного потока (altcos/x86_64/sisyphus, altcos/x86_64/p10, …). При появлении новой версии происходит ее автоматическая загрузка и, в зависимости от режима, перезагрузка системы. Поддерживаются следующие режимы перезагрузки: | |||
После загрузки системы запускается сервис [https://coreos.github.io/zincati/ zincati], контролирующий наличие новых версий установленного потока (altcos/x86_64/sisyphus/'', altcos/x86_64/p10/'', …). При появлении новой версии происходит ее автоматическая загрузка и, в зависимости от режима, перезагрузка системы. Поддерживаются следующие режимы перезагрузки: | |||
* Немедленная. Если в системе нет пользователей — немедленная перезагрузка. Если есть — рассылка сообщений пользователям, ожидание их выхода и перезагрузка после их выхода или через 10 минут. | * Немедленная. Если в системе нет пользователей — немедленная перезагрузка. Если есть — рассылка сообщений пользователям, ожидание их выхода и перезагрузка после их выхода или через 10 минут. | ||
* По расписанию. Перезагрузка происходит в указанный интервал времени. | * По расписанию. Перезагрузка происходит в указанный интервал времени. | ||
* Согласованная. Перезагрузка производится с участием центрального сервиса, контролирующего порядок перезагрузки серверов кластера для минимизации времени простоя ключевых сервисов. | * Согласованная. Перезагрузка производится с участием центрального сервиса, контролирующего порядок перезагрузки серверов кластера для минимизации времени простоя ключевых сервисов. | ||
[https://coreos.github.io/zincati/usage/updates-strategy/ настройка обновлений zincati] | |||
<span id="ручное-обновление-altcos"></span> | |||
== Ручное обновление ALTCOS == | == Ручное обновление ALTCOS == | ||
Для ручного обновления используется команда: | |||
<syntaxhighlight lang="sh">ostree admin upgrade</syntaxhighlight> | |||
После выполнения этой команды можно посмотреть состояние. Новая загрузочная среда будет обозначена словом '''pending'''. | |||
<span id="работа-с-контейнерами-в-altcos"></span> | |||
== Работа с контейнерами в ALTCOS == | == Работа с контейнерами в ALTCOS == | ||
ALT Container OS поддерживает два основных режима работы с контейнерами: | |||
* серверный — демон '''dockerd''' с клиентским приложением '''docker'''; | |||
* бессерверный — клиентское приложение '''podman'''. | |||
Серверный вариант позволяет клиентским приложениям ('''docker''', …) работать с демоном '''dockerd''' как локально, так и удаленно через '''REST'''-интерфейс, но считается менее защищенным, чем бессерверный вариант '''podman'''. Бессерверный вариант '''podman''', появившийся относительно недавно, выполняет функции сервера и работает напрямую с файловой системой. Оба клиентских приложения имеют похожий набор команд, но хранят образы и контейнеры в различных каталогах. Образы, скачанные приложением '''docker''', недоступны приложению '''podman''' и наоборот. | |||
Серверный вариант ('''docker''', '''dockerd''') удобен для проектов с небольшим числом запускаемых сервисов (не более десятка). Он позволяет запускать как отдельные контейнеры, так и по '''YML'''-файлу описания стеки сервисов как на одном сервере (через '''docker-compose'''), так и на кластере серверов ('''docker stack'''). | |||
Бессерверный вариант ('''podman''') позволяет запускать отдельные контейнеры и может (как и серверный вариант) использоваться в кластере '''kubernetes'''. | |||
<span id="примеры-работы-в-режиме-docker"></span> | |||
=== Примеры работы в режиме docker === | === Примеры работы в режиме docker === | ||
'''Запуск контейнера''' | |||
Скачайте базовый образ '''alt:p10''': | |||
<syntaxhighlight lang="sh">docker pull alt:p10</syntaxhighlight> | |||
[[File:Altcos-docker-pull-p10.png|frameless|none]] | |||
Запуск команды '''echo''' и '''cat''': | |||
<syntaxhighlight lang="sh">docker run --rm -i alt:p10 sh -c "echo -ne 'Hello, World '; cat /etc/altlinux-release"</syntaxhighlight> | |||
[[File:Altcos-docker-run-p10-echo.png|frameless|none]] | |||
'''Пример работы в режиме docker-compose''' | |||
В данном примере разворачивается стек из двух сервисов: | В данном примере разворачивается стек из двух сервисов: | ||
* '''postgres''' — сервис базы данных '''postgres''' 13-й версии; | |||
* '''pgadmin''' — административный '''WEB'''-интерфейс для работы с сервером. | |||
Для запуска сервиса административного интерфейса используется официальный образ '''dpage/pgadmin4'''. | |||
Для запуска сервера базы данных используется образ созданный из приведенного ниже '''Dockerfile''', собранный на базе образа '''alt:p10''': | |||
<syntaxhighlight lang="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</syntaxhighlight> | |||
В переменной '''PGPASS''' задается пароль администатора базы данных '''postgres'''. После установки пакета '''postgresql13-server''' в файлах конфигурации включается прием соединения по протоколу '''TCP/IP''' и авторизацию '''md5'''. | |||
Сборка: | |||
<syntaxhighlight lang="sh">docker build -t altcos/alt.p10-postgres:13 .</syntaxhighlight> | |||
'''Файл docker-compose.yml для запуска сервисов:''' В файле '''docker-compose.yml''' для сервера базы данных задается именованный том для хранения базы данных, а также логин и пароль для работы с административным интерфейсом: | |||
<syntaxhighlight lang="yaml">version: "3" | |||
services: | |||
postgres: | |||
image: altcos/alt.p10-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:</syntaxhighlight> | |||
'''Запуск сервисов''' | |||
<syntaxhighlight lang="sh">docker compose up -d</syntaxhighlight> | |||
'''Настройка и работа с pgadmin4 через WEB-интерфейс''' | |||
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу): | |||
[[File:Pgadmin-login.png|frameless|none]] | |||
В поле Login введите значение переменной '''PGADMIN_DEFAULT_EMAIL''', в поле пароля значение переменной '''PGADMIN_DEFAULT_PASSWORD''' файла '''docker-compose.yml'''. | |||
[[File:Pgadmin-general.png|frameless|none]] Во вкладке '''General''' в поле '''Name''' введите имя базы данных: '''postgres'''. | |||
[[File:Pgadmin-connection.png|frameless|none]] Во вкладке '''Connection''' - в поле '''Host''' введите имя сервиса '''postgres''' файла '''docker-compose.yml'''; - в полях '''Maintenance database''', '''Username''' имя базы ('''postgres''') и имя пользователя ('''postgres''') - в поле '''Password''' значение переменной '''PGPASS''' файла '''Dockerfile'''. | |||
После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных. | |||
[[File:Pgadmin-at-work.png|frameless|none]] | |||
<span id="пример-работы-в-режиме-podman"></span> | |||
=== Пример работы в режиме podman === | |||
Скачайте образ '''fanux/tetris''': | |||
<syntaxhighlight lang="sh">su - -c "podman pull --all-tags fanux/tetris" </syntaxhighlight> | |||
Запустите игру: | |||
= | <syntaxhighlight lang="sh">su - -c "podman run --rm -it fanux/tetris game"</syntaxhighlight> | ||
[[File:Podman-tetris.png|frameless|none]] | |||
<span id="подготовка-конфигурационного-файла-ignition"></span> | |||
=== Подготовка конфигурационного файла ''ignition'' === | |||
Формат конфигов '''ignition''' ('''JSON''') человекочитаемый, но сложный для написания. Удобнее писать конфиг на '''YAML''', а затем с помощью [https://coreos.github.io/butane/ butane] преобразовывать '''YAML''' в '''JSON'''. Утилиту butane можно установить командой: | |||
= | <syntaxhighlight lang="sh">apt-get install butane</syntaxhighlight> | ||
Для преобразования конфига из '''YAML''' в '''JSON''' можно использовать команду: | |||
<syntaxhighlight lang="sh">butane < cfg.yaml > cfg.ign</syntaxhighlight> | |||
<span id="ostree-подветки-и-производные-подсистемы"></span> | |||
=== OSTree-подветки и производные подсистемы === | |||
Реализована подветка '''altcos/x86_64/sisyphus/k8s''' для развертывания '''kubernetes''' и '''docker-swarm'''-кластеров. Необходимые '''docker'''-образы для развертывания кластера включены в '''ostree'''-репозиторий. Так что для разворачивания кластеров наличие доступа в Интернет не требуется. | |||
в | |||
'''Примечание''': Примечание: '''docker-swarm''' кластер при создании соответствующих '''ignition'''-файлов можно разворачивать и в рамках базовой ветки '''altcos/x86_64/sisyphus/base'''. | |||
Документация по разворачиванию ''kubernetes'' и ''docker swarm'' кластеров в ''QEMU/KVM'' с использованием ''BTRFS-тома'' для хранения ''docker-образов'' и ''контейнеров'' приведена на странице '''[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]'''. | |||
Документация по разворачиванию отказоустойчивого кластера ''kubernetes'' в ''QEMU/KVM'' приведена на странице '''[https://www.altlinux.org/ALT_Container_OS_%D0%BF%D0%BE%D0%B4%D0%B2%D0%B5%D1%82%D0%BA%D0%B0_K8S._%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_HA_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0 ALT Container OS подветка K8S. Создание HA кластера]'''. | |||
Текущая версия от 10:49, 6 июля 2024
ALT Container OS
ALT Container OS (ALTCOS) — дистрибутив на основе пакетной базы ALT Linux, являющий аналогом Fedora CoreOS, имеющий следующие особенности:
- минимальный набор пакетов для поддержки контейнеризации (docker, docker-compose, docker swarm, podman);
- малый объем занимаемый на диске ~1.2GB;
- минимальное время (пере)загрузки системы - несколько секунд;
- повышенная защищенность за счет монтирования в режиме ТОЛЬКО НА ЧТЕНИЕ системных каталогов;
- монолитность — атомарные обновления с возможностью отката на предыдущую версию;
- поддержка потоков, для различных платформ и архитектур ALT Linux;
- автоматическое развертывание на множестве (виртуальных) машин без участия оператора;
- поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность.
Обновления ALTCOS выполняются с помощью ostree, что позволяет обновлять систему целиком за одно действие и при необходимости загрузиться в предыдущее состояние.
Во время установки для первоначальной настройки используется технология ignition. Она позволяет, предварительно описав шаблоны конфигурации в ignition-файлах, без участия оператора разворачивать систему на множестве серверов локальной сети или облака. ignition-конфигурация во время установки позволяет:
- создавать пользователей;
- разбивать диски на партиции, создавать RAID-диски, инициализирвать файловые системы, монтировать их;
- создавать файлы, в том числе и конфигурационные для создания новых сервисов systemd, сетевых интерфейсов и т.п.
В ALTCOS есть специальный пользователь altcos, включенный в группы docker и wheel, то есть имеющий право запускать команды docker, sudo, podman, …. Во время первоначальной настройки через ignition можно установить пароль пользователям altcos и root. ALTCOS можно установить с помощью ISO-образа или при помощи ignition настроить qcow2.
Образы доступны на сайте altcos
Для получения образы выберите:
- Архитектуру (e.g.
x86_64
) - Репозиторий (e.g.
p10
) - Ветку (e.g.
base
)
и кликлинте на ссылку Скачать
желаемого формата в столбце загрузок.
После загрузки выбранный образ доступен на локальном компьютере (как правило в папке Загрузки домашнего директория). Формат имени файла <репозиторий>_<ветка>.<архитектура>.<версия>.<платформа>.<формат>[.xz]
.
Например: sisyphus_base.x86_64.20231114.0.0.metal.iso
ISO-образ для установки на ‘голое железо’ необходимо командой dd записать на носитель (USB или CD/DVD диск).
Сжатый qcow2 образ необходимо распаковать командой
xz -d <имя образ>.xz
QCOW2 образ используется для создания виртуальных машин в qemu/kvm и облачных платформах, поддерживающих этот формат.
Установка ALTCOS из ISO
В загрузочном меню выбрать пункт ALT Container OS.
После завершения загрузки появится приглашение для ввода логина. Необходимо зайти под пользователем root.
Пример конфигурационного файла ignition (/usr/share/altcos/config_example.ign), позволяет установить пароль “1” пользователю с именем altcos. Если требуется другой пароль, можно его сгенерировать командой:
mkpasswd --method=yescrypt
А затем заменить строку в поле passwordHash
на результат mkpasswd
При помощи 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.
Работа с контейнерами в ALTCOS
ALT Container OS поддерживает два основных режима работы с контейнерами:
- серверный — демон dockerd с клиентским приложением docker;
- бессерверный — клиентское приложение podman.
Серверный вариант позволяет клиентским приложениям (docker, …) работать с демоном dockerd как локально, так и удаленно через REST-интерфейс, но считается менее защищенным, чем бессерверный вариант podman. Бессерверный вариант podman, появившийся относительно недавно, выполняет функции сервера и работает напрямую с файловой системой. Оба клиентских приложения имеют похожий набор команд, но хранят образы и контейнеры в различных каталогах. Образы, скачанные приложением docker, недоступны приложению podman и наоборот.
Серверный вариант (docker, dockerd) удобен для проектов с небольшим числом запускаемых сервисов (не более десятка). Он позволяет запускать как отдельные контейнеры, так и по YML-файлу описания стеки сервисов как на одном сервере (через docker-compose), так и на кластере серверов (docker stack).
Бессерверный вариант (podman) позволяет запускать отдельные контейнеры и может (как и серверный вариант) использоваться в кластере kubernetes.
Примеры работы в режиме docker
Запуск контейнера
Скачайте базовый образ alt:p10:
docker pull alt:p10
Запуск команды echo и cat:
docker run --rm -i alt:p10 sh -c "echo -ne 'Hello, World '; cat /etc/altlinux-release"
Пример работы в режиме docker-compose
В данном примере разворачивается стек из двух сервисов:
- postgres — сервис базы данных postgres 13-й версии;
- pgadmin — административный WEB-интерфейс для работы с сервером.
Для запуска сервиса административного интерфейса используется официальный образ dpage/pgadmin4.
Для запуска сервера базы данных используется образ созданный из приведенного ниже Dockerfile, собранный на базе образа alt:p10:
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 build -t altcos/alt.p10-postgres:13 .
Файл docker-compose.yml для запуска сервисов: В файле docker-compose.yml для сервера базы данных задается именованный том для хранения базы данных, а также логин и пароль для работы с административным интерфейсом:
version: "3"
services:
postgres:
image: altcos/alt.p10-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 up -d
Настройка и работа с 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:
su - -c "podman pull --all-tags fanux/tetris"
Запустите игру:
su - -c "podman run --rm -it fanux/tetris game"
Подготовка конфигурационного файла ignition
Формат конфигов ignition (JSON) человекочитаемый, но сложный для написания. Удобнее писать конфиг на YAML, а затем с помощью butane преобразовывать YAML в JSON. Утилиту butane можно установить командой:
apt-get install butane
Для преобразования конфига из YAML в JSON можно использовать команду:
butane < cfg.yaml > cfg.ign
OSTree-подветки и производные подсистемы
Реализована подветка altcos/x86_64/sisyphus/k8s для развертывания kubernetes и docker-swarm-кластеров. Необходимые docker-образы для развертывания кластера включены в ostree-репозиторий. Так что для разворачивания кластеров наличие доступа в Интернет не требуется.
Примечание: Примечание: docker-swarm кластер при создании соответствующих ignition-файлов можно разворачивать и в рамках базовой ветки altcos/x86_64/sisyphus/base.
Документация по разворачиванию kubernetes и docker swarm кластеров в QEMU/KVM с использованием BTRFS-тома для хранения docker-образов и контейнеров приведена на странице ALT Container OS подветка K8S.
Документация по разворачиванию отказоустойчивого кластера kubernetes в QEMU/KVM приведена на странице ALT Container OS подветка K8S. Создание HA кластера.