In this article, scenario which is used is a ‘nested virtualization’. Read this article titled ‘Configure KVM for Nested Virtualization‘ for more information about it. This is a virtualization type which is an installation of a virtual machine or guest machine inside another virtual machine or guest machine.
For a guest machine which is already run inside a virtual server management such as Virtual Machine Manager, VMWare Workstation, etc, it can also serve as a new Host Machine so that it can achieve its purpose to run another Guest Machine inside.
For that purpose, in the Guest Machine which is trying to be configured to run as Host Machine, the Guest Machine itself is needed to be installed some important packages such as KVM and Libvirt.
In this article, below are descriptions and explanations for the steps which can be taken to be implemented CentOS 7, below are:
1. Install the packages correlate with KVM and Libvirt by executing the following command :
yum -y install kvm libvirt
2. Edit Libvirt configuration file which is located in : /etc/syconfig/libvirt.conf
Original content of the file libvirt.conf which is opened using vim editor in a Guest Machine run inside Virtual Machine Manager :
Uncomment LIBVIRTD_ARGS=”listen” as shown below :
3. Edit another configuration file of Libvirt configuration located in : /etc/sysconfig/libvirtd.conf.
Below is the original Libvirt configuration file located in : /etc/libvirt/libvirtd.conf.
Uncomment the above entry located in /etc/libvirt/libvirtd.conf :
listen_tls = 0
listen_tcp = 1
It can be shown in the following image :
3. Restart Libvirt daemon or Libvirt service by executing the following command as follows :
service libvirtd restart
systemctl restart libvirtd
It can be viewed in the following image :
After starting the service, to make sure that the service has already run, it can be done by executing the following command :
- Create a new user to access Libvirt by typing the following command :
saslpasswd2 -a libvirt my_libvirt sasldblistusers2 -f /etc/libvirt/passwd.db
The above execution command can be shown as follows :
5. Remove all default network configuration relates to Libvirt which has been installed. Check the list of available network by executing the following command :
The output of the above command’s execution is shown as follows :
root@hostname:~# virsh net-list Name State Autostart Persistent ---------------------------------------------------------- default active yes yes root@hostname:~#
Destroy the virtual network named ‘default’ where it is actually exist as the first time Libvirst has already been successfully installed :
virsh net-destroy default
Below is the output of the above command’s execution :
root@hostname:~# virsh net-destroy default Network default destroyed root@hostname:~#
6. After destroying network list named ‘default’ without any further restarting the service, just add certain port which is used to listen for request on behalf of libvirt service. In order to allow certain port to be accessed, it can be shown as follows :
firewall-cmd --permanent --add-port=16509/tcp
The above command is used to add libvirt port so that the traffic request which is coming to the port is allowed. The port which is allowed by the above command execution is 16509. The package which is allowed to go through this port is a TCP package.
After successfully add the port to the firewall, execute the above command to reload the rule in order for the rule can be activated and can be applied. After reloading the rule of the firewall, check the status of the firewall whether the firewall itself is running or not. Below is the command execution :
The output of the above command is shown as follows :
[root@localhost]# firewall-cmd --state running [root@localhost]#
7. To make sure that the libvirt service can be contacted, execute the following command :
virsh -c qemu+tcp://ip_address/system nodeinfo Description : virsh : The 'virsh' command above is actually a tool operated in a command line which is used to manage guests and hypervisor. -c : It is a command option used to connect to a specified URI which is actually the URI of the hypervisor qemu : It stands for Quick Emulator.It is a free and open-source hosted hypervisor performs hardware virtualization. tcp : It is a protocol used to connect to the hypervisor ip_address : The IP Address of the hypervisor system : connect as root to the daemon supervising QEmu and KVM domains nodeinfo : It is a parameter used to output information about the hypervisor.
Below is the sample of the output’s command execution for an example :
virsh -c qemu+tcp://192.168.122.1/system nodeinfo