How to Install KVM on CentOS/RHEL 8

Kernel-based Virtual Machine (KVM in short) is an open-source and de facto standard virtualization solution that is tightly integrated into Linux. It is a loadable kernel module that turns Linux into a type-1 (bare-metal) hypervisor that creates a virtual operating platform used to run virtual machines (VMs).

Under KVM, each VM is a Linux process that is scheduled and managed by the kernel and has private virtualized hardware (i.e CPU, network card, disk, etc.). It also supports nested virtualization, which allows you to run a VM inside another VM.

Some of its key features include support for a wide range of Linux-supported hardware platforms (x86 hardware with virtualization extensions (Intel VT or AMD-V)), it provides enhanced VM security and isolation using both SELinux and secure virtualization (sVirt), it inherits kernel memory management features, and it supports both offline and real-time migration (migration of a running VM between physical hosts).

In this article, you will learn how to install KVM virtualization, create and manage Virtual Machines in CentOS 8 and RHEL 8 Linux.

Prerequisites

  1. A fresh installation of CentOS 8 server
  2. A fresh installation of RHEL 8 server
  3. A RedHat subscription enabled on RHEL 8 server

Additionally, make sure that your hardware platform supports virtualization by running the following command.

# grep -e 'vmx' /proc/cpuinfo		#Intel systems
# grep -e 'svm' /proc/cpuinfo		#AMD systems

Also, confirm that KVM modules are loaded in the kernel (they should be, by default).

# lsmod | grep kvm

Here is sample output on the test system which is Intel-based:

Check Virtualization Support on CentOS 8
Check Virtualization Support on CentOS 8

In a previous series of KVM guides, we showed how to create virtual machines in Linux using KVM (Kernel-based Virtual Machine) where we demonstrated how to create and manage VMs using virt-manager GUI tool (which is now deprecated according to the RHEL 8 documentation). For this guide, we will take a different approach, we will use the Cockpit web console.

Step 1: Setup Cockpit Web Console on CentOS 8

1. The cockpit is an easy-to-use, integrated and extendable web-based interface to administer a Linux server in a web browser. It enables you to perform system tasks such as configuring networks, administering storage, creating VMs, and inspecting logs with a mouse. It uses your system’s normal user logins and privileges, but other authentication methods are supported as well.

It comes pre-installed and enabled on freshly installed CentOS 8 and RHEL 8 system, if you don’t have it installed, install it using the following dnf command. The cockpit-machines extension should be installed to manage VMs based on Libvirt.

# dnf install cockpit cockpit-machines

2. When the package installation is complete, start the cockpit socket, enable it to auto-start at system boot and check its status to confirm that it is up and running.

# systemctl start cockpit.socket
# systemctl enable cockpit.socket
# systemctl status cockpit.socket
Verify Cockpit Status
Verify Cockpit Status

3. Next, add the cockpit service in the system firewall which is enabled by default, using the firewall-cmd command and reload the firewall configuration to apply the new changes.

# firewall-cmd --add-service=cockpit --permanent
# firewall-cmd --reload

4. To access the cockpit web console, open a web browser and use the following URL to navigate.

https://FQDN:9090/
OR
https://SERVER_IP:9090/

The cockpit uses a self-signed certificate to enable HTTPS, simply proceed with the connection when you get a warning from the browser. At the login page, use your server user account credentials.

Cockpit Login
Cockpit Login
Cockpit Dashboard
Cockpit Dashboard

Step 2: Installing KVM Virtualization CentOS 8

5. Next, install the virtualization module and other virtualization packages as follows. The virt-install package provides a tool for installing virtual machines from the command-line interface, and a virt-viewer is used to view virtual machines.

# dnf module install virt 
# dnf install virt-install virt-viewer

6. Next, run the virt-host-validate command to validate if the host machine is set up to run libvirt hypervisor drivers.

# virt-host-validate
validate host virtualization setup
validate host virtualization setup

7. Next, start the libvirtd daemon (libvirtd) and enable it to start automatically on each boot. Then check its status to confirm that it is up and running.

# systemctl start libvirtd.service
# systemctl enable libvirtd.service
# systemctl status libvirtd.service
Verify Libvirtd Service
Verify Libvirtd Service

Step 3: Set Up Network Bridge (Virtual Network Switch) via Cockpit

