Kernel-based Virtual Machine (KVM) is a popular virtualization solution supported by modern Linux kernels. It takes advantage of the CPU support for virtualization (Intel VT and AMD-V). You can run unmodified operating systems such as Linux, FreeBSD, and Microsoft Windows using KVM. For more information, see the compatibility list.
For our Ubuntu 16.04 host, we have installed the following packages via apt (see https://help.ubuntu.com/lts/serverguide/libvirt.html):
- libvirt-bin
- qemu-kvm
- virt-manager
- virtinst
- virt-viewer
For a CentOS 7 host, install the following packages via yum:
- libvirt
- qemu-kvm
- qemu-img
- virt-install
- virt-manager
- virt-client
For other Linux distributions, refer to their respective manuals.
You can create virtual machines using the command line as long as you have installed the proper packages. For example, the following creates a CentOS 7 guest with 2 virtual CPUs and 4GiB of RAM:
virt-install -n centos-test \
--ram 4096 \
--vcpus 2 \
--metadata description='CentOS – test',title='CentOS - test' \
--cdrom /usr/local/src/dists/CentOS/7/CentOS-7-x86_64-Everything-1511.iso \
--os-variant centos7.0 \
--disk path=/var/lib/libvirt/images/centos-test-storage0.qcow2,size=40,format=qcow2 \
--network bridge=br0,model=virtio \
--graphics spice
If you want to have a processor topology of 2 sockets and 2 cores each, you can specify that as:
....
--vcpus sockets=2,cores=2
....
Verification of the processor topology can be done using the utility lscpu, part of util-linux.
The --cdrom parameter points to the installation disc image and the --disk parameter points to the final installed OS image. In this example, we also specify the use of a bridge (the network device br0 in this case) to make it appear on the local host’s network as a regular host. The parameter --graphics specifies Spice as the means of connecting to the VM console.
Naturally, you can also use a GUI (virt-manager) to create the VM, but the command line is more fun, isn’t it? 😉 The man page for virt-install has the requisite information on how to use it. More examples are also available in the man page.