ALT Container OS: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
мНет описания правки
 
(не показаны 54 промежуточные версии 7 участников)
Строка 1: Строка 1:
[[Категория:Руководства]]
<span id="alt-container-os"></span>
ALT Container OS (ALTCOS) — дистрибутив на основе пакетной базы ALT Linux, являющий аналогом Fedora CoreOS,  имеющий следующие особенности:
= ALT Container OS =
    • минимальный набор пакетов для поддержки контейнеризации (docker, podman);
    • монолитность — атомарные обновления с возможностью отката на предыдущую версию;
    • поддержка потоков, отличающихся по репозиториям ALT Linux и архитектурам. На данный момент (27.09.2021) поддерживается только поток altcos/x86_64/sisyphus (архитектура x86_64, репозиторий sisyphus). В дальнейшем планируется добавить потоки для других архитектур и репозитория p10;
    • автоматическое развертывание на множестве (виртуальных) машин без участия оператора;
    • поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность.


Обновления ALTCOS выполняются с помощью ostree, что позволяет обновить систему целиком за одно действие и при необходимости загрузиться в предыдущее состояние.<br>
'''ALT Container OS (ALTCOS)''' — дистрибутив на основе пакетной базы '''ALT Linux''', являющий аналогом '''Fedora CoreOS''', имеющий следующие особенности:
Во время установки для первоначальной настройки используется технология ignition (https://coreos.github.io/ignition/getting-started/).  Она позволяет, предварительно описав шаблоны конфигурации (пользователей, сетевые настройки, запускаемые сервисы, …) в ignition-файлах, без участия оператора разворачивать систему на множестве серверов локальной сети или облака.<br>
В ALTCOS есть специальный пользователь altcos, включенный в группы docker и wheel, то есть имеющий право запускать команды docker и sudo. Во время первоначальной настройки через ignition можно установить пароль пользователям altcos и root.<br>
В настоящее время (27.09.2021) ALTCOS можно [[Установка ALTCOS из ISO|установить с помощью ISO-образа]] или при помощи ignition [[Запуск ALTCOS из QCOW2|настроить QCOW2]].<br>
В дальнейшем планируется поддержка установки в различные облачные среды, а также сетевой установки с использованием PXE.<br>


[[Автоматическое обновление ALTCOS]]
* минимальный набор пакетов для поддержки контейнеризации (docker, docker-compose, docker swarm, podman);
[[Ручное обновление ALTCOS]]
* малый объем занимаемый на диске ~1.2GB;
* минимальное время (пере)загрузки системы - несколько секунд;
* повышенная защищенность за счет монтирования в режиме ТОЛЬКО НА ЧТЕНИЕ системных каталогов;
* монолитность — атомарные обновления с возможностью отката на предыдущую версию;
* поддержка потоков, для различных платформ и архитектур ALT Linux;
* автоматическое развертывание на множестве (виртуальных) машин без участия оператора;
* поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность.
 
Обновления '''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>&lt;репозиторий&gt;_&lt;ветка&gt;.&lt;архитектура&gt;.&lt;версия&gt;.&lt;платформа&gt;.&lt;формат&gt;[.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 ==
 
После загрузки системы запускается сервис [https://coreos.github.io/zincati/ zincati], контролирующий наличие новых версий установленного потока (altcos/x86_64/sisyphus/'', altcos/x86_64/p10/'', …). При появлении новой версии происходит ее автоматическая загрузка и, в зависимости от режима, перезагрузка системы. Поддерживаются следующие режимы перезагрузки:
* Немедленная. Если в системе нет пользователей — немедленная перезагрузка. Если есть — рассылка сообщений пользователям, ожидание их выхода и перезагрузка после их выхода или через 10 минут.
* По расписанию. Перезагрузка происходит в указанный интервал времени.
* Согласованная. Перезагрузка производится с участием центрального сервиса, контролирующего порядок перезагрузки серверов кластера для минимизации времени простоя ключевых сервисов.
 
[https://coreos.github.io/zincati/usage/updates-strategy/ настройка обновлений zincati]
 
<span id="ручное-обновление-altcos"></span>
 
== Ручное обновление ALTCOS ==
 
Для ручного обновления используется команда:
 
<syntaxhighlight lang="sh">ostree admin upgrade</syntaxhighlight>
После выполнения этой команды можно посмотреть состояние. Новая загрузочная среда будет обозначена словом '''pending'''.
 
<span id="работа-с-контейнерами-в-altcos"></span>
== Работа с контейнерами в 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 ===
 
'''Запуск контейнера'''
 
Скачайте базовый образ '''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 кластера]'''.

Текущая версия от 13: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

Altcos-index-page.png

Для получения образы выберите:

  • Архитектуру (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.

Iso-grub-menu.png

После завершения загрузки появится приглашение для ввода логина. Необходимо зайти под пользователем root.

Iso-login.png

Пример конфигурационного файла ignition (/usr/share/altcos/config_example.ign), позволяет установить пароль “1” пользователю с именем altcos. Если требуется другой пароль, можно его сгенерировать командой:

mkpasswd --method=yescrypt

А затем заменить строку в поле passwordHash на результат mkpasswd

Iso-ignition-config-example.png

При помощи lsblk определить имя файла устройства, на которое будет выполняться установка, и передать его в качестве первого параметра скрипту altcos-installer.sh. Второй параметр — полный путь к конфигу ignition.

Iso-altcos-installer.png

Установка выполняется на весь диск, и значит все данные, находившиеся на нем до установки, будут удалены. На предупреждение об этом следует нажать клавишу “y”.

Iso-altcos-installer-accept.png

Установщик спросит пароль root.

Iso-altcos-installer-ask-root.png

Установка завершится вопросом о необходимости перезагрузки. При нажатии клавиши “y” будет выполнена перезагрузка.

Iso-altcos-installer-reboot.png

Грузимся в установленную систему.

Installed-altcos-from-iso.png

Логинимся под нужным пользователем.

Installed-altcos-from-iso-login.png

Запуск ALTCOS из qcow2

При первом запуске ALTCOS из образа qcow2 надо передать qemu параметр командой строки -fw_cfg name=opt/com.coreos/config,file=/path/to/config.ign, в котором прописать путь к своему конфигурационному файлу ignition. Пример конфига, в котором устанавливается пароль пользователя altcos можно найти по данной ссылке

Qemu-grub.png

Автоматическое обновление ALTCOS

После загрузки системы запускается сервис zincati, контролирующий наличие новых версий установленного потока (altcos/x86_64/sisyphus/, altcos/x86_64/p10/, …). При появлении новой версии происходит ее автоматическая загрузка и, в зависимости от режима, перезагрузка системы. Поддерживаются следующие режимы перезагрузки:

  • Немедленная. Если в системе нет пользователей — немедленная перезагрузка. Если есть — рассылка сообщений пользователям, ожидание их выхода и перезагрузка после их выхода или через 10 минут.
  • По расписанию. Перезагрузка происходит в указанный интервал времени.
  • Согласованная. Перезагрузка производится с участием центрального сервиса, контролирующего порядок перезагрузки серверов кластера для минимизации времени простоя ключевых сервисов.

настройка обновлений zincati

Ручное обновление 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
Altcos-docker-pull-p10.png

Запуск команды echo и cat:

docker run --rm -i alt:p10 sh -c "echo -ne 'Hello, World '; cat /etc/altlinux-release"
Altcos-docker-run-p10-echo.png

Пример работы в режиме 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 наружу):

Pgadmin-login.png

В поле Login введите значение переменной PGADMIN_DEFAULT_EMAIL, в поле пароля значение переменной PGADMIN_DEFAULT_PASSWORD файла docker-compose.yml.

Pgadmin-general.png

Во вкладке General в поле Name введите имя базы данных: postgres.

Pgadmin-connection.png

Во вкладке Connection - в поле Host введите имя сервиса postgres файла docker-compose.yml; - в полях Maintenance database, Username имя базы (postgres) и имя пользователя (postgres) - в поле Password значение переменной PGPASS файла Dockerfile.

После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.

Pgadmin-at-work.png

Пример работы в режиме podman

Скачайте образ fanux/tetris:

su - -c "podman pull --all-tags fanux/tetris"

Запустите игру:

su - -c "podman run --rm -it fanux/tetris game"
Podman-tetris.png

Подготовка конфигурационного файла 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 кластера.