WebVirtCompute is a daemon for deploying and managing virtual machines based on FastAPI and libvirt. It is designed to be used for compute nodes and backend. This project provides a REST API to manage virtual machines and their resources, making it easy to automate virtual machine management.
- AlmaLinux 8
- AlmaLinux 9
- Rocky Linux 8
- Rocky Linux 9
- Debian 12 (Beta)
- Ubuntu 22.04 (Beta)
- qemu
- libvirt
- firewalld
- prometheus
- libguestfs-tools
- NetworkManager
- It is a daemon for managing virtual machines based on FastAPI and libvirt.
- It is designed to be used for compute nodes and backend.
- It is a lightweight and fast daemon.
- It is easy to install and configure.
- It is only one binary file.
- It is use TLS to secure the communication between the client and the daemon.
Install NetworkManager and firewalld:
sudo apt install -y network-manager firewalld
and update /etc/netplan/00-installer-config.yaml
:
network:
version: 2
renderer: NetworkManager
Install NetworkManager and firewalld:
sudo apt install -y network-manager firewalld
and change managed
to true
in the file /etc/NeworkManager/NetworkManager.conf
:
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=true
Before installation, you have to prepare br-ext
and br-int
bridges for public and private networks accordingly.
please note you will also need two networking interfaces; for example eno1
& eno2
Example how to create and setup br-ext
bridge on eno1
interface:
nmcli conn add type bridge ifname br-ext con-name br-ext
nmcli conn add type bridge-slave ifname eno1 con-name eno1 master br-ext # NEED TO CHANGE eno1 ON YOUR INTERFACE NAME
nmcli conn modify br-ext ipv4.method manual ipv4.addresses 10.255.0.1/16 # for floating IP feature - DO NOT CHANGE
nmcli conn modify br-ext ipv4.method manual +ipv4.addresses 169.254.169.254/16 # for metadata service - DO NOT CHANGE
nmcli conn modify br-ext ipv4.method manual +ipv4.addresses 192.168.50.10/24 # NEED TO CHANGE 192.168.50.10/24 ON YOUR CIDR
nmcli conn modify br-ext ipv4.method manual ipv4.gateway 192.168.50.1 # NEED TO CHANGE 192.168.50.1 ON YOUR GATEWAY IP
nmcli conn modify br-ext ipv4.method manual ipv4.dns 8.8.8.8,1.1.1.1
nmcli conn modify br-ext bridge.stp no
nmcli conn modify br-ext 802-3-ethernet.mtu 1500
nmcli conn up eno1 # NEED TO CHANGE eno1 ON YOUR INTERFACE NAME
nmcli conn up br-ext
Exampale how to create and setup br-int
bridge on eno2
interface:
nmcli conn add type bridge ifname br-int con-name br-int ipv4.method disabled ipv6.method ignore
nmcli conn add type bridge-slave ifname eno2 con-name eno2 master br-int # NEED TO CHANGE eno2 ON YOUR INTERFACE NAME
nmcli conn modify br-int bridge.stp no
nmcli conn modify br-int 802-3-ethernet.mtu 1500
nmcli conn up eno2 # NEED TO CHANGE eno2 ON YOUR INTERFACE NAME
nmcli conn up br-int
For bridge interface br-int
we don't need to set IP addresses.
This script will install and configure libvirt
with qemu:///system
URI. You can always change settings libvirt
and libguestfish
if that is needed. Only create and set up br-ext
and br-int
bridges before running this script.
curl -fsSL https://raw.githubusercontent.com/webvirtcloud/webvirtcompute/master/scripts/libvirt.sh | sudo bash
This script will install and configure prometheus
with node_exporter
and libvirt_exporter
. You can always change settings for prometheus
if that is needed.
curl -fsSL https://raw.githubusercontent.com/webvirtcloud/webvirtcompute/master/scripts/prometheus.sh | sudo bash
Enable firewalld service:
systemctl enable --now firewalld
Base firewall rules:
WEBVIRTBACKED_IP=<you backend IP> # need put your backend IP
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -m physdev --physdev-is-bridged -j ACCEPT # Bridge traffic rule
firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -d 10.255.0.0/16 -j MASQUERADE # Floating IP feature rule
firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -i br-ext '!' -s 169.254.0.0/16 -d 169.254.169.254 -p tcp -m tcp --dport 80 -j DNAT --to-destination $WEBVIRTBACKED_IP:80 # CLoud-init metadata service rule
firewall-cmd --permanent --zone=trusted --add-source=169.254.0.0/16 # Move cloud-init metadata service to trusted zone
firewall-cmd --permanent --zone=trusted --add-interface=br-ext # Move br-ext to trusted zone
firewall-cmd --permanent --zone=trusted --add-interface=br-int # Move br-int to trusted zone
firewall-cmd --reload
curl -fsSL https://raw.githubusercontent.com/webvirtcloud/webvirtcompute/master/scripts/install.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/webvirtcloud/webvirtcompute/master/scripts/update.sh | sudo bash
WebVirtCompute uses a configuration file to set up the daemon. The default configuration file is located at /etc/webvirtcompute/webvirtcompute.ini
. You have to copy token
and add it to WebVirtCloud admin panel when you add a new compute node.
make -f Makefile.rockylinux8 compile
make -f Makefile.rockylinux8 package
You can find the archive with binary in release
directory.
You can download already built binary for:
WebVirtCompute is released under the Apache 2.0 Licence. See the bundled LICENSE
file for details.