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

Материал из ALT Linux Wiki
мНет описания правки
 
(не показано 7 промежуточных версий 4 участников)
Строка 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.<br>
В '''ALTCOS''' есть специальный пользователь '''altcos''', включенный в группы '''docker''' и '''wheel''', то есть имеющий право запускать команды '''docker''', '''sudo''', '''podman''', . Во время первоначальной настройки через '''ignition''' можно установить пароль пользователям '''altcos''' и '''root'''. '''ALTCOS''' можно установить с помощью '''ISO'''-образа или при помощи '''ignition''' настроить '''qcow2'''.
В настоящее время (22.10.2021) ''ALTCOS'' можно установить с помощью ''ISO-образа'' или при помощи ''ignition'' настроить ''QCOW2''.<br>
В дальнейшем планируется поддержка установки в различные ''облачные среды'', а также сетевой установки с использованием ''PXE''.


== Получение ALTCOS-образов ==
<span id="образы-доступны-на-сайте-altcos"></span>
== Образы доступны на сайте [https://altcos.altlinux.org/ altcos] ==


''ALTCOS-образы'' доступны на сайте https://altcos.altlinux.org/.
[[File:Altcos-index-page.png|frameless|none]]


[[Файл:UserInterface.png|безрамки]]
Для получения образы выберите:  
* Архитектуру (e.g. <code>x86_64</code>)
* Репозиторий (e.g. <code>p10</code>)
* Ветку (e.g. <code>base</code>)


Для архитектуры ''x86_64'' поддерживаются следующие платформы:
и кликлинте на ссылку <code>Скачать</code> желаемого формата в столбце загрузок.
* '''sisyphus''' - поток ''altcos/x86_64/sisyphus'';
* '''p10''' - поток ''altcos/x86_64/p10'';
* последующие платформы.


В дальнейшем предполагается поддержка других архитектур.
После загрузки выбранный образ доступен на локальном компьютере (как правило в папке Загрузки домашнего директория). Формат имени файла <code>&lt;репозиторий&gt;_&lt;ветка&gt;.&lt;архитектура&gt;.&lt;версия&gt;.&lt;платформа&gt;.&lt;формат&gt;[.xz]</code>.


Кроме этого планируется механизм создания в рамках каждого потока (ветки) подветок со специализированным программным обеспечением. Например: ''altcos/x86_64/Sisyphus/k8s'' - подветка с ''kubernetes'' и т.п.
Например: <code>sisyphus_base.x86_64.20231114.0.0.metal.iso</code>


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


В рамках каждой платформы формируется поток версий формата ''<Поток>.<Дата>.<Мажорная_версия>.<Минорная_версия>''.
Сжатый qcow2 образ необходимо распаковать командой


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


''Мажорная_версия'' как и ''Дата'' увеличиваются при изменении состава пакетов образа
<span id="установка-altcos-из-iso"></span>
== Установка ALTCOS из ISO ==


В настоящее время (версия '''1.0''' - 22.10.2021) поддерживаются платформы ''sisyphus'', ''p10''.  
В загрузочном меню выбрать пункт '''ALT Container OS'''. [[File:Iso-grub-menu.png|frameless|none]]


Для получения образы выберите:
После завершения загрузки появится приглашение для ввода логина. Необходимо зайти под пользователем '''root'''. [[File:Iso-login.png|frameless|none]]
* архитектуру;
* версию;
* тип образа (в версии '''1.0''' ''ISO'', ''QCOW2'');
* несжатый или сжатый формат
и кликните на клавишу '''Скачать'''.


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


''ISO-образ'' для установки на 'голое железо' необходимо командой '''dd''' записать на носитель (USB или CD/DVD диск).
<syntaxhighlight lang="sh">mkpasswd --method=yescrypt</syntaxhighlight>
А затем заменить строку в поле <code>passwordHash</code> на результат <code>mkpasswd</code>


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


''QCOW2'' образ используется для создания виртуальных машин в ''qemu/kvm'' и облачных платформах, поддерживающих этот формат.
При помощи '''lsblk''' определить имя файла устройства, на которое будет выполняться установка, и передать его в качестве первого параметра скрипту '''altcos-installer.sh'''. Второй параметр — полный путь к конфигу '''ignition'''.


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


== Запуск 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
Сервисы запускаются командой 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


RUN \
  apt-get update; \
  apt-get install -y postgresql13-server;


===== Настройка и работа с pgadmin4 через WEB-интерфейс =====
RUN \
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):<br>
  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'; \
[[Файл:ALTCOS examples pgadmin.png|безрамки]]<br>
  sed -i -e "/^#listen_addresses/a\
В поле Login введите значение переменной _PGADMIN_DEFAULT_EMAIL, в поле пароля значение переменной PGADMIN_DEFAULT_PASSWORD файла docker-compose.yml.<br>
listen_addresses = '*'" /var/lib/pgsql/data/postgresql.conf; \
[[Файл:ALTCOS examples pgadmin2.png|безрамки]]<br>
  echo "host all all 0.0.0.0/0 md5" >> /var/lib/pgsql/data/pg_hba.conf
В закладке 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>
CMD  exec su -c "/usr/bin/postgres -D /var/lib/pgsql/data $POSTGRES_PARAMS" -s /bin/sh postgres</syntaxhighlight>
[[Файл:ALTCOS examples pgadmin4.png|безрамки]]
В переменной '''PGPASS''' задается пароль администатора базы данных '''postgres'''. После установки пакета '''postgresql13-server''' в файлах конфигурации включается прием соединения по протоколу '''TCP/IP''' и авторизацию '''md5'''.


