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

Материал из ALT Linux Wiki
мНет описания правки
 
(не показано 20 промежуточных версий 5 участников)
Строка 1: Строка 1:
[[Категория:Руководства]]
<span id="alt-container-os"></span>
'''ALT Container OS''' ('''ALTCOS''') — дистрибутив на основе пакетной базы ''ALT Linux'', являющий аналогом ''Fedora CoreOS'', имеющий следующие особенности:
= ALT Container OS =
* минимальный набор пакетов для поддержки контейнеризации (''docker'', ''docker-compose'', ''docker swarm'', ''podman'');
 
'''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''). В дальнейшем планируется добавить поддержку потоков для других платформ и архитектур;
* поддержка потоков, для различных платформ и архитектур ALT Linux;
* автоматическое развертывание на множестве (виртуальных) машин без участия оператора;
* автоматическое развертывание на множестве (виртуальных) машин без участия оператора;
* поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность.
* поддержка различных режимов автоматического обновления дистрибутива без участия оператора, в том числе режима с согласованной перезагрузкой узлов кластера, при которой кластер сохраняет свою работоспособность.


Обновления ''ALTCOS'' выполняются с помощью ''ostree'', что позволяет обновлять систему целиком за одно действие и при необходимости загрузиться в предыдущее состояние.<br>
Обновления '''ALTCOS''' выполняются с помощью [https://ostreedev.github.io/ostree/ ostree], что позволяет обновлять систему целиком за одно действие и при необходимости загрузиться в предыдущее состояние.
Во время установки для первоначальной настройки используется технология ''ignition'' (''https://coreos.github.io/ignition/getting-started/''). Она позволяет, предварительно описав шаблоны конфигурации в ''ignition-файлах'', без участия оператора разворачивать систему на множестве серверов локальной сети или облака.
 
''Ignition-конфигурация'' во время установки позволяет:
Во время установки для первоначальной настройки используется технология [https://coreos.github.io/ignition/getting-started/ ignition]. Она позволяет, предварительно описав шаблоны конфигурации в '''ignition'''-файлах, без участия оператора разворачивать систему на множестве серверов локальной сети или облака. '''ignition'''-конфигурация во время установки позволяет:
 
* создавать пользователей;
* создавать пользователей;
* разбивать диски на партиции, создавать ''RAID-диски'', инициализирвать ''файловые системы'', монтировать их;
* разбивать диски на партиции, создавать RAID-диски, инициализирвать файловые системы, монтировать их;
* создавать файлы, в том числе и конфигурационные для создания новых ''сервисов systemd'', ''сетевых интерфейсов'' и т.п.
* создавать файлы, в том числе и конфигурационные для создания новых сервисов 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>


В ''ALTCOS'' есть специальный пользователь ''altcos'', включенный в группы ''docker'' и ''wheel'', то есть имеющий право запускать команды ''docker'', ''sudo'', ''podman'', .... Во время первоначальной настройки через ''ignition'' можно установить пароль пользователям altcos и root.<br>
ISO-образ для установки на ‘голое железо’ необходимо командой dd записать на носитель (USB или CD/DVD диск).
В настоящее время (22.10.2021) ''ALTCOS'' можно установить с помощью ''ISO-образа'' или при помощи ''ignition'' настроить ''QCOW2''.<br>
 
В дальнейшем планируется поддержка установки в различные ''облачные среды'', а также сетевой установки с использованием ''PXE''.
Сжатый qcow2 образ необходимо распаковать командой
 
<syntaxhighlight lang="sh">xz -d <имя образ>.xz</syntaxhighlight>
QCOW2 образ используется для создания виртуальных машин в qemu/kvm и облачных платформах, поддерживающих этот формат.
 
<span id="установка-altcos-из-iso"></span>
== Установка ALTCOS из ISO ==


== Получение ALTCOS-образов ==
В загрузочном меню выбрать пункт '''ALT Container OS'''. [[File:Iso-grub-menu.png|frameless|none]]


''ALTCOS-образы'' доступны на сайте https://altcos.altlinux.org/.
После завершения загрузки появится приглашение для ввода логина. Необходимо зайти под пользователем '''root'''. [[File:Iso-login.png|frameless|none]]


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


Для архитектуры ''x86_64'' поддерживаются следующие платформы:
<syntaxhighlight lang="sh">mkpasswd --method=yescrypt</syntaxhighlight>
* '''sisyphus''' - поток ''altcos/x86_64/sisyphus'';
А затем заменить строку в поле <code>passwordHash</code> на результат <code>mkpasswd</code>
* '''p10''' - поток ''altcos/x86_64/p10'';
* последующие платформы.


В дальнейшем предполагается поддержка других архитектур.
[[File:Iso-ignition-config-example.png|frameless|none]]


Кроме этого планируется механизм создания в рамках каждого потока (ветки) подветок со специализированным программным обеспечением. Например: ''altcos/x86_64/Sisyphus/k8s'' - подветка с ''kubernetes'' и т.п.
При помощи '''lsblk''' определить имя файла устройства, на которое будет выполняться установка, и передать его в качестве первого параметра скрипту '''altcos-installer.sh'''. Второй параметр — полный путь к конфигу '''ignition'''.


Технически будет возможно обеспечить механизм создания и ведения ''подветок'' пользователями ''ALTCOS''.  
[[File:Iso-altcos-installer.png|frameless|none]]


В рамках каждой платформы формируется поток версий формата ''<Поток>.<Дата>.<Мажорная_версия>.<Минорная_версия>''.
Установка выполняется на весь диск, и значит все данные, находившиеся на нем до установки, будут удалены. На предупреждение об этом следует нажать клавишу “''y''.


''Минорная_версия'' увеличивается при выходе новых версий пакетов.
[[File:Iso-altcos-installer-accept.png|frameless|none]]


''Мажорная_версия'' как и ''Дата'' увеличиваются при изменении состава пакетов образа
Установщик спросит пароль '''root'''.


В настоящее время (версия '''1.0''' - 22.10.2021) поддерживаются платформы ''sisyphus'', ''p10''.  
[[File:Iso-altcos-installer-ask-root.png|frameless|none]]


Для получения образы выберите:
Установка завершится вопросом о необходимости перезагрузки. При нажатии клавиши “''y''” будет выполнена перезагрузка.
* архитектуру;
* версию;
* тип образа (в версии '''1.0''' ''ISO'', ''QCOW2'');
* несжатый или сжатый формат
и кликните на клавишу '''Скачать'''.


После загрузки выбранный образ доступен на локальном компьютере (как правило в папке ''Загрузки'' домашнего директория). Формат имени файла ''<имя_ветки>.<тип_образа>[.xz]''
[[File:Iso-altcos-installer-reboot.png|frameless|none]]


''ISO-образ'' для установки на 'голое железо' необходимо командой '''dd''' записать на носитель (USB или CD/DVD диск).
Грузимся в установленную систему. [[File:Installed-altcos-from-iso.png|frameless|none]]


Сжатый QCOW2 образ необходимо распаковать командой<br>
Логинимся под нужным пользователем. [[File:Installed-altcos-from-iso-login.png|frameless|none]]
<tt>
xz -d <имя_ветки>.<тип_образа>.xz
</tt>


''QCOW2'' образ используется для создания виртуальных машин в  ''qemu/kvm'' и облачных платформах, поддерживающих этот формат.
<span id="запуск-altcos-из-qcow2"></span>
== Запуск ALTCOS из qcow2 ==


== Установка ALTCOS из ISO ==
При первом запуске '''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 данной ссылке]
В загрузочном меню выбрать пункт "Install ALTCOS" или дождаться, когда он будет выбран через 10 секунд по умолчанию.<br>
[[Файл:ALTCOS boot menu install.png|безрамки]]<br><br>
После завершения загрузки отображаются подсказки команд. Доступна мышь, чтобы скопировать эти команды в командную строку.<br>
[[Файл:ALTCOS install after boot.png|безрамки]]<br>
Пример конфигурационного файла ignition, полное имя которого указано в примере команды установки, позволяет установить пароль "1" пользователю с именем altcos. Если требуется другой пароль, можно его сгенерировать командой <br>
<tt>
mkpasswd --method=yescrypt
</tt>
Конфигурационный файл ignition можно загрузить доступными в установочном ISO командами scp и curl.<br>
При помощи lsblk определить имя файла устройства, на которое будет выполняться установка, и передать его в качестве первого параметра скрипту altcos-installer.sh. Второй параметр — полный путь к конфигу ignition.<br>
[[Файл:ALTCOS install lsblk.png|безрамки]]<br><br>
Установка выполняется на весь диск, и значит все данные, находившиеся на нем до установки, будут удалены. На предупреждение об этом следует нажать клавишу "y".<br>
[[Файл:ALTCOS install warning .png|безрамки]]<br><br>
Установщик спросит пароль root.<br>
[[Файл:ALTCOS install root password.png|безрамки]]<br><br>
Установка завершится вопросом о необходимости перезагрузки. При нажатии клавиши "y" будет выполнена перезагрузка.<br>
[[Файл:ALTCOS install reboot.png|безрамки]]<br><br>
Загрузиться в свежеустановленную систему можно будет, выбрав в загрузочном меню пункт загрузки с жесткого диска.<br>
[[Файл:ALTCOS install boot from 1st HDD.png|безрамки]]<br><br>
На рисунке ниже представлен результат загрузки.<br>
[[Файл:ALTCOS install result.png|безрамки]]


