258 lines
8.6 KiB
Plaintext
258 lines
8.6 KiB
Plaintext
|
package static
|
||
|
|
||
|
import (
|
||
|
"git.staur.ca/stobbsm/clustvirt/view/layouts"
|
||
|
"git.staur.ca/stobbsm/clustvirt/view/components"
|
||
|
)
|
||
|
|
||
|
templ Home() {
|
||
|
@layouts.StaticPage("ClustVirt", "Libvirt, clustered and managed", []components.NavItem{
|
||
|
{Name: "What", Href: "#"},
|
||
|
{Name: "Why", Href: "#"},
|
||
|
{Name: "Goals", Href: "#"},
|
||
|
{Name: "Stretch", Href: "#"},
|
||
|
{Name: "Requests", Href: "#"},
|
||
|
{Name: "Never", Href: "#"},
|
||
|
{Name: "Notes", Href: "#"},
|
||
|
}) {
|
||
|
<div>
|
||
|
@components.InfoBox("What is This?", "uiorange") {
|
||
|
<div class={"mx-4"}>
|
||
|
@components.ContentP() {
|
||
|
Clustvirt (work in progress name) aims to be the agnostic
|
||
|
cluster controller for libvirtd. The server component is
|
||
|
used to display both the WebUI and run the REST API used to
|
||
|
control one to many libvirtd hosts to manage virual machines,
|
||
|
LXC containers (through libvirtd), gather information about
|
||
|
each host, and monitor each host.
|
||
|
}
|
||
|
</div>
|
||
|
}
|
||
|
</div>
|
||
|
<div>
|
||
|
@components.InfoBox("Why?", "uiblue") {
|
||
|
@components.List("informational") {
|
||
|
@components.ListItem() {
|
||
|
Broadcom buying VMWare, and VMWare losing a free
|
||
|
teir for homelabbers pissed me off
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Vendor lock-in pisses me off
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Even good open source Hyperconverged systems
|
||
|
(Proxmox, as an example) exhibit a form of vendor lock-in
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Libvirt is terrific, has the functionality for everything
|
||
|
those other providers do, but there really is not a great
|
||
|
option for those dipping their toes into Open Source
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Its fun to build things that solve a need
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
I really want to do it
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</div>
|
||
|
<div>
|
||
|
@components.InfoBox("Project Goals", "uigreen") {
|
||
|
@components.List("accepted") {
|
||
|
@components.ListItem() {
|
||
|
Open source, currently on the MIT license
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Base OS Agnostic. If it can run libvirtd, this should be able to control it on some level
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Control the Virtual Machine life cycle on one or more libvirtd hosts
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Add clusting capabilities to libvirtd host, including;
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Migration of VMs
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Syncronizing secrets
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Syncronizing VLANs, bridges, host only networking
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Sharing HA storage availability
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Locking shared resources like disks
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Starting VMs marked for HA on another host when one goes down
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Manage a library of Cloud-init resources and templates to build new VMs quickly
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Local Storage management, including local directory, lvm, zfs (if installed)
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Advanced Storage management, such as Ceph, glusterfs, drbd, iscsi, nfs
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Storage syncronization of local disks between hosts (zfs snapshots, lvm snapshots, rsync)
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Backup scheduling, creation, restoration
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</div>
|
||
|
<div>
|
||
|
@components.InfoBox("Stretch Goals", "uipurple") {
|
||
|
@components.List("possible") {
|
||
|
@components.ListItem() {
|
||
|
Install the OS which libvirtd is running on
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Install/provision libvirtd on a host that does not have it installed
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Tools to move from one vendor to clustvirt/libvirtd
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
VM templates for common aspects of VM creation and management,
|
||
|
like appliances
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
External tool access that can be used to manage things that are not
|
||
|
managed here (cephadm dashboard, for instance)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</div>
|
||
|
<div>
|
||
|
@components.InfoBox("Reddit Requested Feature", "uiyellow") {
|
||
|
@components.List("possible") {
|
||
|
@components.ListItem() {
|
||
|
Search/Filter on hosts/vms - @Lopsided_Speaker_553
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Balance on resource usage per host/Automattically migrate to least
|
||
|
used host - @Lopsided_Speaker_553
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Support inter-vm only commmunication (VxLAN style) - @Lopsided_Speaker_553
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Deploy VMs using only API - @Lopsided_Speaker_553
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Well documented, first class API - @kasperlitheater
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Bootstrap service to configure a new server - @phatpappa_
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
For the love of kitten, don't use XML as configuration files - @pascalbrax
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Expose the Cluster Manager functionalities as API - @raven2611
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
CPU architecture awareness for migrations - @raven2611
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Inter VM Communications via VXLAN/EVPN - @raven2611
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</div>
|
||
|
<div class={ }>
|
||
|
@components.InfoBox("Never Going to Happen", "uired") {
|
||
|
@components.List("never") {
|
||
|
@components.ListItem() {
|
||
|
Kubernetes
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Application container management (docker, podman, etc)
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Become an OS
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Have a paywall
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Vendor lock-in
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Become a commercial entity (even indirectly)
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Anything that does not have an Open Source standard behind it
|
||
|
}
|
||
|
@components.ListItem() {
|
||
|
Directly control a guest Operating System
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</div>
|
||
|
@components.InfoBox("Other things to note", "uipink") {
|
||
|
<div class={"flex", "flex-col", "gap-4", "mx-4"}>
|
||
|
@components.ContentP() {
|
||
|
I recently created a
|
||
|
<span>
|
||
|
@components.ANewTab("http://redd.it/1bct15z", "post")
|
||
|
</span>
|
||
|
on reddit announcing that I was building this, and while the majority
|
||
|
of responses were supportive, even offering features that may enhance
|
||
|
what I originally set out to do, many responded with
|
||
|
"Why do we need another one??"
|
||
|
}
|
||
|
@components.ContentP() {
|
||
|
Besides the list above about why this exists, I wanted to clarify
|
||
|
a few things those individuals did not seeem to get: This is not
|
||
|
a rebuild of Proxmox, Cloudstack, VMWare, Harvester or any of
|
||
|
the other "Hyper-converged/Single-solution/turnkey/Operating System"
|
||
|
offerings out there. This will not take over your base operating system
|
||
|
on your machine, just act as a cluster manager and interface to access
|
||
|
the existing libvirtd instances on those machines, nor will it prescribe
|
||
|
a set of requirements that make it hard to move your own infrastructure
|
||
|
around.
|
||
|
}
|
||
|
@components.ContentP() {
|
||
|
At the heart of this project is that I hate the enshitifiation of
|
||
|
Open Source that has been going on, where its just another way to make
|
||
|
money and control the eco system. RedHat tried to do it by locking
|
||
|
down their source code, Proxmox does it by making sure anything you
|
||
|
do on Proxmox is tied to Proxmox (no offense to Proxmox), and even
|
||
|
Hashicorp, who I loved so dearly, changed from a pure Open Source
|
||
|
licensing model to one that protects the business over the community
|
||
|
}
|
||
|
@components.ContentP() {
|
||
|
I will not let that happen here.
|
||
|
}
|
||
|
@components.ContentP() {
|
||
|
This project will seek to use the Unix philosophy, of building off
|
||
|
of existing standards, combining tools, and having one tool do one
|
||
|
job well. This does not mean there will be one application for each
|
||
|
aspect of the job, but that this application stack will manage Libvirtd
|
||
|
well, and have individual and configurable paths to manage each sub-aspect
|
||
|
of the libvirt stack. This stack will not create a Ceph cluster for you,
|
||
|
it leaves you to do that. It will not even talk to a ceph cluster.
|
||
|
It will, however, let you add that cluster via configuration options to
|
||
|
define it as a storage pool that libvirt can use.
|
||
|
}
|
||
|
@components.ContentP() {
|
||
|
If you want something that will allow you to use a single interface
|
||
|
to create all sub aspects that can be used by libvirt
|
||
|
(managing all firewall rules, creating a ceph cluster, etc.),
|
||
|
use something like Proxmox which includes that builtin
|
||
|
functionality. This isn't the stack for you.
|
||
|
}
|
||
|
</div>
|
||
|
}
|
||
|
}
|
||
|
}
|