=== Пример работы в режиме podman ===
Сборка:
Скачайте образ  fanux/tetris
$ sudo podman pull --all-tags fanux/tetris
Trying to pull docker.io/fanux/tetris:latest...
Getting image source signatures
Copying blob 08d48e6f1cff done 
Copying blob abf1e846b79b done 
Copying blob 92f626025fce done 
Copying blob 5bd1005002cc done 
Copying config 82f6127899 done 
Writing manifest to image destination
Storing signatures
82f61278995f8c959b38174bc66bc053289cbb68cc47b2edca1ff10fafe28828


Запустите игру
<syntaxhighlight lang="sh">docker build -t altcos/alt.p10-postgres:13 .</syntaxhighlight>
$ sudo podman run --rm -it fanux/tetris game
'''Файл docker-compose.yml для запуска сервисов:''' В файле '''docker-compose.yml''' для сервера базы данных задается именованный том для хранения базы данных, а также логин и пароль для работы с административным интерфейсом:


[[Файл:ALTCOS examples tetris.png|безрамки]]
<syntaxhighlight lang="yaml">version: "3"


== Подготовка конфигурационного файла ignition ==
services:
Формат конфигов ignition (JSON) человекочитаемый, но сложный для написания. Удобнее писать конфиг на YAML, а затем с помощью butane (https://coreos.github.io/butane/) преобразовывать YAML в JSON. Утилиту butane можно установить командой
  postgres:
apt-get install butane
    image: altcos/alt.p10-postgres:13
    volumes:
      - DB:/var/lib/pgsql/data


Для преобразования конфига из YAML в JSON можно использовать команду
  pgadmin:
butane < cfg.yaml > cfg.ign
    image: dpage/pgadmin4
    environment:
      - PGADMIN_DEFAULT_EMAIL=test@altcos.altlinux.org
      - PGADMIN_DEFAULT_PASSWORD=Secret
    ports:
      - 80:80


== Описание подготовленных файлов конфигурации для установки ALTCOS ==
volumes:
  DB:</syntaxhighlight>
'''Запуск сервисов'''


В каталоге <tt>/configs/</tt> сайта <tt>https://altcos.altlinux.org/</tt> размещены подготовленные
<syntaxhighlight lang="sh">docker compose up -d</syntaxhighlight>
файлы конфигурации для установки ACOS. Он содержит следующие подкаталоги:
'''Настройка и работа с pgadmin4 через WEB-интерфейс'''
* <tt>butane</tt> - человекочитаемые файлы конфигурации в формате <tt>butane</tt>. Суффикс <tt>.btn</tt>
* <tt>ignition</tt> - соответствующие файлы конфигурации в формате <tt>ignition</tt>. Суффикс <tt>.ign</tt>.


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


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


Файлы конфигурации:
В поле Login введите значение переменной '''PGADMIN_DEFAULT_EMAIL''', в поле пароля значение переменной '''PGADMIN_DEFAULT_PASSWORD''' файла '''docker-compose.yml'''.
* [https://altcos.altlinux.org/configs/butane/users.btn butane]
* [https://altcos.altlinux.org/configs/ignition/users.ign ignition]


Конфигурация:
[[File:Pgadmin-general.png|frameless|none]] Во вкладке '''General''' в поле '''Name''' введите имя базы данных: '''postgres'''.
* задает пароль пользователя <tt>altcos</tt> (<tt>1</tt>), добавляет один открытый ключ;
* добавляем пользователя <tt>user</tt> (пароль <tt>012345</tt>), добавляет один открытый ключ.


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


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


Файлы конфигурации:
[[File:Pgadmin-at-work.png|frameless|none]]
* [https://altcos.altlinux.org/configs/butane/containers.btn butane]
* [https://altcos.altlinux.org/configs/ignition/containers.ign ignition]


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


Файлы конфигурации:
<syntaxhighlight lang="sh">su - -c "podman pull --all-tags fanux/tetris" </syntaxhighlight>
* [https://altcos.altlinux.org/configs/butane/storage.btn butane]
Запустите игру:
* [https://altcos.altlinux.org/configs/ignition/storage.ign ignition]


Как правило при установке ALTCOS корневая файловая система имееет небольшой объем (несколлько гигабайт).
<syntaxhighlight lang="sh">su - -c "podman run --rm -it fanux/tetris game"</syntaxhighlight>
Это недостаточно для развертывания множество docker-контейнеров, располагающихся
[[File:Podman-tetris.png|frameless|none]]
в каталогах <tt>/usr/lib/docker</tt>,  <tt>/usr/lib/containers</tt>.


В этой ситуации целесообразно примонтировать общий каталог <tt>/var/lib</tt> на отдельный диск достаточного для разворачивания контейнеров объемы.
<span id="подготовка-конфигурационного-файла-ignition"></span>
=== Подготовка конфигурационного файла ''ignition'' ===


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


Обратите внимание - при наличие параметра <tt>with_mount_unit: true</tt> в элемента <tt>storage.filesystem</tt>
<syntaxhighlight lang="sh">apt-get install butane</syntaxhighlight>
файла формата butane, в файле формата ignition создается дополнительный элемент <tt>systemd.units</tt>, обеспечивающий монтирование созданной файловой системы.
Для преобразования конфига из '''YAML''' в '''JSON''' можно использовать команду:


== OSTREE-подветки и производные подсистемы ==
<syntaxhighlight lang="sh">butane < cfg.yaml > cfg.ign</syntaxhighlight>
<span id="ostree-подветки-и-производные-подсистемы"></span>
=== OSTree-подветки и производные подсистемы ===


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


: '''Примечание''': ''docker swarm'' кластер при создании соответствующих ''ignition-файлов'' можно разворачивать и в рамках базовой ветки ''altcos/x86_64/sisyphus''.
'''Примечание''': Примечание: '''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 кластера.