“KVM (Kernel-based Virtual Machine) on Ubuntu 16.04Lts Server Edition”

ubuntu-16-04-lts

UBUNTU SERVER

What is a hypervisor?

KVM is a hypervisor that creates and run virtual machines. A server on which a hypervisor is running is called as a host machine. Each virtual machine is referred to as a guest machine. Using KVM, you can run multiple operating systems such as CentOS, OpenBSD, FreeBSD, MS-Windows running unmodified.

KERNEL-BASED VIRTUAL MACHINE (KVM)

  1. The host server located in the remote data center and it is a headless server.
  2. All commands in this tutorial typed over the ssh based session.
  3. You need a vnc client to install the guest operating system.

01 STEP – INSTALL KVM

from terminal run:

$: sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker

02 STEP – VERIFY KVM INSTALLATION

from terminal run:

$: kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

03 STEP: CONFIGURATION BRIDGED NETWORKING

from terminal run:

$: sudo cp /etc/network/interfaces /etc/network/interfaces.backup
$: sudo nano /etc/network/interfaces

Edit/append as follows:

 auto br0
 iface br0 inet static
         address 10.18.44.26
         netmask 255.255.255.192
         broadcast 10.18.44.63
         dns-nameservers 10.0.80.11 10.0.80.12
         # set static route for LAN
 	     post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.18.44.1
 	     post-up route add -net 161.26.0.0 netmask 255.255.0.0 gw 10.18.44.1
         bridge_ports eth0
         bridge_stp off
         bridge_fd 0
         bridge_maxwait 0
 
 # br1 setup with static wan IPv4 with ISP router as a default gateway
 auto br1
 iface br1 inet static
         address 208.43.222.51
         network 255.255.255.248
         netmask 255.255.255.0
         broadcast 208.43.222.55
         gateway 208.43.222.49
         bridge_ports eth1
         bridge_stp off
         bridge_fd 0
         bridge_maxwait 0

Save and close the file. Restart the networking service, enter:

$: sudo systemctl restart networking

Verify it:

$: sudo brctl show

04 STEP – CREATE OUR FIRST VM

We’re going to create a Debian 8.x VM: In this example, I’m creating Debian 8.5 VM with 2GB RAM, 2 CPU core, 2 nics (1 for lan and 1 for wan) and 40GB disk space, enter:

 $: cd /var/lib/libvirt/boot/
 $: sudo wget https://mirrors.kernel.org/debian-cd/current/amd64/iso-dvd/debian-8.5.0-amd64-DVD-1.iso
 $: sudo virt-install \
 --virt-type=kvm \
 --name=debina8 \
 --ram=2048 \
 --vcpus=2 \
 --os-variant=debian8 \
 --virt-type=kvm \
 --hvm \
 --cdrom=/var/lib/libvirt/boot/debian-8.5.0-amd64-DVD-1.iso \
 --network=bridge=br0,model=virtio \
 --network=bridge=br1,model=virtio \
 --graphics vnc \
 --disk path=/var/lib/libvirt/images/debian8.qcow2,size=40,bus=virtio,format=qcow2

To configure vnc login from another terminal over ssh and type:

$: sudo virsh dumpxml debian8 | grep vnc
 <graphics type='vnc' port='5904' autoport='yes' listen='127.0.0.1'>

Please note down the port value (i.e. 5904). You need to use an SSH client to setup tunnel and a VNC client to access the remote vnc server. Type the following SSH port forwarding command from your client/desktop:

$ ssh vivek@server1.cyberciti.biz -L 5904:127.0.0.1:5904

Once you have ssh tunnel established, you can point your VNC client at your own 127.0.0.1 (localhost) address and port 5904 to continue with Debian Linux 8.5 installation.

Fig.0 : VNC client to complete CentOS 7.x installation

05 STEP – USEFUL COMMANDS

Let us see some useful commands.

List a running vms/domains

$: sudo virsh list

Shutodwn a vm/domain called openbsd

$: sudo virsh shutdown openbsd

Start a vm/domain called openbsd

$: sudo virsh start openbsd

Suspend a vm/domain called openbsd

$: sudo virsh suspend openbsd

Reboot (soft & safe reboot) a vm/domain called openbsd

$: sudo virsh reboot openbsd

Reset (hard reset/not safe) a vm/domain called openbsd

$: sudo virsh reset openbsd

Delete/remove a vm/domain called openbsd

$: sudo virsh undefine openbsd
$: sudo virsh destroy openbsd

“cya to the next 1…. Njoy !”
bye dakj

Disclaimer: All the tutorials included on this site are performed in a lab environment to simulate a real world production scenario. As everything is done to provide the most accurate steps to date, we take no responsibility if you implement any of these steps in a production environment.

“We learn from our mistakes”

Advertisements