butlerd

Оркестрация контейнеров без ops — в одном бинарнике.

butlerd — это самовосстанавливающийся распределённый демон, который заменяет весь ваш инфраструктурный стек — оркестратор, service mesh, DNS, TLS, реестр образов, KV-хранилище, мониторинг — одним статическим Go-бинарником без внешних зависимостей.

Без etcd. Без Consul. Без Kubernetes. Без YAML-ада. Просто butlerd init — и у вас production-ready кластер.


Зачем butlerd?

Традиционный стек butlerd
Kubernetes + etcd + Flannel + CoreDNS + cert-manager + Harbor + Prometheus + Grafana + Consul Один бинарник
Десятки YAML-манифестов butlerd apply -f compose.yaml
Часы настройки butlerd init --name prod → готово
Выделенная ops-команда Самовосстановление, ноль обслуживания
500+ МБ зависимостей ~15 МБ статический бинарник

Возможности

🏗 Оркестрация контейнеров

🔐 Криптографический консенсус

🌐 Полный сетевой стек

📦 Встроенные сервисы

📊 Наблюдаемость

🛡 Самовосстановление

Быстрый старт

Инициализация кластера

butlerd init --name my-cluster

Запуск демона

butlerd daemon --data-dir /var/lib/butlerd

Подключение узлов

butlerd join \
  --peer first-node:51821 \
  --token <join-token> \
  --data-dir /var/lib/butlerd

Деплой нагрузок

butlerd apply -f compose.yaml

Всё. butlerd сам позаботится о планировании, сети, DNS, TLS, healthcheck'ах и самовосстановлении.

Архитектура

┌──────────────────────────────────────────────────────────────────┐
│                         Демон butlerd                            │
├──────────────────────────────────────────────────────────────────┤
│  HTTP API (:51821)   │  Proxy (:80/:443)   │  DNS (:53)         │
├──────────────────────────────────────────────────────────────────┤
│                        Control Plane                             │
│  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐       │
│  │Планировщик│ │ Registry  │ │KV-хранил. │ │  Gossip   │       │
│  │           │ │   (OCI)   │ │   (DHT)   │ │ Протокол  │       │
│  └───────────┘ └───────────┘ └───────────┘ └───────────┘       │
├──────────────────────────────────────────────────────────────────┤
│                      Слой состояния                              │
│  Реплицированное состояние + Кворум-сертификаты + Деревья Меркла │
├──────────────────────────────────────────────────────────────────┤
│  WireGuard Overlay  │  ACME TLS Manager  │  TSDB + PromQL       │
├──────────────────────────────────────────────────────────────────┤
│  Docker             │  containerd        │  Apple Containers     │
└──────────────────────────────────────────────────────────────────┘

Каждый узел запускает полный стек. Каждый узел хранит полное состояние кластера. Нет выбора лидера, нет split-brain — только криптографический кворумный консенсус.

Установка

Debian / Ubuntu

sudo dpkg -i butlerd_<version>_amd64.deb
sudo systemctl enable --now butlerd

Из исходников

go build -o butlerd ./cmd/butlerd
go build -o butlerctl ./cmd/butlerctl

Требования

CLI

butlerd init                 Инициализация нового кластера
butlerd join                 Присоединение к существующему кластеру
butlerd daemon               Запуск демона
butlerd apply -f file.yaml   Деплой нагрузок из Compose-файла
butlerd rotate-admin-token   Ротация admin-токена API
butlerd rollback             Откат к последней рабочей версии
butlerd version              Версия

butlerctl — административный CLI

butlerctl status             Статус кластера
butlerctl nodes              Список узлов
butlerctl workloads          Список нагрузок
butlerctl kv get/put/del     Работа с KV-хранилищем
butlerctl logs               Стриминг логов демона

Сетевые порты

Порт Протокол Назначение
51820 UDP WireGuard overlay
51821 TCP API / inter-node gossip
80 TCP HTTP ingress proxy
443 TCP HTTPS ingress proxy
53 UDP+TCP Авторитативный DNS
5000 TCP OCI-реестр контейнеров
5001 TCP APT-репозиторий пакетов

Все порты настраиваются через CLI-флаги.

Проект в цифрах

Документация

Полная документация в директории docs/:

Сообщество

Телеграм-канал с заметками о разработке butlerd: @WGButlerAcademy

Лицензия

MIT