Clustered Libvirt, simplified.
Go to file
Matthew Stobbs 4b9782bb2a adding initial toml config
fixing URI host struct to work better with configuration
2024-04-19 23:37:21 -06:00
cluster moving some modules to their own thing 2024-04-07 00:00:59 -06:00
cmd/clusterctl moving some modules to their own thing 2024-04-07 00:00:59 -06:00
config merge barnch switch_to_templ 2024-03-19 09:13:44 -06:00
css merge barnch switch_to_templ 2024-03-19 09:13:44 -06:00
daemon moving some modules to their own thing 2024-04-07 00:00:59 -06:00
etc adding initial toml config 2024-04-19 23:37:21 -06:00
lib adding initial toml config 2024-04-19 23:37:21 -06:00
public merge migrate_chi_to_new_nethttp 2024-03-25 15:33:04 -06:00
router update libvirt and templ 2024-04-07 20:31:33 -06:00
util moving some modules to their own thing 2024-04-07 00:00:59 -06:00
view update libvirt and templ 2024-04-07 20:31:33 -06:00
.air.toml merge barnch switch_to_templ 2024-03-19 09:13:44 -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 update libvirt and templ 2024-04-07 20:31:33 -06:00
go.sum update libvirt and templ 2024-04-07 20:31:33 -06:00
LICENSE Initial commit 2024-03-09 23:17:16 -07:00
main.go moving log to custom simplelog 2024-04-03 23:44:01 -06:00
package-lock.json merge barnch switch_to_templ 2024-03-19 09:13:44 -06:00
package.json merge barnch switch_to_templ 2024-03-19 09:13:44 -06:00
README.md merge barnch switch_to_templ 2024-03-19 09:13:44 -06:00
tailwind.config.js merge barnch switch_to_templ 2024-03-19 09:13:44 -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>

Open Source Projects

The following projects are being used as part of ClustVirt. Only those being used directly are listed, not the dependencies.

Go

Library Use License
xdg XDG paths MIT
spf13/viper Configuration MIT
spf13 Command Pattern CLI Apache 2.0
go-chart/v2 Chart generation MIT
libvirt Communications with Libvirtd MIT
libvirtxml Libvirt XML parsing and generation MIT
templ HTML Templating Engine MIT
chi/v5 HTTP Routing MIT

Node NPM

Library Use License
tailwindcss CSS UI library MIT
tailwindcss/forms CSS UI library for forms MIT