Sharing my experience using KVM + virt-manager + Libvirt and proxmox as an allinone solution.
What is KVM?
KVM stands for kernel virtual machine which is a kernel module. Enabling this feature, turns your Linux machine into a hypervisor type one.
What is Libvirt?
Since KVM is a kernel module, to manage virtual machines, you need an interface (command line tool) to use this kernel module, Libvirt is an API which has a command line tool called virsh. Libvirt is not only an API, it has also built in storage and networking components which allows you to create multiple types of networks and storage for virtual machines.
Using virsh, you can almost do anything.
What is virt-manager?
It’s a desktop application that connects to Libvirt using Linux socket or SSH, and allows your to manage VMs, network, storage and …
This can be connected to multiple Libvirt API(KVM machines)
KVM pros:
1) Easy to install, you can install it on any Linux machine, (server or desktop) with a simple command
2) Has bigger community, so it turns out to have fewer bugs.
3) You can install it on a Linux desktop, so using the same machine, you can enjoy your hypervisor along with your Linux desktop.
4) Using virt-manager, you can manage multiple KVM machines. So you will not need to login to different GUI to manage multiple KVM hypervisors, as virt-manager allows you to add multiple KVM machines over SSH.
5) Backend storage, KVM support multiple backend storages line directory, partition, dedicated hard disk, LVM, glusterfs and many more.
Cons:
1) By default, it doesn’t have clustering, and in order to setup a cluster environment using KVM, you need additional efforts to install and configure a cluster solution like corosync.
2) Less network features, Libvirt supports only 4 types of networks, bridge, routing, NAT and isolated network. So if you need some other network types, again you need to use some other Linux utilities to set it up.
What is Proxmox?
Proxmox is a complete virtualization solution that has a user friendly GUI, allowing you to manage virtual machines, network and storage.
Proxmox also supports the Linux containers () allowing you to deploy both virtual machines and containers.
Pros:
1) It has built in Ceph storage installation, as easy as clicking on a button to deploy Ceph storage, but you need minimum of 3 nodes.
2) has so many networking solutions, like xvlan. Easy to configure using the GUI
3) supports Linux containers (LXC)
4) Has Built in clustering, but again you need minimum of 3 nodes to deploy the cluster.
5) Load balancing and live migration feature, in case one of the nodes in cluster goes down.
6) Auto backup virtual machines
7) Has a command line utility like Libvirt, so you can almost do any thing via terminal.
Cons;
1) you can not use the machine for some other purposes as there is no GUI and the machine should be dedicated to your VMs.
2) It’s done on the top of Debian. Unlike KVM, you can install it on any Linux distribution of your choice.
3) For clustering, for every node you have in your cluster, there is one GUI which they all do the same things. So if you have a 7 node cluster, you have 7 GUIs. Which I personally found it useless.
4) There is an annoying bug in recent version which makes you not to be able to shutdown or reboot virtual machines. The shutdown and reboot button simply don’t work, without showing any errors or logs. So you have to do it through command line, and you need to run a couple of commands to be able to shutdown a machine.
5) It has its own api and not using the Libvirt API, so you can not manage VMs using virt-manager
Conclusion;
If your doing it for learning purpose or you don’t need the clustering, I would recommend you to go with KVM + Libvirt
But if you are a host provider, or you need to have clustering and live migration go with Proxmox.
Note: to be able to use the KVM+libvirt, you need to have a deep knowledge of virtualizations.