Selenite: сервер на основе ALT Atomic

Когда Kubernetes это слишком. Простая неизменяемая система для запуска приложений в контейнерах на одном или нескольких серверах.

Что такое Selenite

Selenite это минималистичная неизменяемая серверная операционная система, построенная на ALT Atomic. Её задача: запускать ваши приложения как стеки Podman Compose, то есть из обычных файлов compose.yml, которые уже есть у большинства популярных проектов.

Это промежуточный вариант между голыми контейнерами и Kubernetes. Kubernetes избыточен для одного или нескольких серверов со стабильной нагрузкой, а классический Linux-сервер требует постоянного ухода за пакетами и настройками, который хостингу контейнеров не нужен.

Selenite развивается в организации ALT Atomic на ALT Linux Space под лицензией MPL-2.0. Сейчас это бета-версия, поэтому детали ниже могут измениться.

Четыре идеи

Неизменяемая основа

Корень системы только для чтения и обновляется целым образом с откатом. Те же принципы, что у ALT Atomic.

Один файл настроек

Состояние машины описывается одним YAML-файлом и применяется одной командой. Его удобно хранить в Git.

Нет оболочки

Вместо интерактивного shell ограниченный API по SSH, контейнеры без прав root и разграничение прав (RBAC).

Привычные стеки

Приложения разворачиваются из обычных файлов compose.yml.

Как это управляется: SSH API

Подключиться к Selenite как к обычному серверу и получить командную строку нельзя. Вместо этого каждая SSH-сессия выполняет одну команду из ограниченного набора. Вход только по ключам. По документации версии 0.1 команды разделены на группы:

ГруппаЧто умеет
machineсведения о машине, журналы, перезагрузка, обновление образа (A/B, вступает в силу после перезагрузки), откат на один шаг, смена образа, применение и правка конфигурации
stackразвернуть стек из compose.yml (повторная выкладка обновляет его), список, запуск, остановка, удаление, процессы, журналы
infraсекреты (секреты Podman), тома (экспорт и импорт), сети (bridge, macvlan, ipvlan)
debugпривилегированный контейнер из любого образа для отладки, доступен по отдельному праву

Справка (help) доступна на любом уровне.

Единый конфиг машины

Всё состояние машины задаётся одним YAML-файлом и применяется одной командой, а сам файл можно держать в Git. В нём, в частности:

  • Доступ: пользователи и роли с правилами «ресурс × действие», защита от подбора ключей (аналог fail2ban).
  • Системные параметры ядра (sysctl).
  • Сеть: желаемое состояние через nmstate, при желании подключение к частной сети NetBird.
  • Мониторинг: отправка метрик и журналов (Grafana Alloy в Prometheus или Mimir и в Loki).
  • Память: настройка zram.

Конфиг можно заменить целиком или поправить частично, патчем.

Осторожно с первым запуском. Пока на машине нет ни одного пользователя, SSH принимает любой ключ, но разрешает только команду первичной настройки (provision). Пока она не выполнена, любой в сети может управлять машиной, поэтому не открывайте порт управления наружу. А при полной замене конфига без собственного ключа в списке пользователей вы потеряете доступ.

Требования и установка

  • Мало ресурсов. От 384 МБ оперативной памяти и 5 ГБ диска (рекомендуется больше: 1 ГБ и 20 ГБ).
  • Готовый образ диска для виртуальной машины (формат qcow2, с гостевым агентом), без установки: загрузили и работаете. Образы лежат в релизах проекта на ALT Linux Space, рядом контрольные суммы.
  • Образ контейнера для обновлений и переключения тоже публикуется проектом.
  • Загрузка. По документации версии 0.1 образ рассчитан на загрузку через BIOS (SeaBIOS) и пока не запускается в режиме UEFI.
  • Для клонов. Шаблон нужно клонировать до первого запуска, иначе клоны унаследуют уже выданный ключ.

Версия 0.1 бета: перед установкой сверяйтесь с документацией, требования и команды в ней могут меняться.

Кому это нужно

  • Тем, у кого один-два домашних или небольших сервера с контейнерами и кому жалко времени на ручное обслуживание системы.
  • Тем, кому нужна воспроизводимость: настройки в одном файле, обновления с откатом.
  • Тем, кто хочет меньше поверхность атаки: без shell и без root в контейнерах.

Atomic Niri и Selenite растут из одной основы, но решают разные задачи: Atomic Niri это рабочий стол, Selenite это сервер. Они не конкурируют, а используют общую идею неизменяемой системы.