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

Материал из ALT Linux Wiki
мНет описания правки
 
(не показано 12 промежуточных версий 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;
* малый объем занимаемый на диске ~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>.


В ''ALTCOS'' есть специальный пользователь ''altcos'', включенный в группы ''docker'' и ''wheel'', то есть имеющий право запускать команды ''docker'', ''sudo'', ''podman'', .... Во время первоначальной настройки через ''ignition'' можно установить пароль пользователям altcos и root.<br>
Например: <code>sisyphus_base.x86_64.20231114.0.0.metal.iso</code>
В настоящее время (22.10.2021) ''ALTCOS'' можно установить с помощью ''ISO-образа'' или при помощи ''ignition'' настроить ''QCOW2''.<br>
В дальнейшем планируется поддержка установки в различные ''облачные среды'', а также сетевой установки с использованием ''PXE''.


== Получение ALTCOS-образов ==
ISO-образ для установки на ‘голое железо’ необходимо командой dd записать на носитель (USB или CD/DVD диск).


''ALTCOS-образы'' доступны на сайте https://altcos.altlinux.org/.
Сжатый qcow2 образ необходимо распаковать командой


[[Файл:UserInterface.png|безрамки]]
<syntaxhighlight lang="sh">xz -d <имя образ>.xz</syntaxhighlight>
QCOW2 образ используется для создания виртуальных машин в qemu/kvm и облачных платформах, поддерживающих этот формат.


Для архитектуры ''x86_64'' поддерживаются следующие платформы:
<span id="установка-altcos-из-iso"></span>
* '''sisyphus''' - поток ''altcos/x86_64/sisyphus'';
== Установка ALTCOS из ISO ==
* '''p10''' - поток ''altcos/x86_64/p10'';
* последующие платформы.


В дальнейшем предполагается поддержка других архитектур.
В загрузочном меню выбрать пункт '''ALT Container OS'''. [[File:Iso-grub-menu.png|frameless|none]]


Кроме этого планируется механизм создания в рамках каждого потока (ветки) подветок со специализированным программным обеспечением. Например: ''altcos/x86_64/Sisyphus/k8s'' - подветка с ''kubernetes'' и т.п.
После завершения загрузки появится приглашение для ввода логина. Необходимо зайти под пользователем '''root'''. [[File:Iso-login.png|frameless|none]]


Технически будет возможно обеспечить механизм создания и ведения ''подветок'' пользователями ''ALTCOS''.  
Пример конфигурационного файла '''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'''.


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


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


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


''ISO-образ'' для установки на 'голое железо' необходимо командой '''dd''' записать на носитель (USB или CD/DVD диск).
Установщик спросит пароль '''root'''.


Сжатый QCOW2 образ необходимо распаковать командой<br>
[[File:Iso-altcos-installer-ask-root.png|frameless|none]]
<tt>
xz -d <имя_ветки>.<тип_образа>.xz
</tt>


''QCOW2'' образ используется для создания виртуальных машин в  ''qemu/kvm'' и облачных платформах, поддерживающих этот формат.
Установка завершится вопросом о необходимости перезагрузки. При нажатии клавиши “''y''” будет выполнена перезагрузка.


== Установка ALTCOS из ISO ==
[[File:Iso-altcos-installer-reboot.png|frameless|none]]
В загрузочном меню выбрать пункт "Install ALTCOS" или дождаться, когда он будет выбран через 10 секунд по умолчанию.<br>
 
[[Файл:ALTCOS boot menu install.png|безрамки]]<br><br>
Грузимся в установленную систему. [[File:Installed-altcos-from-iso.png|frameless|none]]
После завершения загрузки отображаются подсказки команд. Доступна мышь, чтобы скопировать эти команды в командную строку.<br>
 
[[Файл:ALTCOS install after boot.png|безрамки]]<br>
Логинимся под нужным пользователем. [[File:Installed-altcos-from-iso-login.png|frameless|none]]
Пример конфигурационного файла ignition, полное имя которого указано в примере команды установки, позволяет установить пароль "1" пользователю с именем altcos. Если требуется другой пароль, можно его сгенерировать командой <br>
 
<tt>
<span id="запуск-altcos-из-qcow2"></span>
mkpasswd --method=yescrypt
== Запуск ALTCOS из qcow2 ==
</tt>
 
Конфигурационный файл ignition можно загрузить доступными в установочном ISO командами scp и curl.<br>
При первом запуске '''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 данной ссылке]
При помощи 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''':
<syntaxhighlight lang="dockerfile">FROM alt:p10


ENV PGPASS=q1w2e3


===== Запуск сервисов =====
RUN \
Сервисы запускаются командой docker-compose:
  apt-get update; \
$ docker-compose up -d
  apt-get install -y postgresql13-server;
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


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


===== Настройка и работа с pgadmin4 через WEB-интерфейс =====
CMD  exec su -c "/usr/bin/postgres -D /var/lib/pgsql/data $POSTGRES_PARAMS" -s /bin/sh postgres</syntaxhighlight>
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):<br>
В переменной '''PGPASS''' задается пароль администатора базы данных '''postgres'''. После установки пакета '''postgresql13-server''' в файлах конфигурации включается прием соединения по протоколу '''TCP/IP''' и авторизацию '''md5'''.
[[Файл: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>
Сборка:
[[Файл:ALTCOS examples pgadmin4.png|безрамки]]


=== Пример работы в режиме podman ===
<syntaxhighlight lang="sh">docker build -t altcos/alt.p10-postgres:13 .</syntaxhighlight>
Скачайте образ  fanux/tetris
'''Файл docker-compose.yml для запуска сервисов:''' В файле '''docker-compose.yml''' для сервера базы данных задается именованный том для хранения базы данных, а также логин и пароль для работы с административным интерфейсом:
$ sudo podman pull --all-tags fanux/tetris
Trying to pull docker.io/fanux/tetris:latest...
Getting image source signatures
Copying blob 08d48e6f1cff done 
Copying blob abf1e846b79b done 
Copying blob 92f626025fce done 
Copying blob 5bd1005002cc done 
Copying config 82f6127899 done 
Writing manifest to image destination
Storing signatures
82f61278995f8c959b38174bc66bc053289cbb68cc47b2edca1ff10fafe28828


Запустите игру
<syntaxhighlight lang="yaml">version: "3"
$ sudo podman run --rm -it fanux/tetris game


[[Файл:ALTCOS examples tetris.png|безрамки]]
services:
  postgres:
    image: altcos/alt.p10-postgres:13
    volumes:
      - DB:/var/lib/pgsql/data


== Подготовка конфигурационного файла ignition ==
  pgadmin:
Формат конфигов ignition (JSON) человекочитаемый, но сложный для написания. Удобнее писать конфиг на YAML, а затем с помощью butane (https://coreos.github.io/butane/) преобразовывать YAML в JSON. Утилиту butane можно установить командой
    image: dpage/pgadmin4
apt-get install butane
    environment:
      - PGADMIN_DEFAULT_EMAIL=test@altcos.altlinux.org
      - PGADMIN_DEFAULT_PASSWORD=Secret
    ports:
      - 80:80


Для преобразования конфига из YAML в JSON можно использовать команду
volumes:
butane < cfg.yaml > cfg.ign
  DB:</syntaxhighlight>
'''Запуск сервисов'''


== Описание подготовленных файлов конфигурации для установки ALTCOS ==
<syntaxhighlight lang="sh">docker compose up -d</syntaxhighlight>
'''Настройка и работа с pgadmin4 через WEB-интерфейс'''


В каталоге <tt>/configs/</tt> сайта <tt>https://altcos.altlinux.org/</tt> размещены подготовленные
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):
файлы конфигурации для установки ACOS. Он содержит следующие подкаталоги:
* <tt>butane</tt> - человекочитаемые файлы конфигурации в формате <tt>butane</tt>. Суффикс <tt>.btn</tt>. 
* <tt>ignition</tt> - соответствующие файлы конфигурации в формате <tt>ignition</tt>. Суффикс <tt>.ign</tt>.


В настоящий момент в нем находятся следующие файлы конфигураций:
[[File:Pgadmin-login.png|frameless|none]]
* users - указание пароля и открытого ключа для пользователя altcos, создание пользователя user;
* containers - установка файлов для запуска описанных примеров для работы с контейнерами;
* storage - форматирование второго диска и монтирование его в каталог /var/lib/docker


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


Файлы конфигурации:
[[File:Pgadmin-general.png|frameless|none]] Во вкладке '''General''' в поле '''Name''' введите имя базы данных: '''postgres'''.
* [https://altcos.altlinux.org/configs/butane/users.btn butane]
* [https://altcos.altlinux.org/configs/ignition/users.ign ignition]


Конфигурация:
[[File:Pgadmin-connection.png|frameless|none]] Во вкладке '''Connection''' - в поле '''Host''' введите имя сервиса '''postgres''' файла '''docker-compose.yml'''; - в полях '''Maintenance database''', '''Username''' имя базы ('''postgres''') и имя пользователя ('''postgres''') - в поле '''Password''' значение переменной '''PGPASS''' файла '''Dockerfile'''.
* задает пароль пользователя <tt>altcos</tt> (<tt>1</tt>), добавляет один открытый ключ;
* добавляем пользователя <tt>user</tt> (пароль <tt>012345</tt>), добавляет один открытый ключ.


Вы можете скорректировать пароли и список открытых ключей для указанных пользователей,
После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.
добавить новых пользователей и т.д. 


=== containers - установка файлов для запуска описанных примеров для работы с контейнерами===
[[File:Pgadmin-at-work.png|frameless|none]]


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


Использовав во время установки ignition-файл https://altcos.altlinux.org/configs/ignition/containers.ign
Скачайте образ '''fanux/tetris''':
Вы в домашнем каталоге пользователя 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">su - -c "podman pull --all-tags fanux/tetris" </syntaxhighlight>
Запустите игру:


Файлы конфигурации:
<syntaxhighlight lang="sh">su - -c "podman run --rm -it fanux/tetris game"</syntaxhighlight>
* [https://altcos.altlinux.org/configs/butane/storage.btn butane]
[[File:Podman-tetris.png|frameless|none]]
* [https://altcos.altlinux.org/configs/ignition/storage.ign ignition]


Как правило при установке ALTCOS корневая файловая система имееет небольшой объем (несколлько гигабайт).
<span id="подготовка-конфигурационного-файла-ignition"></span>
Это недостаточно для развертывания множество docker-контейнеров, располагающихся
=== Подготовка конфигурационного файла ''ignition'' ===
в каталогах <tt>/usr/lib/docker</tt><tt>/usr/lib/containers</tt>.


В этой ситуации целесообразно примонтировать общий каталог <tt>/var/lib</tt> на отдельный диск достаточного для разворачивания контейнеров объемы.
Формат конфигов '''ignition''' ('''JSON''') человекочитаемый, но сложный для написания. Удобнее писать конфиг на '''YAML''', а затем с помощью [https://coreos.github.io/butane/ butane] преобразовывать '''YAML''' в '''JSON'''. Утилиту butane можно установить командой:


В указанном примере на втором доступном диске <tt>/dev/sdb</tt>
<syntaxhighlight lang="sh">apt-get install butane</syntaxhighlight>
* создается единственный раздел <tt>/dev/sdb1</tt>, занимающий весь диск
Для преобразования конфига из '''YAML''' в '''JSON''' можно использовать команду:
* создается файловая система формата <tt>ext4</tt>;
* созданная файловая система монтируется на каталог <tt>/var/lib/</tt>.


Обратите внимание - при наличие параметра <tt>with_mount_unit: true</tt> в элемента <tt>storage.filesystem</tt>
<syntaxhighlight lang="sh">butane < cfg.yaml > cfg.ign</syntaxhighlight>
файла формата butane, в файле формата ignition создается дополнительный элемент <tt>systemd.units</tt>, обеспечивающий монтирование созданной файловой системы.
<span id="ostree-подветки-и-производные-подсистемы"></span>
=== OSTree-подветки и производные подсистемы ===


== OSTREE-подветки и производные подсистемы ==
Реализована подветка '''altcos/x86_64/sisyphus/k8s''' для развертывания '''kubernetes''' и '''docker-swarm'''-кластеров. Необходимые '''docker'''-образы для развертывания кластера включены в '''ostree'''-репозиторий. Так что для разворачивания кластеров наличие доступа в Интернет не требуется.


На настоящий момент (2.12.2021) реализована подветка ''altcos/x86_64/Sisyphus/k8s'' для развертывания kubernetes-кластера. Необходимые docker-образы для развертывания кластера включены в ostree-репозиторий. Так что для разворачивания кластера наличие доступа в Интернет не требуется.  
'''Примечание''': Примечание: '''docker-swarm''' кластер при создании соответствующих '''ignition'''-файлов можно разворачивать и в рамках базовой ветки '''altcos/x86_64/sisyphus/base'''.


Документация по разворачиванию ''kubernetes'' и ''docker swarm'' кластеров в ''QEMU/KVM'' с использованием ''BTRFS-тома'' для хранения ''docker-образов'' и ''контейнеров'' приведена на странице  
Документация по разворачиванию ''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]'''.
[https://www.altlinux.org/ALT_Container_OS_%D0%BF%D0%BE%D0%B4%D0%B2%D0%B5%D1%82%D0%BA%D0%B0_K8S ALT Container OS подветка K8S].
До конца 2021 года планируется выпуск подветки ''altcos/x86_64/P10/k8s''.


В начале 2022 года планируется поддержка разворачивания среды ''openshift'' на ostree-дистрибутивах ''ALTCOS''.
Документация по разворачиванию отказоустойчивого кластера ''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 кластера.