
holos v0.6.3
Декларативный инструмент оркестрации виртуальных машин KVM/QEMU, использующий YAML-файлы компоновки. Управляет стеками из нескольких ВМ с cloud-init, SSH, пробросом PCI и проверкой образов без libvirt или XML.
Docker compose для KVM. Определяйте много-VM стеки в одном YAML-файле. Без libvirt, без XML, без распределённой плоскости управления.
Сайт и документация: https://zeroecco.github.io/holos/
Примитив — это VM, а не контейнер. Каждый экземпляр рабочей нагрузки получает собственную границу ядра, qcow2-оверлей, cloud-init seed и сгенерированный SSH-доступ.
Быстрый старт
Требуется Linux +
/dev/kvm. Сборки для macOS выполняют офлайн-команды, такие какvalidate,import,imagesиpull, ноupиrunтребуют KVM-хоста.
Одна одноразовая VM, без compose-файла:
holos run alpine
holos exec <printed-project-name>
holos down <printed-project-name>
Односервисный стек, доступный через curl. Сохраните как holos.yaml:
name: hello
services:
web:
image: ubuntu:noble
ports:
- "8080:80"
cloud_init:
packages:
- nginx
write_files:
- path: /var/www/html/index.html
content: "hello from holos\n"
runcmd:
- systemctl restart nginx
holos up
curl localhost:8080
holos down hello
Это настоящая VM, загружающая cloud-образ, устанавливающая пакет, записывающая конфигурацию и пробрасывающая порт хоста.
Установка
Готовые бинарные файлы прикреплены к каждому GitHub-релизу:
TAG=v0.6.3
ASSET=holos_${TAG#v}_Linux_x86_64.tar.gz
BASE=https://github.com/zeroecco/holos/releases/download/$TAG
curl -LO $BASE/$ASSET
curl -LO $BASE/checksums.txt
grep " $ASSET$" checksums.txt | sha256sum -c -
gh attestation verify $ASSET --repo zeroecco/holos
sudo tar -xz -C /usr/local/bin -f $ASSET holos
holos version
holos doctor
Страницы релизов содержат контрольные суммы SHA-256 и аттестации артефактов GitHub для подписанного происхождения. Проверьте оба перед установкой бинарных файлов на продакшн-хосты.
Или соберите из исходников:
go build -o bin/holos ./cmd/holos
go test ./...
bin/holos doctor
CLI
holos up [-f holos.yaml] [--locked] [--lockfile path] [--lock-timeout 5m|--no-wait]
запустить все сервисы
holos run [flags] <image> [-- cmd...] запустить одноразовую VM
holos down <project> остановить и удалить проект
holos ps [-f holos.yaml] список запущенных проектов
holos start [-f holos.yaml] [svc] запустить остановленный сервис или все сервисы
holos stop [-f holos.yaml] [svc] остановить сервис или все сервисы
holos console <project> [<inst>] подключиться к последовательной консоли
holos exec <project> [<inst>] [-- cmd...]
SSH в экземпляр
holos logs <project> [<svc|inst>] показать логи консоли
holos inspect [-f holos.yaml] [project|instance]
инспектировать состояние как JSON
holos validate [-f holos.yaml] проверить compose-файл (--capacity/--network)
holos pull <image> загрузить cloud-образ
holos verify <image>|--all проверить контрольные суммы кэшированных образов
holos images список доступных образов
holos images lock -f holos.yaml [-o holos.images.lock]
записать lockfile образов проекта
holos snapshots {create|list|rm|restore|export} ... управление снапшотами root
holos volumes [-f holos.yaml] [--json]
список именованных томов
holos volumes rm <project> <volume> удалить отсоединённый именованный том
holos volumes export <project> <volume> <path>
экспортировать отсоединённый именованный том
holos volumes snapshot <project> <volume> <snapshot>
создать снапшот отсоединённого именованного тома
holos volumes snapshots <project> <volume>
список снапшотов тома
holos volumes snapshot-rm <project> <volume> <snapshot>
удалить снапшот тома
holos volumes snapshot-restore <project> <volume> <snapshot>
восстановить снапшот тома
holos volumes snapshot-export <project> <volume> <snapshot> <path>
экспортировать снапшот тома
holos volumes resize [--shrink] <project> <volume> <size>
изменить размер отсоединённого именованного тома
holos devices [--gpu] список PCI-устройств и групп IOMMU
holos completion <bash|zsh|fish> вывести скрипт автодополнения оболочки
holos doctor [--json] проверить зависимости хоста
holos install [-f holos.yaml] [--system] [--enable]
установить systemd-юнит
holos uninstall [-f holos.yaml] [--system]
удалить systemd-юнит
holos import [vm...] [--all] [--xml file] [--connect uri] [-o file]
конвертировать virsh VM в holos.yaml
Документация
- Сайт: лендинг и отрендеренная документация.
- Руководство по CLI: одноразовые VM,
exec, установка systemd, импорт virsh иdoctor. - Compose-файл: сервисы, тома, healthchecks, сеть, PCI passthrough, провижининг через Dockerfile и значения по умолчанию.
- JSON Schema: автодополнение и валидация в редакторе для
holos.yaml. - Примеры: запускаемые и шаблонные стеки с объяснениями в стиле README.
- Отсутствующие функции: приоритизированные пробелы, соответствующие цели holos — single-host KVM compose.
- Разработка: сборка, тестирование, требования к хосту и процесс релиза.
- Политика безопасности: поддерживаемые версии и приватное сообщение об уязвимостях.
- Модель угроз / усиление защиты: верификация образов, права доступа к состоянию, блокировки и операционные рекомендации.
- Участие в разработке: сборка, тестирование, стиль и соглашения по PR.
Примеры
Начните с небольшого примера nginx:
holos up -f examples/alpine-nginx/holos.yaml
curl localhost:8080
holos down alpine-nginx
Каталог примеров также включает провижининг через Dockerfile, GPU passthrough
и многосервисный стек, демонстрирующий depends_on, сгенерированную конфигурацию и
реплики.
Требования к хосту
- Linux с
/dev/kvm qemu-system-x86_64qemu-img- Один из
cloud-localds,genisoimage,mkisofsилиxorriso - Прошивка OVMF / edk2-ovmf для UEFI или PCI passthrough
sshдляholos execи healthchecks
Запустите holos doctor для проверки хоста.
Устранение неполадок
SSH сбрасывается при первой загрузке
kex_exchange_identification: read: Connection reset by peer обычно означает,
что cloud-init всё ещё перегенерирует ключи хоста и перезапускает sshd. holos exec
по умолчанию ждёт до 60 с, но очень медленным первым загрузкам может потребоваться ещё одна попытка или
holos exec -w 5m <project>.
Консоль показывает Login incorrect
Последовательная консоль может попытаться выполнить автологин до того, как cloud-init создаст пользователя.
Дождитесь cloud-init ... finished в логе консоли, затем используйте holos exec.
Cloud-образы, как правило, не поставляются с паролем для консоли, и holos не
добавляет его.
up не работает на macOS
KVM — это функция ядра Linux. Бинарные файлы для macOS полезны для написания конфигураций и
офлайн-команд, но holos up и holos run должны выполняться на Linux KVM-хосте.
Не-цели
holos — это не Kubernetes. Он не пытается решить задачи многохостовой кластеризации, живой миграции, service mesh, overlay-сетей, планировщиков, CRD или кворума плоскости управления.
Цель — сделать KVM пригодным для single-host стеков без импорта операционной модели Kubernetes.
Лицензия
Лицензировано под Apache License, Version 2.0. См.
NOTICE для атрибуции.