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

Материал из ALT Linux Wiki
 
(не показана 31 промежуточная версия 4 участников)
Строка 1: Строка 1:
[[Категория:Руководства]]
<span id="alt-container-os"></span>
ALT Container OS (ALTCOS) — дистрибутив на основе пакетной базы ALT Linux, являющий аналогом Fedora CoreOS, имеющий следующие особенности:
= ALT Container OS =
* минимальный набор пакетов для поддержки контейнеризации (docker, podman);
 
'''ALT Container OS (ALTCOS)''' — дистрибутив на основе пакетной базы '''ALT Linux''', являющий аналогом '''Fedora CoreOS''', имеющий следующие особенности:
 
* минимальный набор пакетов для поддержки контейнеризации (docker, docker-compose, docker swarm, podman);
* малый объем занимаемый на диске ~1.2GB;
* минимальное время (пере)загрузки системы - несколько секунд;
* повышенная защищенность за счет монтирования в режиме ТОЛЬКО НА ЧТЕНИЕ системных каталогов;
* монолитность — атомарные обновления с возможностью отката на предыдущую версию;
* монолитность — атомарные обновления с возможностью отката на предыдущую версию;
* поддержка потоков, отличающихся по репозиториям ALT Linux и архитектурам. На данный момент (27.09.2021) поддерживается только поток altcos/x86_64/sisyphus (архитектура 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. Во время первоначальной настройки через ignition можно установить пароль пользователям altcos и root.<br>
В '''ALTCOS''' есть специальный пользователь '''altcos''', включенный в группы '''docker''' и '''wheel''', то есть имеющий право запускать команды '''docker''', '''sudo''', '''podman''', …. Во время первоначальной настройки через '''ignition''' можно установить пароль пользователям '''altcos''' и '''root'''.'''ALTCOS''' можно установить с помощью '''ISO'''-образа или при помощи '''ignition''' настроить '''qcow2'''.
В настоящее время (27.09.2021) ALTCOS можно установить с помощью ISO-образа или при помощи ignition настроить QCOW2.<br>
 
В дальнейшем планируется поддержка установки в различные облачные среды, а также сетевой установки с использованием PXE.
<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-образов ==
ISO-образ для установки на ‘голое железо’ необходимо командой dd записать на носитель (USB или CD/DVD диск).


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


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


В дальнейшем предполагается поддержка других архитектур.
<span id="установка-altcos-из-iso"></span>
== Установка ALTCOS из ISO ==


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


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


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


В настоящее время (версия '''1.0''' - 11.10.2021) поддерживается только платформа '''sisyphus'''.
<syntaxhighlight lang="sh">mkpasswd --method=yescrypt</syntaxhighlight>
Поддержка платформы '''p10''' планируется в версии '''1.1''' - 01.11.2021.
А затем заменить строку в поле <code>passwordHash</code> на результат <code>mkpasswd</code>


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


После загрузки выбранный образ доступен на локальном компьютере (как правило в папке ''Загрузки'' домашнего директория).
При помощи '''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
Сервисы запускаются командой 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


ENV PGPASS=q1w2e3


===== Настройка и работа с pgadmin4 через WEB-интерфейс =====
RUN \
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):<br>
  apt-get update; \
[[Файл:ALTCOS examples pgadmin.png|безрамки]]<br>
  apt-get install -y postgresql13-server;
В поле 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|безрамки]]
  echo -ne "$PGPASS\n$PGPASS\n" | su -s /bin/sh -l postgres -c 'initdb  --pgdata="/var/lib/pgsql/data" --locale="ru_RU.UTF-8" -U postgres -W'; \
  sed -i -e "/^#listen_addresses/a\
listen_addresses = '*'" /var/lib/pgsql/data/postgresql.conf; \
  echo "host all all 0.0.0.0/0 md5"  >> /var/lib/pgsql/data/pg_hba.conf


CMD  exec su -c "/usr/bin/postgres -D /var/lib/pgsql/data $POSTGRES_PARAMS" -s /bin/sh postgres</syntaxhighlight>
В переменной '''PGPASS''' задается пароль администатора базы данных '''postgres'''. После установки пакета '''postgresql13-server''' в файлах конфигурации включается прием соединения по протоколу '''TCP/IP''' и авторизацию '''md5'''.
Соборка:
<syntaxhighlight lang="sh">docker build -t altcos/alt.p10-postgres:13 .</syntaxhighlight>
'''Файл docker-compose.yml для запуска сервисов:''' В файле '''docker-compose.yml''' для сервера базы данных задается именованный том для хранения базы данных, а также логин и пароль для работы с административным интерфейсом:
<syntaxhighlight lang="yaml">version: "3"
services:
  postgres:
    image: altcos/alt.p10-postgres:13
    volumes:
      - DB:/var/lib/pgsql/data
  pgadmin:
    image: dpage/pgadmin4
    environment:
      - PGADMIN_DEFAULT_EMAIL=test@altcos.altlinux.org
      - PGADMIN_DEFAULT_PASSWORD=Secret
    ports:
      - 80:80
volumes:
  DB:</syntaxhighlight>
'''Запуск сервисов'''
<syntaxhighlight lang="sh">docker compose up -d</syntaxhighlight>
'''Настройка и работа с pgadmin4 через WEB-интерфейс'''
После запуска сервисов в браузере укажите URL http:<IP-адрес-сервера-altcos> (если сервер запускается в виртуальном окружении не забудьте пробросить порт 80 наружу):
[[File:Pgadmin-login.png|frameless|none]]
В поле Login введите значение переменной '''PGADMIN_DEFAULT_EMAIL''', в поле пароля значение переменной '''PGADMIN_DEFAULT_PASSWORD''' файла '''docker-compose.yml'''.
[[File:Pgadmin-general.png|frameless|none]] Во вкладке '''General''' в поле '''Name''' введите имя базы данных: '''postgres'''.
[[File:Pgadmin-connection.png|frameless|none]] Во вкладке '''Connection''' - в поле '''Host''' введите имя сервиса '''postgres''' файла '''docker-compose.yml'''; - в полях '''Maintenance database''', '''Username''' имя базы ('''postgres''') и имя пользователя ('''postgres''') - в поле '''Password''' значение переменной '''PGPASS''' файла '''Dockerfile'''.
После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.
[[File:Pgadmin-at-work.png|frameless|none]]
<span id="пример-работы-в-режиме-podman"></span>
=== Пример работы в режиме podman ===
=== Пример работы в режиме 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


Запустите игру
Скачайте образ '''fanux/tetris''':
$ sudo podman run --rm -it fanux/tetris game
 
<syntaxhighlight lang="sh">su - -c "podman pull --all-tags fanux/tetris" </syntaxhighlight>
Запустите игру:
 
<syntaxhighlight lang="sh">su - -c "podman run --rm -it fanux/tetris game"</syntaxhighlight>
[[File:Podman-tetris.png|frameless|none]]


[[Файл:ALTCOS examples tetris.png|безрамки]]
<span id="подготовка-конфигурационного-файла-ignition"></span>
=== Подготовка конфигурационного файла ''ignition'' ===


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


Для преобразования конфига из YAML в JSON можно использовать команду
<syntaxhighlight lang="sh">apt-get install butane</syntaxhighlight>
butane < cfg.yaml > cfg.ign
Для преобразования конфига из '''YAML''' в '''JSON''' можно использовать команду:


== Описание подготовленных файлов конфигурации для установки ALTCOS
<syntaxhighlight lang="sh">butane < cfg.yaml > cfg.ign</syntaxhighlight>
<span id="ostree-подветки-и-производные-подсистемы"></span>
=== OSTree-подветки и производные подсистемы ===


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


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


=== Установка описанных примеров при развертывании ALTCOS ===
Документация по разворачиванию ''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]'''.


Использовав во время установки ignition-файл https://altcos.altlinux.org//configs/ignition/testContainers.ign
Документация по разворачиванию отказоустойчивого кластера ''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-файл https://altcos.altlinux.org//configs/butane/testContainers.btn)
Вы в каталоге ''/opt/'' получаете развернутое дерево для запуска описанных примеров.
<tt>
  /opt/altcos/
`-- examples
    `-- docker
        |-- docker
        |  `-- hello.sh
        |-- docker-compose
        |  |-- docker-compose.yml
        |  |-- start.sh
        |  `-- stop.sh
        `-- podman
            `-- tetris.sh
</tt>
* ''/opt/altcos/examples/docker/docker'' - скрипт ''hello.sh'' запуска контейнера;
* ''/opt/altcos/examples/docker/docker-compose'' - файл описания сервисов ''docker-compose.yml'' и с
крипты запуска и остановки сервисов;
* ''/opt/altcos/examples/podman/tetris.sh'' - скрипт запуска контейнера игры ''tetris'' через ''podman''.

Текущая версия от 10:25, 31 января 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 кластера.