ALT Container OS: различия между версиями
Нет описания правки |
|||
Строка 94: | Строка 94: | ||
* По расписанию. Перезагрузка происходит в указанный интервал времени. | * По расписанию. Перезагрузка происходит в указанный интервал времени. | ||
* Согласованная. Перезагрузка производится с участием центрального сервиса, контролирующего порядок перезагрузки серверов кластера для минимизации времени простоя ключевых сервисов. | * Согласованная. Перезагрузка производится с участием центрального сервиса, контролирующего порядок перезагрузки серверов кластера для минимизации времени простоя ключевых сервисов. | ||
[https://coreos.github.io/zincati/usage/updates-strategy/ настройка обновлений zincati] | |||
<span id="ручное-обновление-altcos"></span> | <span id="ручное-обновление-altcos"></span> | ||
== Ручное обновление ALTCOS == | == Ручное обновление ALTCOS == | ||
Версия от 13: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
Для получения образы выберите:
- Архитектуру (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.
После завершения загрузки появится приглашение для ввода логина. Необходимо зайти под пользователем root.
Пример конфигурационного файла ignition (/usr/share/altcos/config_example.ign), позволяет установить пароль “1” пользователю с именем altcos. Если требуется другой пароль, можно его сгенерировать командой:
mkpasswd --method=yescrypt
А затем заменить строку в поле passwordHash
на результат mkpasswd
При помощи lsblk определить имя файла устройства, на которое будет выполняться установка, и передать его в качестве первого параметра скрипту altcos-installer.sh. Второй параметр — полный путь к конфигу ignition.
Установка выполняется на весь диск, и значит все данные, находившиеся на нем до установки, будут удалены. На предупреждение об этом следует нажать клавишу “y”.
Установщик спросит пароль root.
Установка завершится вопросом о необходимости перезагрузки. При нажатии клавиши “y” будет выполнена перезагрузка.
Грузимся в установленную систему.
Логинимся под нужным пользователем.
Запуск ALTCOS из qcow2
При первом запуске ALTCOS из образа qcow2 надо передать qemu параметр командой строки -fw_cfg name=opt/com.coreos/config,file=/path/to/config.ign
, в котором прописать путь к своему конфигурационному файлу ignition. Пример конфига, в котором устанавливается пароль пользователя altcos можно найти по данной ссылке
Автоматическое обновление ALTCOS
После загрузки системы запускается сервис zincati, контролирующий наличие новых версий установленного потока (altcos/x86_64/sisyphus/, altcos/x86_64/p10/, …). При появлении новой версии происходит ее автоматическая загрузка и, в зависимости от режима, перезагрузка системы. Поддерживаются следующие режимы перезагрузки:
- Немедленная. Если в системе нет пользователей — немедленная перезагрузка. Если есть — рассылка сообщений пользователям, ожидание их выхода и перезагрузка после их выхода или через 10 минут.
- По расписанию. Перезагрузка происходит в указанный интервал времени.
- Согласованная. Перезагрузка производится с участием центрального сервиса, контролирующего порядок перезагрузки серверов кластера для минимизации времени простоя ключевых сервисов.
Ручное обновление 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
Запуск команды echo и cat:
docker run --rm -i alt:p10 sh -c "echo -ne 'Hello, World '; cat /etc/altlinux-release"
Пример работы в режиме 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 наружу):
В поле Login введите значение переменной PGADMIN_DEFAULT_EMAIL, в поле пароля значение переменной PGADMIN_DEFAULT_PASSWORD файла docker-compose.yml.
Во вкладке General в поле Name введите имя базы данных: postgres.
Во вкладке Connection - в поле Host введите имя сервиса postgres файла docker-compose.yml; - в полях Maintenance database, Username имя базы (postgres) и имя пользователя (postgres) - в поле Password значение переменной PGPASS файла Dockerfile.
После нажатия клавиши Save в окне браузера отобразится интерфейс для работы с базой данных.
Пример работы в режиме podman
Скачайте образ fanux/tetris:
su - -c "podman pull --all-tags fanux/tetris"
Запустите игру:
su - -c "podman run --rm -it fanux/tetris game"
Подготовка конфигурационного файла 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 кластера.