== Запуск ALTCOS из QCOW2 ==
[[File:Qemu-grub.png|frameless|none]]
При первом запуске ALTCOS из образа QCOW2 надо передать qemu параметр командой строки "-fw_cfg name=opt/com.coreos/config,file=/path/to/config.ign", в котором прописать путь к своему конфигурационному файлу 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<br>
[[Файл:ALTCOS QCOW2.png|безрамки]]


<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 ==
Для ручного обновления используется команда<br>
<tt>
ostree admin upgrade
</tt>
<br>
После выполнения этой команды можно посмотреть состояние. Новая загрузочная среда будет обозначена словом pending.<br>
<tt>
  [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]# </tt>
<br>
В загрузочном меню появится новый пункт меню, соответствующий новой загрузочной среде. Он будет выбран по умолчанию.<br>
[[Файл:ALTCOS upgrade boot menu.png|безрамки]]<br><br>
После перезагрузки в новую загрузочную среду старая будет обозначена словом rollback.<br>
<tt>
  [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]# </tt>


Для ручного обновления используется команда:
<syntaxhighlight lang="sh">ostree admin upgrade</syntaxhighlight>
После выполнения этой команды можно посмотреть состояние. Новая загрузочная среда будет обозначена словом '''pending'''.
<span id="работа-с-контейнерами-в-altcos"></span>
== Работа с контейнерами в ALTCOS ==
== Работа с контейнерами в ALTCOS ==
ALT Container OS поддерживает два основных режима работы с контейнерами:<br>
* серверный — демон dockerd с клиентским приложением docker;
* бессерверный — клиентское приложение podman.
<br>
Серверный вариант позволяет клиентским приложениям (docker, ...) работать с демоном dockerd как локально, так и удаленно через REST-интерфейс, но считается менее защищенным, чем бессерверный вариант podman.<br>
Бессерверный вариант podman, появившийся относительно недавно, выполняет функции сервера и работает напрямую с файловой системой.<br>
Оба клиентских приложения имеют похожий набор команд, но хранят образы и контейнеры в различных каталогах. Образы, скачанные приложением docker, недоступны приложению podman и наоборот.<br>
<br>
Серверный вариант (docker, dockerd) удобен для  проектов с небольшим числом запускаемых сервисов (не более десятка). <br>
Он позволяет запускать как отдельные контейнеры, так и по YML-файлу описания стеки сервисов как на одном сервере (через docker-compose), так и на кластере серверов (docker stack).<br>
<br>
Бессерверный вариант (podman) позволяет запускать отдельные контейнеры и может (как и серверный вариант) использоваться в кластере kubernetes.<br>


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 ===
==== Запуск контейнера ====
Скачайте базовый образ платформы 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"
 