8. Now create a network bridge (virtual network switch) to integrate virtual machines to the same network as the host. By default, once libvirtd daemon is started, it activates the default network interface virbr0 that represents the virtual network switch which operates in NAT mode.

For this guide, we will create a network interface in a bridged mode called br0. This will enable virtual machines to be accessible on the host networks.

From the cockpit main interface, click on Networking, then click Add Bridge as indicated in the following screenshot.

Add Bridge Network
Add Bridge Network

9. From the pop-up window, enter the bridge name and select the bridge slaves or port devices (e.g enp2s0 representing the Ethernet interface) as shown in the following screenshot. Then click Apply.

Enter Network Bridge Settings
Enter Network Bridge Settings

10. Now when you look at the list of Interfaces, the new bridge should appear there and after a few seconds, the Ethernet interface should be disabled (taken down).

Verify New Network Bridge
Verify New Network Bridge

Step 4: Creating and Managing Virtual Machines via Cockpit Web Console

11. From the cockpit main interface, click on the Virtual Machines option as highlighted in the following screenshot. From the Virtual Machines page, click on Create VM.

Create New Virtual Machine
Create a New Virtual Machine

12. A window with options to create a new VM will display. Enter the Connection, Name (e,g ubuntu18.04), Installation Source Type (on the test system, we have stored ISO images under the storage pool i.e /var/lib/libvirt/images/), Installation Source, Storage, Size, Memory as shown in the following image. The OS Vendor and Operating System should be picked automatically after entering Installation Source.

Also check the option to immediately start the VM, then click Create.

Add New Virtual Machine in KVM
Add New Virtual Machine in KVM

13. After clicking Create from the previous step, the VM should be automatically started and it should boot using the ISO image provided. Proceed to install the guest operating system (Ubuntu 18.04 in our case).

Install Guest OS on KVM
Install Guest OS on KVM

If you click on Network Interfaces of the VM, the network source should indicate the newly created bridge network interface.

Network Bridge of VM
Network Bridge of VM

And during the installation, at the step of configuring a network interface, you should be able to notice that the VMs Ethernet interface receives an IP address from the DHCP server of the host network.

IP Address of VM
IP Address of VM

Note that you need to install the OpenSSH package to access the guest OS via SSH from any machine on the host network, as described in the last section.

14. When the guest OS installation is complete, reboot the VM, then go to Disks and detach/remove the cdrom device under the VMs disks. Then click Run to start the VM.

Detach Cdrom After VM Installation
Detach Cdrom After VM Installation
Run VM Console
Run VM Console

15. Now under Consoles, you can log into the guest OS using a user account you created during the installation of the OS.

VM Login
VM Login

Step 5: Accessing a Virtual Machine Guest OS via SSH

16. To access the newly installed guest OS from the host network via SSH, run the following command (replace 10.42.0.197 with your guest’s IP address).

$ ssh [email protected]
Guest VM SSH Login
Guest VM SSH Login

17. To shut down, restart or delete a VM, click on it from the list of VMs, then use the buttons highlighted in the following screenshot.

Delete Guest VM from KVM
Delete Guest VM from KVM

That’s all for now! In this guide, we have shown how to install KVM virtualization packages, and create and manage VMs via the cockpit web console. For more detail, see: Getting started with virtualization in RHEL 8.

If you liked this article, then do subscribe to email alerts for Linux tutorials. If you have any questions or doubts? do ask for help in the comments section.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

6 thoughts on “How to Install KVM on CentOS/RHEL 8”

  1. By default when creating a VM the disks created are thin provisioned or thick provisioned? if are thick provisioned how can I create disks in thin provision?

    Reply
    • @Gabo

      You can use the virt-sparsify tool which makes a virtual machine disk sparse a.k.a. thin-provisioned: http://libguestfs.org/virt-sparsify.1.html.

      Reply
  2. There’s a typo in section 2:7. I assume you don’t mean to start the `libvirtd.service‘ 3 times. :)

    # systemctl enable --now libvirtd.service
    # systemctl is-active libvirtd.service
    
    Reply

Got something to say? Join the discussion.

Have a question or suggestion? Please leave a comment to start the discussion. Please keep in mind that all comments are moderated and your email address will NOT be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.