ALT Container OS

Материал из ALT Linux Wiki
(перенаправлено с «ACOS»)

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 кластера.