Скачайте базовый образ '''alt:p10''':
Привет из docker-контейнера ALT p8 starter kit (Hypericum)
 
<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'''


==== Пример работы в режиме docker-compose ====
В данном примере разворачивается стек из двух сервисов:
В данном примере разворачивается стек из двух сервисов:
* postgres — сервис базы данных postgres 13-й версии;
* pgadmin — административный WEB-интерфейс для работы с сервером.
Для запуска сервиса административного интерфейса используется официальный образ dpage/pgadmin4. <br>
Для запуска сервера базы данных используется образ kafnevod/alt.p8-postgres:13, собранный на базе образа alt:p10. <br>
Для сборки образа kafnevod/alt.p8-postgres:13 использовался следующий Dockerfile:<br>
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
<br>
В переменной PGPASS задается пароль администатора базы данных postgres. После установки пакета  postgresql13-server в файлах конфигурации включается прием соединения по протоколу TCP/IP и авторизацию md5.<br>
===== Файл 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:


* '''postgres''' — сервис базы данных '''postgres''' 13-й версии;
* '''pgadmin''' — административный '''WEB'''-интерфейс для работы с сервером.


Для запуска сервиса административного интерфейса используется официальный образ '''dpage/pgadmin4'''.


===== Запуск сервисов =====
Для запуска сервера базы данных используется образ созданный из приведенного ниже '''Dockerfile''', собранный на базе образа '''alt:p10''':
Сервисы запускаются командой 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


<syntaxhighlight lang="dockerfile">FROM alt:p10


===== Настройка и работа с pgadmin4 через WEB-интерфейс =====
ENV PGPASS=q1w2e3
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):<br>
[[Файл:ALTCOS examples pgadmin.png|безрамки]]<br>
В поле Login введите значение переменной _PGADMIN_DEFAULT_EMAIL, в поле пароля значение переменной PGADMIN_DEFAULT_PASSWORD файла docker-compose.yml.<br>
[[Файл:ALTCOS examples pgadmin2.png|безрамки]]<br>
В закладке General в поле Name введите имя базы данных: postgres.<br>
[[Файл:ALTCOS examples pgadmin3.png|безрамки]]<br>
В закладке Connection
* в поле Host введите имя сервиса postgres файла docker-compose.yml;
* в полях Maintenance database, Username имя базы (postgres) и имя пользователя (postgres)
* в поле Password значение переменной  PGPASS файла Dockerfile.


После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.<br>
RUN \
[[Файл:ALTCOS examples pgadmin4.png|безрамки]]
  apt-get update; \
  apt-get install -y postgresql13-server;


=== Пример работы в режиме podman ===
RUN \
Скачайте образ fanux/tetris
  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'; \
$ sudo podman pull --all-tags fanux/tetris
  sed -i -e "/^#listen_addresses/a\
Trying to pull docker.io/fanux/tetris:latest...  
listen_addresses = '*'" /var/lib/pgsql/data/postgresql.conf; \
Getting image source signatures
  echo "host all all 0.0.0.0/0 md5" >> /var/lib/pgsql/data/pg_hba.conf
Copying blob 08d48e6f1cff done    
 
Copying blob abf1e846b79b done 
CMD  exec su -c "/usr/bin/postgres -D /var/lib/pgsql/data $POSTGRES_PARAMS" -s /bin/sh postgres</syntaxhighlight>
Copying blob 92f626025fce done 
В переменной '''PGPASS''' задается пароль администатора базы данных '''postgres'''. После установки пакета '''postgresql13-server''' в файлах конфигурации включается прием соединения по протоколу '''TCP/IP''' и авторизацию '''md5'''.
Copying blob 5bd1005002cc done 
 
Copying config 82f6127899 done    
Сборка:
Writing manifest to image destination
 
Storing signatures
<syntaxhighlight lang="sh">docker build -t altcos/alt.p10-postgres:13 .</syntaxhighlight>
82f61278995f8c959b38174bc66bc053289cbb68cc47b2edca1ff10fafe28828
'''Файл 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>
$ sudo podman run --rm -it fanux/tetris game
'''Настройка и работа с pgadmin4 через WEB-интерфейс'''


