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 МБ статический бинарник |
Возможности
🏗 Оркестрация контейнеров
- Docker Compose совместимость — деплойте тем же
compose.yaml, который у вас уже есть - Мульти-рантайм — Docker, containerd и Apple Containers (macOS)
- Умный планировщик — размещение с учётом топологии, affinity-правил и шардинга
- Rolling-деплои — с автоматическим откатом при сбое
🔐 Криптографический консенсус
- Кворум-сертификаты — ed25519-подписанные изменения состояния, ни одной точки доверия
- CRDT-разрешение конфликтов — OR-Set, PN-Counter и векторные часы для устойчивости к разделению сети
- Синхронизация через деревья Меркла — O(log N) сравнение состояний через gossip-протокол
- Запечатанные секреты — AES-256-GCM шифрование конфигурации
🌐 Полный сетевой стек
- WireGuard mesh VPN — шифрованная overlay-сеть между всеми узлами, автоматический обмен ключами
- Обратный прокси — HTTP/2, WebSocket passthrough, пул соединений
- ACME / Let's Encrypt — автоматические TLS-сертификаты без настройки
- Авторитативный DNS — A, AAAA, CNAME, TXT, MX, NS с автогенерацией записей для ingress'ов
- NAT traversal — relay-ноды для пиров за файрволами
📦 Встроенные сервисы
- OCI Registry — push, pull и prefetch образов контейнеров по кластеру
- APT-репозиторий — хостинг и распространение
.deb-пакетов - Распределённое KV-хранилище — консистентный хеш-ринг, 128 vnodes на узел, LWW-разрешение конфликтов
- Web UI — дашборд кластера в реальном времени с авторизацией
📊 Наблюдаемость
- Встроенная TSDB — хранение временных рядов для метрик узлов и нагрузок
- PromQL-движок — запросы метрик привычным синтаксисом, без Prometheus
- Алертинг — правила оповещений с нотификациями
- Prometheus и OpenTelemetry — экспорт метрик в существующий стек при необходимости
🛡 Самовосстановление
- System healer — автоматическое обнаружение и восстановление после сбоев
- Zero-downtime рестарты — передача сокетов через
SIGHUP, ни одного потерянного соединения - Канареечные обновления — с автоматическим откатом к последней рабочей версии
- Gossip-протокол — состояние сходится даже после разделения сети
Быстрый старт
Инициализация кластера
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
Требования
- Go 1.25.6+ (только для сборки)
- Linux amd64 или macOS (runtime)
- Docker, containerd или Apple Containers (container runtime)
- WireGuard — модуль ядра или userspace (опционально, для overlay-сети)
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-флаги.
Проект в цифрах
- ~65 000 строк Go
- ~2 700 тестов (юнит + интеграционные)
- 5 внешних зависимостей (stdlib-first философия)
- Один бинарник, статическая линковка, ~15 МБ
Документация
Полная документация в директории docs/:
- Архитектура — обзор дизайна системы
- Консенсус — QC-протокол и комитет
- Gossip-протокол — репликация состояния и дельта-синхронизация
- Сеть — WireGuard, DNS, прокси, ingress
- Планирование — размещение нагрузок
- Хранилище — KV-хранилище и консистентное хеширование
- Безопасность — токены, запечатанные секреты, политики
Сообщество
Телеграм-канал с заметками о разработке butlerd: @WGButlerAcademy
Лицензия
MIT