Skip to content

Zyvor Ephemera v0.1.0

Choose a tag to compare

@zyvorai zyvorai released this 16 Aug 03:01
· 31 commits to main since this release

Zyvor Ephemera v0.1.0

First tagged release. A disposable-VM control plane over QEMU/KVM, Cloud Hypervisor, and
Firecracker, with real, hardware-verified support for the full deferred-features list this
project set out with, plus the original MVP scope.

Every feature below has been booted/tested against real KVM hardware (and, where noted,
against a real external cluster) — not just compiled. See the README for full detail; this
is a summary.

Core VM lifecycle

  • VmBackend trait over QEMU (QMP), Cloud Hypervisor (ch-remote), and Firecracker
    (JSON config + HTTP-over-UDS), with a unified create/start/stop/pause/resume/delete API.
  • Vsock guest agent (ephemera exec) — no SSH, no network path required — over QEMU's native
    AF_VSOCK and a UDS proxy for Cloud Hypervisor/Firecracker.
  • "auto" backend selection based on what a request/config actually supplies (kernel, firmware).
  • TTL reaper, warm VM pools (pre-booted + paused, claimed at near-resume speed).

Storage

  • qcow2 CoW overlays (QEMU) and raw reflink clones (Cloud Hypervisor/Firecracker) by default.
  • Pluggable backends: LVM thin snapshots, NBD-exported disks, and Ceph RBD — all three verified
    booting real guests; Ceph RBD against a real, live Rook Ceph cluster.
  • Image catalog: named, checksummed, Ed25519-signed base images with full CRUD (add/remove/
    rename/clone/export) via CLI and REST.

Isolation and resource control

  • Firecracker jailer support (chroot, uid/gid drop).
  • Real per-VM network namespaces (veth + NAT + internal bridge), not just a shared bridge.
  • cgroup v2 resource control across all three backends: CPU/memory/IO/pids/cpuset limits,
    freeze/thaw, PSI pressure, usage stats.
  • Bearer-token REST API auth/RBAC (admin/read-only) and an authenticated guest-agent protocol.
  • Admission policy: max vCPU/memory/disk/TTL, allowed backends, allowed image directories.

Multi-host and Kubernetes

  • ephemera-kube: a DisposableVm Kubernetes CRD + node-local operator, verified end to end
    against a real k3s cluster (finalizer-driven delete, self-healing recreation on out-of-band
    VM loss).
  • ephemera-agent: a distributed node-agent — central fleet registry + per-host heartbeat
    client with load-aware placement — verified across two real, physically separate hosts.

Observability and ops

  • Prometheus /metrics endpoint; streaming GET /v1/vms/{id}/logs.
  • scripts/bootstrap-host.sh / scripts/deploy-remote.sh for one-command host setup and
    SSH-based deployment.
  • A dozen real-hardware regression scripts under scripts/test-*.sh covering networking,
    lifecycle, cgroups, jailer, warm pools, auth, the image catalog, storage backends, the
    Kubernetes operator, and the distributed fleet agent.

Known gaps (see README "Production changes I would make next")

  • NUMA/GPU/VFIO-aware scheduler placement — no suitable multi-socket/GPU hardware was
    available to verify this against.
  • A Windows guest path (UEFI, virtio-win, sysprep/unattend) — no licensed Windows image was
    available to verify this against.
  • Full snapshot/restore of VM state (as opposed to the already-implemented warm pools).
  • Packaging ephemera-kube as an actual container image/daemonset manifest.

Depends on the sibling guestkit project as a path
dependency.