KVM (Kernel Virtual Machine) is the Linux virtualization technology intergrated into the Linux kernel. It's super efficient and performant but we found a lot of the userland tooling needlessly involved and overwrought.
One of the effects of this has been the growing traction of other solutions on Linux. And this should give everyone pause. With KVM integrated why are users preferring something else?
At Flockport we need to spin up a lot of VMs of various Linux distributions for testing everything from the Flockport installer to containers, networking and storage and we felt the existing solutions were involved and needlessly complex. At one point we remember spending hours debugging VXLAN issues only to discover libvirt was adding a large number of iptables rules that dropped VXLAN traffic and none of the rules were documented or their rationale.
We feel there is already inbuilt complexity in networking, distributed storage, applications and scalability and adding needless complexity at the VM or container layer is an antipattern. These should be as simple as possible.
So we rolled out own solution. We created something that is extremely lightweight, non-intrusive, easy to use and end user focused. Here is a peek.
This is originally designed as the VM provider module for Flockport but we felt it could be useful to show general users how easy it can be to use KVM on Linux and decided to preview it as a standalone.
Some of the key areas we looked at was setup, VM creation, networking and disk management. We have completely streamlined these areas with a strong focus on end users.
The installer currently supports all the popular distributions and is a 60kb download. It completely sets up the VM layer from scratch for a more streamlined end user experience. It also sets up a network bridge by default. This bridge can be used when creating VMs to give them network connectivity.
VMs can be created in seconds with a single command.
Networking and networking related issues can often lead to configuration complexity and hours wasted debugging. We paid special attention to this to provide a streamlined experience.
Flockport already provides comprehensive networking functionality and we repurposed some of those capabilities for Kvmapp.
Users can add multiple network interfaces to VMs linked to bridges and also create new bridges if required with a few commands.
We also looked at disk and image management. Users can download cloud disk images and use these to directly create new VMs. New disk images can be created in seconds and multiple disk images can be easily added and removed from VMs.
Kvmapp itself provides a VM image hub accessible from the app that lets users download ready to use VM images of popular Linux distributions. All images are signed and downloaded securely.
We also streamlined snapshots and clones so these can be created and managed much more simply with better visibility.
Setting cpus and memory for VMs are available with a single command.
Another thing is visibility of running VM, networks, disks and snapshots and clones. Existing solutions do not provide a single overview. This is another area we tried to simplify and there is a lot of data and running state of VMs that is provided by Kvmapp to users.
Apart from this we also looked at areas like VNC and Spice and how to make these features accessible with a single command.
As we mentioned Kvmapp is designed as the VM provider module for Flockport. Once Kvmapp is integrated into Flockport all the Flockport features like provisioning, remote management, service discovery, overlay networks and distributed storage become available and will provide a single interface to deploy and manage containers and VMs across multiple hosts.
The Flockport build system with recipes will be extended to VMs so users can use recipes to build VMs like containers. A REST api is also in development and this will be leveraged by the Flockport UI layer. This will be previewed to users shortly.
Kvmapp is released under the GPL2 and is available for preview here. The documentation is available here.