
Deklaratives KVM/QEMU VM-Orchestrierungstool, das YAML-Compose-Dateien verwendet. Verwaltet Multi-VM-Stacks mit cloud-init, SSH, PCI-Durchleitung und Image-Verifikation ohne libvirt oder XML.
Docker compose für KVM. Definieren Sie Multi-VM-Stacks in einer YAML-Datei. Kein libvirt, kein XML, keine verteilte Steuerungsebene.
Website und Dokumentation: https://zeroecco.github.io/holos/
Das Grundelement ist eine VM, kein Container. Jede Workload-Instanz erhält ihre eigene Kernel-Grenze, qcow2-Overlay, cloud-init-Seed und generierten SSH-Zugriff.
Erfordert Linux +
/dev/kvm. macOS-Builds führen Offline-Befehle wievalidate,import,imagesundpullaus, aberupundrunbenötigen einen KVM-Host.
Eine temporäre VM, keine Compose-Datei:
holos run alpine
holos exec <printed-project-name>
holos down <printed-project-name>
Ein Single-Service-Stack, den Sie curl können. Speichern Sie als 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
Das ist eine echte VM, die ein Cloud-Image bootet, ein Paket installiert, eine Konfiguration schreibt und einen Host-Port weiterleitet.
Vorgefertigte Binärdateien sind jedem GitHub-Release beigefügt:
TAG=v0.6.1
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
Die Release-Seiten enthalten SHA-256-Prüfsummen und GitHub-Artefakt-Attestierungen für signierte Herkunft. Überprüfen Sie beide, bevor Sie Binärdateien auf Produktionshosts installieren.
Oder aus dem Quellcode erstellen:
go build -o bin/holos ./cmd/holos
go test ./...
bin/holos doctor
holos up [-f holos.yaml] [--locked] [--lockfile path] [--lock-timeout 5m|--no-wait]
alle Dienste starten
holos run [flags] <image> [-- cmd...] eine einmalige VM starten
holos down <project> einen Projekt stoppen und entfernen
holos ps [-f holos.yaml] laufende Projekte auflisten
holos start [-f holos.yaml] [svc] einen gestoppten Dienst oder alle Dienste starten
holos stop [-f holos.yaml] [svc] einen Dienst oder alle Dienste stoppen
holos console <project> [<inst>] serielle Konsole anhängen
holos exec <project> [<inst>] [-- cmd...]
per SSH in eine Instanz einloggen
holos logs <project> [<svc|inst>] Konsolenprotokolle anzeigen
holos inspect [-f holos.yaml] [project|instance]
Zustand als JSON anzeigen
holos validate [-f holos.yaml] Compose-Datei validieren (--capacity/--network)
holos pull <image> ein Cloud-Image herunterladen
holos verify <image>|--all zwischengespeicherte Image-Prüfsummen überprüfen
holos images verfügbare Images auflisten
holos images lock -f holos.yaml [-o holos.images.lock]
Projekt-Image-Lockdatei schreiben
holos snapshots {create|list|rm|restore|export} ... Root-Snapshots verwalten
holos volumes [-f holos.yaml] [--json]
benannte Volumes auflisten
holos volumes rm <project> <volume> ein getrenntes benanntes Volume entfernen
holos volumes export <project> <volume> <path>
ein getrenntes benanntes Volume exportieren
holos volumes snapshot <project> <volume> <snapshot>
einen Snapshot eines getrennten benannten Volumes erstellen
holos volumes snapshots <project> <volume>
Volume-Snapshots auflisten
holos volumes snapshot-rm <project> <volume> <snapshot>
einen Volume-Snapshot entfernen
holos volumes snapshot-restore <project> <volume> <snapshot>
einen Volume-Snapshot wiederherstellen
holos volumes snapshot-export <project> <volume> <snapshot> <path>
einen Volume-Snapshot exportieren
holos volumes resize [--shrink] <project> <volume> <size>
ein getrenntes benanntes Volume in der Größe ändern
holos devices [--gpu] PCI-Geräte und IOMMU-Gruppen auflisten
holos completion <bash|zsh|fish> Shell-Vervollständigungsskript ausgeben
holos doctor [--json] Host-Abhängigkeiten überprüfen
holos install [-f holos.yaml] [--system] [--enable]
eine systemd-Einheit installieren
holos uninstall [-f holos.yaml] [--system]
die systemd-Einheit entfernen
holos import [vm...] [--all] [--xml file] [--connect uri] [-o file]
virsh-VMs in holos.yaml konvertieren
exec, systemd-Installation, virsh-Import und doctor.holos.yaml.Beginnen Sie mit dem kleinen nginx-Beispiel:
holos up -f examples/alpine-nginx/holos.yaml
curl localhost:8080
holos down alpine-nginx
Das Beispiele-Verzeichnis enthält auch Dockerfile-Provisionierung, GPU-Durchleitung und einen Multi-Service-Stack, der depends_on, generierte Konfiguration und Replikate zeigt.
/dev/kvmqemu-system-x86_64qemu-imgcloud-localds, genisoimage, mkisofs oder xorrisossh für holos exec und HealthchecksFühren Sie holos doctor aus, um den Host zu überprüfen.
kex_exchange_identification: read: Connection reset by peer bedeutet normalerweise, dass cloud-init noch Host-Schlüssel neu generiert und sshd neu startet. holos exec wartet standardmäßig bis zu 60s, aber sehr langsame erste Starts können einen erneuten Versuch oder holos exec -w 5m <project> erfordern.
Login incorrectDie serielle Konsole versucht möglicherweise einen automatischen Login, bevor cloud-init den Benutzer erstellt. Warten Sie auf cloud-init ... finished im Konsolenprotokoll und verwenden Sie dann holos exec. Cloud-Images haben normalerweise kein Konsolenpasswort und holos fügt keines hinzu.
up schlägt auf macOS fehlKVM ist eine Funktion des Linux-Kernels. macOS-Binärdateien sind nützlich für das Erstellen und für Offline-Befehle, aber holos up und holos run müssen auf einem Linux-KVM-Host ausgeführt werden.
holos ist nicht Kubernetes. Es versucht nicht, Multi-Host-Clustering, Live-Migration, Service Meshes, Overlay-Netzwerke, Scheduler, CRDs oder Kontrollebenen-Quorum zu lösen.
Das Ziel ist, KVM für Single-Host-Stacks nutzbar zu machen, ohne die operative Form von Kubernetes zu importieren.
Lizenziert unter der Apache License, Version 2.0. Siehe NOTICE für die Namensnennung.