Clustered Libvirt, simplified.
Go to file
Matthew Stobbs 1bfdaf28c7 Add file stubs, add comments to guide dev in host
Signed-off-by: Matthew Stobbs <matthew@stobbs.ca>
2024-03-12 01:38:29 -06:00
lib Add file stubs, add comments to guide dev in host 2024-03-12 01:38:29 -06:00
util getting host data before each vm on host data 2024-03-11 23:35:32 -06:00
.gitattributes Add git-lfs 2024-03-09 23:24:29 -07:00
.gitignore Initial commit 2024-03-09 23:17:16 -07:00
go.mod getting host data before each vm on host data 2024-03-11 23:35:32 -06:00
go.sum Added ability to check domains on host 2024-03-10 00:15:49 -07:00
LICENSE Initial commit 2024-03-09 23:17:16 -07:00
main.go getting host data before each vm on host data 2024-03-11 23:35:32 -06:00
README.md Adding basic wrappers 2024-03-10 20:32:11 -06:00

clustvirt - Libvirt cluster manager

Clustered virtualization has gotten to complicated. We have a great system for it built into the Linux kernel, with shared software stacks between whatever base distro you want to use.

Every other option has buy in, and buzzwords. I want something truly simple that can manage virtual machines on multiple hosts, integrating with existing tools, running from one/all of the hosts, a raspberry pi, or as a guest machine on the cluster itself.

The mission: Talk to libvirt hosts, coordinate them, manage them, and let people take their clusters back.

Overall goals:

  • HA Cluster resource manager (simpler then existing options, just for libvirt)
    • Share secrets
    • Share VM configs
    • know what VM is running on what cluster host
    • trigger migrations of hosts
    • most simple quorum algorithm possible, ability to run 2 hosts reliably, up to ?? hosts without worry
      • Simplest quorum: If the controller can't reach it, it's down.
  • Shared Network management
  • Shared storage managment
    • Does not include clustered storage configuration
    • Can use different clustered storage systems (just not configure them directly)
  • Reliable backup and snapshotting
    • The tools exist for this, just needs to be exposed
  • Install on any libvirt system, as long as the basic requirements are met as far as compatibility is concerned
    • Should be able to have hosts on RedHat, Rocky, Arch, Ubuntu, Debian, whatever without worry
  • Cloud-init configuration help to create useful and reusable cloud-init files, that don't need to be used by the system only. It's a standard, use it.

Existing tools and libraries to use

Roadmap

  • Create simple daemon that can run on 1 or more hosts that will keep track of things
    • Libvirt daemon
      • Host Capabilities
      • Migration Capabilities
      • Secret management
      • Storage pool management
      • Volume management
      • Guest management
      • Connection management (to other libvirt hosts)
  • Create a simple WebUI with HTMX to monitor that stuff
  • Add the ability to manage that stuff once we can monitor it, through the WebUI.

Special XMLNS definitions

Domain

  • xmlns:clustvirt="https://git.staur.ca/stobbsm/clustvirt"
<metadata>
    <clustvirt:data xmlns:clustvirt="https://git.staur.ca/stobbsm/clustvirt/">
        <clustvirt:created>true</clustvirt:created>
        <clustvirt:managed>true</clustvirt:managed>
        <clustvirt:currentHost>host01</clustvirt:currentHost>
        <clustvirt:origHost>host02</clustvirt:origHost>
        <clustvirt:baseGuest>rocky-9-base</clustvirt:baseGuest>
    </clustvirt:data>
</metadata>