How To Configure KVM Virtualization on Ubuntu v20.04 Hosts

You are here:
< All Topics

To start the KVM virt manager GUI enter:

 

virt-manager

 

alternatively, VMs can be created, started, and modified using the virt-install command to create a VM via Linux terminal.

 

The syntax is:

 

virt-install –option1=value –option2=value …

 

 

Options behind the command serve to define the parameters of the installation:

 

Option Description
–name The name you give to the VM
–description A short description of the VM
–ram The amount of RAM you wish to allocate to the VM
–vcpus The number of virtual CPUs you wish to allocate to the VM
–disk The location of the VM on your disk (if you specify a qcow2 disk file that does not exist, it will be automatically created)
–cdrom The location of the ISO file you downloaded
–graphics Specifies the display type

 

KVM componemt packages:

 

qemu-kvm – The main package
libvirt – Includes the libvirtd server exporting the virtualization support
libvirt-client – This package contains virsh and other client-side utilities
virt-install – Utility to install virtual machines
virt-viewer – Utility to display graphical console for a virtual machine

 

 

Check for Virtualization Support on Ubuntu 20.04

 

Before installing KVM, check if your CPU supports hardware virtualization:

 

egrep -c ‘(vmx|svm)’ /proc/cpuinfo

 

Check the number given in the output:

 

root@asus:~# egrep -c ‘(vmx|svm)’ /proc/cpuinfo

8
root@asus:~#

 

 

If the command returns a value of 0, the CPU processor is not capable of running KVM. If it returns any other number, then it means you can proceed with the installation.

 

Next check if your system can use KVM acceleration:

 

root@asus:~# kvm-ok

 

INFO: /dev/kvm exists
KVM acceleration can be used
root@asus:~#

 

If kvm-ok returns an error stating KVM acceleration cannot be used, try installing cpu-checker:

 

sudo apt install cpu-checker

 

Then restart the terminal.

 

You can now start installing KVM.

 

Install KVM on Ubuntu 20.04

Overview of the steps involved:

 

Install related packages using apt
Authorize users to run VMs

Verify that
the installation was successful

Step 1: Install KVM Packages

 

First, update the repositories:

 

sudo apt update

 

then:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

 

root@asus:~# apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

 

Reading package lists… Done
Building dependency tree
Reading state information… Done

 

bridge-utils is already the newest version (1.6-3ubuntu1).
libvirt-clients is already the newest version (6.6.0-1ubuntu3.5).
libvirt-daemon-system is already the newest version (6.6.0-1ubuntu3.5).
qemu-kvm is already the newest version (1:5.0-5ubuntu9.9).

 

0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.

 

root@asus:~#

 

Step 2: Authorize Users

 

1. Only members of the libvirt and kvm user groups can run virtual machines. Add a user to the libvirt group:

 

sudo adduser ‘username’ libvirt

 

Replacing username with the actual username, in this case:

 

adduser kevin libvirt

 

root@asus:~# adduser kevin libvirt
The user `kevin’ is already a member of `libvirt’.
root@asus:~#

 

 

Adding a user to the libvirt usergroup

 

Next do the same for the kvm group:

 

sudo adduser ‘[username]’ kvm

 

Adding user to the kvm usergroup

 

adduser kevin kvm

root@asus:~# adduser kevin kvm
The user `kevin’ is already a member of `kvm’.
root@asus:~#

 

 

(NOTE: I had already added this information and installation during a previous session)

 

To remove a user from the libvirt or kvm group, replace adduser with deluser using the above syntax.

 

Step 3: Verify the Installation:

 

virsh list –all

 

 

root@asus:~# virsh list –all
Id Name State
————————————–
– centos-base centos8 shut off
– ceph-base centos7 shut off
– ceph-mon shut off
– ceph-osd0 shut off
– ceph-osd1 shut off
– ceph-osd2 shut off
– router1 10.0.8.100 shut off
– router2 10.0.9.100 shut off

 

root@asus:~#

 

The above list shows the virtual machines that already exist on this system.

 

 

 

Then make sure that the needed kernel modules have been loaded:

 

 

root@asus:~# lsmod | grep kvm
kvm_amd 102400 0
kvm 724992 1 kvm_amd
ccp 102400 1 kvm_amd
root@asus:~#

 

If your host machine is running an Intel CPU, then you will see kvm_intel displayed. In my case I am using an AMD processor, so the kvm_amd is the one displayed.

 

If the modules are not loaded automatically, you can load them manually using the modprobe command:

 

# modprobe kvm_intel

 

Finally, start the libvirtd daemon. The following command both enables it at boot time and starts it immediately:

 

systemctl enable –now libvirtd

 

root@asus:~# systemctl enable –now libvirtd
root@asus:~#

 

 

Use the systemctl command to check the status of libvirtd:

 

systemctl status libvirtd

