I've also been
working implementing a provisioning solution for our developers. We do
automated installation of hundreds of machines of which many are
underutilized. Many are newer machines with some pretty beefy specs (8
cores and at least 8 gigs of ram). I've done a lot of thinking in
a vacuum about what would be ideal. There's a lot out there I don't
know so I hope you give me some grace as I talk. So I want to be able
to pull these machines into a cluster of hypervisors; a VM fabric aggregated via software. Or thought of in another way a p2p vm cluster.
In some ways I think oVirt is the closest and in someways I think
simply extending libvirt would be better and sometimes I think it
should be a new project. So I thought I'd post this and see what
people think. Since I'm still unsure as to where the proper place to
abstract this
is, I'll use the working package name of genet for the rest of the
discussion.
From
my perspective the reason I can't use most of the open source
virtualization solutions for more than local vm's is one of
management. They're great for one machine but as soon as you get to
more than one machine there is a lot of human administrative overhead.
oVirt seems like it could be really good, but in an existing
environment it requires a lot of substantial changes and requires
significant modification to work with an existing provisioning
infrastructure. So as I imagined a silver bullet I used biology as a
metaphor and used started thinking with the idea of "every piece
contains the image of the whole." So the here's the 10,000 ft
overview of an idea.
1. cluster administration is done from the command line
2. cluster administration can be performed from any node.
3. a new node can join a cluster on a local subnet with one command.
4. local storage resources are presented to the cluster so there is no need to have predefined NAS/SAN/iSCSI
5. cluster will load balance vm instances from node to node.
6. a node shouldn't need more than one nic but adding additional nic's provides failover and load balancing.
I'm kind of ignoring storage at this point, but I think it's the
biggest pieces of the puzzle as long as migration needs network/san
storage. The ideal scenario would be something really simple like if I
have SAN connectivity use that else I use some sort of cluster file
system which adds in local storage and doesn't require reformating, but
that might be wistful thinking.
Use cases
1. looking for clusters on the same subnet via avahi
# [yum|apt-get] install genet
# genet list clusters
forsythia
hazelnut
sumac
# rhizome info sumac
Password:
sumac info:
8 nodes
64 Cores
128 G Ram
1.5 T storage
50% Cluster CPU utilized
75% Memory utilized
80% Storage utilized
2. a machine joins an existing cluster
# genet join sumac
Password:
localhost has successfully joined sumac
#
Help output
#genet -h
usage: genet [options] command
genet is a simple command line interface for creating and maintaining a cluster of hypervisors.
Commands:
create cluster [cluster name]
create vm [vm name] (probably integrates with virt-install)
evacuate [hostname] - migrate all vm instances off of [hostname] (defaults to localhost)
list clusters [hostname] - list clusters on local subnet or via hostname on another network/subnet
list vm [cluster] - list all vm instances in a cluster defaults to cluster local node is in.
console [vmname] - virt-viewer to vmname
So this all begs the the statement, "show me the code" and I think that
perfectly valid. I may write some code, but I don't want to duplicate
effort and I want to find out what other people are thinking. I
welcome your thoughts. </soapbox>
Regards,