Назад к обновлениям
New releaseSep 21, 2026

holos v0.6.3

Декларативный инструмент оркестрации виртуальных машин KVM/QEMU, использующий YAML-файлы компоновки. Управляет стеками из нескольких ВМ с cloud-init, SSH, пробросом PCI и проверкой образов без libvirt или XML.

Поделиться
holos

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_64
  • qemu-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 для атрибуции.

Категории