root@asus:~# systemctl status libvirtd
● libvirtd.service – Virtualization daemon
Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-08-18 22:17:51 CEST; 21h ago
TriggeredBy: ● libvirtd-ro.socket
● libvirtd.socket
● libvirtd-admin.socket
Docs: man:libvirtd(8)
https://libvirt.org
Main PID: 1140 (libvirtd)
Tasks: 21 (limit: 32768)
Memory: 29.3M
CGroup: /system.slice/libvirtd.service
├─1140 /usr/sbin/libvirtd
├─1435 /usr/sbin/dnsmasq –conf-file=/var/lib/libvirt/dnsmasq/default.conf –leasefile-ro –dhcp-script=/usr/lib/libvirt/>
├─1436 /usr/sbin/dnsmasq –conf-file=/var/lib/libvirt/dnsmasq/default.conf –leasefile-ro –dhcp-script=/usr/lib/libvirt/>
├─1499 /usr/sbin/dnsmasq –conf-file=/var/lib/libvirt/dnsmasq/10.0.8.0.conf –leasefile-ro –dhcp-script=/usr/lib/libvirt>
└─1612 /usr/sbin/dnsmasq –conf-file=/var/lib/libvirt/dnsmasq/10.0.9.0.conf –leasefile-ro –dhcp-script=/usr/lib/libvirt>

Aug 19 19:50:39 asus dnsmasq[1435]: reading /etc/resolv.conf
Aug 19 19:50:39 asus dnsmasq[1612]: using nameserver 127.0.0.53#53
Aug 19 19:50:39 asus dnsmasq[1499]: using nameserver 127.0.0.53#53
Aug 19 19:50:39 asus dnsmasq[1435]: using nameserver 127.0.0.53#53
Aug 19 19:50:39 asus dnsmasq[1499]: reading /etc/resolv.conf
Aug 19 19:50:39 asus dnsmasq[1435]: reading /etc/resolv.conf
Aug 19 19:50:39 asus dnsmasq[1499]: using nameserver 127.0.0.53#53
Aug 19 19:50:39 asus dnsmasq[1435]: using nameserver 127.0.0.53#53
Aug 19 19:50:39 asus dnsmasq[1612]: reading /etc/resolv.conf
Aug 19 19:50:39 asus dnsmasq[1612]: using nameserver 127.0.0.53#53
lines 1-28/28 (END)

 

next, install virt-manager, a GUI tool for creating and managing VMs:

 

sudo apt install virt-manager

 

root@asus:~# apt install virt-manager
Reading package lists… Done
Building dependency tree
Reading state information… Done
virt-manager is already the newest version (1:2.2.1-4ubuntu2).
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
root@asus:~#

 

 

To use the Virt Manager GUI

 

1. Start virt-manager with:

 

sudo virt-manager

 

 

alternatively, usingthe virt-install command line tool:

 

Use the virt-install command to create a VM via Linux terminal. The syntax is:

 

 

virt-install –option1=value –option2=value …

 

Options behind the command serve to define the parameters of the installation.

 

Here is what each of them means:

 

Option Description
–name The name you give to the VM
–description A short description of the VM
–ram The amount of RAM you wish to allocate to the VM
–vcpus The number of virtual CPUs you wish to allocate to the VM
–disk The location of the VM on your disk (if you specify a qcow2 disk file that does not exist, it will be automatically created)
–cdrom The location of the ISO file you downloaded
–graphics Specifies the display type

 

 

currently running virtual machines:

 

 

virt-install –help

 

To create a virtual machine using the virt-install CLI command instead of using virt-manager GUI:

 

Installing a virtual machine from an ISO image

# virt-install \
–name guest1-rhel7 \
–memory 2048 \
–vcpus 2 \
–disk size=8 \
–cdrom /path/to/rhel7.iso \
–os-variant rhel7

 

The –cdrom /path/to/rhel7.iso option specifies the VM will be installed from the CD or DVD image from the specified location.

 

Importing a virtual machine image from virtual disk image:

 

# virt-install \
–name guest1-rhel7 \
–memory 2048 \
–vcpus 2 \
–disk /path/to/imported/disk.qcow \
–import \
–os-variant rhel7

 

The –import option specifies the virtual machine will be imported from virtual disk image specified by –disk /path/to/imported/disk.qcow option.

 

Installing a virtual machine from a network location:

# virt-install \
–name guest1-rhel7 \
–memory 2048 \
–vcpus 2 \
–disk size=8 \
–location http://example.com/path/to/os \
–os-variant rhel7

The –location http://example.com/path/to/os option specifies that the installation tree is at the specified network location.

 

Installing a virtual machine with Kickstart by using a kickstart file:

 

–name guest1-rhel7 \
–memory 2048 \
–vcpus 2 \
–disk size=8 \
–location http://example.com/path/to/os \
–os-variant rhel7 \
–initrd-inject /path/to/ks.cfg \
–extra-args=”ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8″

 

The initrd-inject and the extra-args options specify that the virtual machine will be installed using a Kickstarter file.

 

 

To change some VM machine parameters you can use virsh as an alternative to virt-manager GUI. For example:

 

virsh edit linuxconfig-vm

 

this opens the VM config file for the vm specified.

 

Finally, reboot the VM:

 

virsh reboot linuxconfig-vm

 

 

 

To autostart a virtual machine on host boot-up using virsh:

 

virsh autostart linuxconfig-vm

 

To disable this option:

 

virsh autostart –disable linuxconfig-vm

 

 

 

 

Table of Contents