[[Файл:ALTCOS examples tetris.png|безрамки]]
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):


== Подготовка конфигурационного файла ignition ==
[[File:Pgadmin-login.png|frameless|none]]
Формат конфигов ignition (JSON) человекочитаемый, но сложный для написания. Удобнее писать конфиг на YAML, а затем с помощью butane (https://coreos.github.io/butane/) преобразовывать YAML в JSON. Утилиту butane можно установить командой
apt-get install butane


Для преобразования конфига из YAML в JSON можно использовать команду
В поле Login введите значение переменной '''PGADMIN_DEFAULT_EMAIL''', в поле пароля значение переменной '''PGADMIN_DEFAULT_PASSWORD''' файла '''docker-compose.yml'''.
butane < cfg.yaml > cfg.ign


== Описание подготовленных файлов конфигурации для установки ALTCOS ==
[[File:Pgadmin-general.png|frameless|none]] Во вкладке '''General''' в поле '''Name''' введите имя базы данных: '''postgres'''.


В каталоге <tt>/configs/</tt> сайта <tt>https://altcos.altlinux.org/</tt> размещены подготовленные
[[File:Pgadmin-connection.png|frameless|none]] Во вкладке '''Connection''' - в поле '''Host''' введите имя сервиса '''postgres''' файла '''docker-compose.yml'''; - в полях '''Maintenance database''', '''Username''' имя базы ('''postgres''') и имя пользователя ('''postgres''') - в поле '''Password''' значение переменной '''PGPASS''' файла '''Dockerfile'''.
файлы конфигурации для установки ACOS. Он содержит следующие подкаталоги:
* <tt>butane</tt> - человекочитаемые файлы конфигурации в формате <tt>butane</tt>. Суффикс <tt>.btn</tt>. 
* <tt>ignition</tt> - соответствующие файлы конфигурации в формате <tt>ignition</tt>. Суффикс <tt>.ign</tt>.


В настоящий момент в нем находятся следующие файлы конфигураций:
После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.
* users - указание пароля и открытого ключа для пользователя altcos, создание пользователя user;
* containers - установка файлов для запуска описанных примеров для работы с контейнерами;
* storage - форматирование второго диска и монтирование его в каталог /var/lib/docker


=== users - описание пользователей ===
[[File:Pgadmin-at-work.png|frameless|none]]


Файлы конфигурации:
<span id="пример-работы-в-режиме-podman"></span>
* [https://altcos.altlinux.org/configs/butane/users.btn butane]
=== Пример работы в режиме podman ===
* [https://altcos.altlinux.org/configs/ignition/users.ign ignition]


Конфигурация:
Скачайте образ '''fanux/tetris''':
* задает пароль пользователя <tt>altcos</tt> (<tt>1</tt>), добавляет один открытый ключ;
* добавляем пользователя <tt>user</tt> (пароль <tt>012345</tt>), добавляет один открытый ключ.


Вы можете скорректировать пароли и список открытых ключей для указанных пользователей,
<syntaxhighlight lang="sh">su - -c "podman pull --all-tags fanux/tetris" </syntaxhighlight>
добавить новых пользователей и т.д. 
Запустите игру:


=== containers - установка файлов для запуска описанных примеров для работы с контейнерами===
<syntaxhighlight lang="sh">su - -c "podman run --rm -it fanux/tetris game"</syntaxhighlight>
[[File:Podman-tetris.png|frameless|none]]


Файлы конфигурации:
<span id="подготовка-конфигурационного-файла-ignition"></span>
* [https://altcos.altlinux.org/configs/butane/containers.btn butane]
=== Подготовка конфигурационного файла ''ignition'' ===
* [https://altcos.altlinux.org/configs/ignition/containers.ign ignition]


Использовав во время установки ignition-файл https://altcos.altlinux.org/configs/ignition/containers.ign
Формат конфигов '''ignition''' ('''JSON''') человекочитаемый, но сложный для написания. Удобнее писать конфиг на '''YAML''', а затем с помощью [https://coreos.github.io/butane/ butane] преобразовывать '''YAML''' в '''JSON'''. Утилиту butane можно установить командой:
Вы в домашнем каталоге пользователя altcos получаете развернутое дерево для запуска описанных выше примеров запуска контейнеров.
<tt>
/var/home/altcos/
`-- examples
    `-- docker
        |-- docker
        |  `-- hello.sh
        |-- docker-compose
        |  |-- docker-compose.yml
        |  |-- start.sh
        |  `-- stop.sh
        `-- podman
            `-- tetris.sh
</tt>
* ''/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 ===
<syntaxhighlight lang="sh">apt-get install butane</syntaxhighlight>
Для преобразования конфига из '''YAML''' в '''JSON''' можно использовать команду:


Файлы конфигурации:
<syntaxhighlight lang="sh">butane < cfg.yaml > cfg.ign</syntaxhighlight>
* [https://altcos.altlinux.org/configs/butane/storage.btn butane]
<span id="ostree-подветки-и-производные-подсистемы"></span>
* [https://altcos.altlinux.org/configs/ignition/storage.ign ignition]
=== OSTree-подветки и производные подсистемы ===


Как правило при установке ALTCOS корневая файловая система имееет небольшой объем (несколлько гигабайт).
Реализована подветка '''altcos/x86_64/sisyphus/k8s''' для развертывания '''kubernetes''' и '''docker-swarm'''-кластеров. Необходимые '''docker'''-образы для развертывания кластера включены в '''ostree'''-репозиторий. Так что для разворачивания кластеров наличие доступа в Интернет не требуется.
Это недостаточно для развертывания множество docker-контейнеров, располагающихся
в каталогах <tt>/usr/lib/docker</tt>,  <tt>/usr/lib/containers</tt>.


В этой ситуации целесообразно примонтировать общий каталог <tt>/var/lib</tt> на отдельный диск достаточного для разворачивания контейнеров объемы.
'''Примечание''': Примечание: '''docker-swarm''' кластер при создании соответствующих '''ignition'''-файлов можно разворачивать и в рамках базовой ветки '''altcos/x86_64/sisyphus/base'''.


В указанном примере на втором доступном диске <tt>/dev/sdb</tt>
Документация по разворачиванию ''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]'''.
* создается единственный раздел <tt>/dev/sdb1</tt>, занимающий весь диск
* создается файловая система формата <tt>ext4</tt>;
* созданная файловая система монтируется на каталог <tt>/var/lib/</tt>.


Обратите внимание - при наличие параметра <tt>with_mount_unit: true</tt> в элемента <tt>storage.filesystem</tt>
Документация по разворачиванию отказоустойчивого кластера ''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 кластера]'''.
файла формата butane, в файле формата ignition создается дополнительный элемент <tt>systemd.units</tt>, обеспечивающий монтирование созданной файловой системы.

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