Qemu-Kvm + Virt-Manager en Debian – Redes de Computadoras para las PYMES

Índice general de la serie: Redes de Computadoras para las PYMES: Introducción

En mayo del 2013 publicamos en este blog, sendos artículos dedicados a la instalación de Qemu-Kvm en Debian 7 «Wheezy«. Tienen vigencia aún. Como el panorama de la instalación y configuración en Debian 8 «Jessie» ha cambiado un poco, queremos actualizar el procedimiento.

No estaría demás que antes de sumergirse en la lectura de éste Cómo se hace, visitarán el artículo anterior Virtualización en Debian: Introducción – Redes de Computadoras para las PYMES, para tener un pequeño antecedente sobre el tema.

Sitios que sugerimos visitar

Observación

  • Copiamos la salida de los comandos, pues son mucho más didácticos que cualquier otra composición escrita por nosotros. Sugerimos lean detenidamente los mensajes de los diferentes mandatos, ya que es una de las mejores formas de aprender sin tener que, obligadamente, acudir a una búsqueda en Internet. Al menos, esa es nuestra opinión.

Instalación

Partimos de la instalación básica de un Debian «Jessie» según vimos en Instalación de estación de trabajo – Redes de Computadoras para las PYMES. Después, instalamos el Escritorio o Desktop de nuestra preferencia según vimos en 6 Escritorios en Debian – Redes de Computadoras para las PYMES.

Para este artículo escogimos el Cinnamon Desktop. Lo seleccionamos porque a muchos lectores les encanta este ambiente de escritorio. 😉

Los datos generales de nuestra workstation son:

Nombre del Dominio      : desdelinux.fan
Nombre del Equipo       : sysadmin
FQDN                    : sysadmin.desdelinux.fan
Dirección IP            : 192.168.10.3
SubNet                  : 192.168.10.0/24
Usuario normal          : buzz
Nombre completo usuario : Debian First OS Buzz

Comprobamos el soporte para la virtualización

En una consola ejecutamos:

buzz@sysadmin:~$ egrep -c "(svm|vmx)" /proc/cpuinfo
2

En nuestro caso el comando nos devuelve que poseemos 2 CPUs con el debido soporte.

Paquetes que instalaremos

Ante todo, nos enteramos de que vamos a instalar mediante los siguientes comandos:

buzz@sysadmin:~$ aptitude search kvm
p   ikvm                            - Java virtual machine for the CLI          
v   kvm                             -                                           
p   libicsharpcode-nrefactory-ikvm5 - C# Parsing and Refactoring Library - IKVM 
p   libikvm-native                  - native library for IKVM.NET               
p   nova-compute-kvm                - OpenStack Compute - compute node (KVM)    
p   qemu-kvm                        - QEMU Full virtualization on x86 hardware

buzz@sysadmin:~$ aptitude show nova-compute-kvm
Paquete: nova-compute-kvm                        
Nuevo: sí
Estado: sin instalar
Versión: 2014.1.3-11
Prioridad: extra
Sección: net
Desarrollador: PKG OpenStack <openstack-devel@lists.alioth.debian.org>
Arquitectura: all
Tamaño sin comprimir: 50.2 k
Depende de: adduser, dpkg-dev, qemu-kvm | kvm, libvirt-daemon-system,
            nova-common, nova-compute, python-libvirt
Predepende de: dpkg (>= 1.15.6~)
Recomienda: guestmount
Tiene conflictos con: nova-baremetal, nova-compute-lxc, nova-compute-qemu,
                      nova-compute-uml, nova-compute-xen
Proporciona: nova-compute-hypervisor
Descripción: OpenStack Compute - compute node (KVM)
 OpenStack is a reliable cloud infrastructure. Its mission is to produce the
 ubiquitous cloud computing platform that will meet the needs of public and
 private cloud providers regardless of size, by being simple to implement and
 massively scalable. 
 
 OpenStack Compute, codenamed Nova, is a cloud computing fabric controller
 designed to be modular and easy to extend and adapt. In addition to its
 "native" OpenStack API, it also supports the Amazon EC2 API, and it supports
 many different database backends (including SQLite, MySQL, and PostgreSQL),
 hypervisors (KVM, Xen), and user directory systems (LDAP, SQL). 
 
 This is a dependency package for compute nodes using KVM.
Página principal: http://www.openstack.org/software/openstack-compute/
  • Nosotros no vamos a instalar el paquete OpenStack, pues no necesitamos de toda una infraestructura de virtualización para la Nube – Cloud. 😉
buzz@sysadmin:~$ aptitude show qemu-kvm
Paquete: qemu-kvm                                
Nuevo: sí
Estado: sin instalar
Multi-Arch: foreign
Versión: 1:2.1+dfsg-12+deb8u1
Prioridad: opcional
Sección: misc
Desarrollador: Debian QEMU Team <pkg-qemu-devel@lists.alioth.debian.org>
Arquitectura: amd64
Tamaño sin comprimir: 60.4 k
Depende de: qemu-system-x86 (>= 1.7.0+dfsg-2~)
Tiene conflictos con: kvm
Rompe: qemu-system-x86 (< 1.7.0+dfsg-2~)
Reemplaza: qemu-system-x86 (< 1.7.0+dfsg-2~)
Proporciona: kvm
Descripción: QEMU Full virtualization on x86 hardware
 QEMU is a fast processor emulator.  This package provides just a wrapper script
 /usr/bin/kvm which run qemu-system-x86 in kvm mode for backwards compatibility.
 
 Please note that old qemu-kvm configuration files (in /etc/kvm/) are no longer
 used.
Página principal: http://www.qemu.org/

Instalamos la plataforma de virtualización Qemu-Kvm

buzz@sysadmin:~$ sudo aptitude install qemu-kvm libvirt-bin bridge-utils
Se instalarán los siguiente paquetes NUEVOS:     
  augeas-lenses{a} bridge-utils dmeventd{a} ebtables{a} ethtool{a} 
  hdparm{a} ipxe-qemu{a} libaio1{a} libapparmor1{a} libaugeas0{a} 
  libboost-thread1.55.0{a} libdevmapper-event1.02.1{a} libfdt1{a} 
  libiscsi2{a} liblvm2cmd2.02{a} libnetcf1{a} libnuma1{a} librados2{a} 
  librbd1{a} libreadline5{a} libseccomp2{a} libspice-server1{a} 
  libvdeplug2{a} libvirt-bin libvirt-clients{a} libvirt-daemon{a} 
  libvirt-daemon-system{a} libvirt0{a} libx86-1{a} libxen-4.4{a} 
  libxenstore3.0{a} libxml2-utils{a} lvm2{a} netcat-openbsd{a} pm-utils{a} 
  powermgmt-base{a} qemu-kvm qemu-system-common{a} qemu-system-x86{a} 
  qemu-utils{a} seabios{a} vbetool{a} 
0 paquetes actualizados, 42 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 8,422 kB/14.8 MB de ficheros. Después de desempaquetar se usarán 53.3 MB.
¿Quiere continuar? [Y/n/?] y

Importante

  • Como estamos instalando sobre un Desktop, necesitaremos una interfaz para le gestión del KVM. Si estuviéramos instalando sobre uno o más servidores, es opcional tanto la instalación del Desktop, como la del Virtual Machine Manger, que instalaremos mas adelante. Con una sola instancia de esta interfaz gráfica, podemos administrar todos los servidores en los que hayamos instalado los paquetes qemu-kvm, libvirt-bin y bridge-utils.
  • El principal demonio – daemon de la virtualización es el libvirtd.  Para conocer su estado ejecutamos:
buzz@sysadmin:~$ sudo systemctl status libvirtd
buzz@sysadmin:~$ sudo service libvirtd status
  • Si en la salida de cualquiera de los comandos anteriores, leemos algunas líneas en color rojo, es saludable reiniciar el servicio libvirtd y volver a comprobar, o reiniciar el equipo y comprobar. El scriptlibvirtd.service que maneja systemd, se encuentra en /lib/systemd/system/libvirtd.service. Observemos que podemos invocar a ese demonio de la forma antigua también, o sea:
buzz@sysadmin:~$ sudo service libvirtd
Usage: /etc/init.d/libvirtd {start|stop|restart|reload|force-reload|status|force-stop}

buzz@sysadmin:~$ sudo service libvirtd restart
buzz@sysadmin:~$ sudo service libvirtd statuslibvirtd.service - Virtualization daemon
   Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled)
   Active: active (running) since dom 2016-11-27 11:23:53 EST; 8min ago
     Docs: man:libvirtd(8)
           http://libvirt.org
 Main PID: 1112 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           └─1112 /usr/sbin/libvirtd
  • El script ubicado en /etc/init.d/qemu-system-x86, es el encargado de insertar los módulos necesarios para el correcto funcionamiento del Qemu-Kvm. Después que efectúa su trabajo de forma satisfactoria, termina. Si consultamos su estado, nos devolverá que es 0 o exitoso.
buzz@sysadmin:~$ sudo systemctl status qemu-system-x86
● qemu-system-x86.service - LSB: QEMU KVM module loading script
   Loaded: loaded (/etc/init.d/qemu-system-x86)
   Active: active (exited) since dom 2016-11-27 11:18:17 EST; 18min ago
  Process: 172 ExecStart=/etc/init.d/qemu-system-x86 start (code=exited, status=0/SUCCESS)
  • Si somos curiosos y queremos conocer cuales son los módulos y su ubicación, ejecutamos:
buzz@sysadmin:~$ sudo updatedb

buzz@sysadmin:~$ locate kvm | grep ko
/lib/modules/3.16.0-4-amd64/kernel/arch/x86/kvm/kvm-amd.ko
/lib/modules/3.16.0-4-amd64/kernel/arch/x86/kvm/kvm-intel.ko
/lib/modules/3.16.0-4-amd64/kernel/arch/x86/kvm/kvm.ko

buzz@sysadmin:~$ ls -l /lib/modules/3.16.0-4-amd64/kernel/arch/x86/kvm/
total 1016
-rw-r--r-- 1 root root  97120 jul 17  2015 kvm-amd.ko
-rw-r--r-- 1 root root 223680 jul 17  2015 kvm-intel.ko
-rw-r--r-- 1 root root 715920 jul 17  2015 kvm.ko

Instalamos el Virtual Machine Manager

buzz@sysadmin:~$ sudo aptitude install virt-manager
[sudo] password for buzz: 
Se instalarán los siguiente paquetes NUEVOS:     
  gir1.2-gtk-vnc-2.0{a} gir1.2-libvirt-glib-1.0{a} 
  gir1.2-spice-client-glib-2.0{a} gir1.2-spice-client-gtk-3.0{a} 
  libvirt-glib-1.0-0{a} python-ipaddr{a} python-libvirt{a} 
  python-urlgrabber{a} virt-manager virt-viewer{a} virtinst{a} 
0 paquetes actualizados, 11 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 2,041 kB de ficheros. Después de desempaquetar se usarán 12.5 MB.
¿Quiere continuar? [Y/n/?] y
  • Después de instalado el paquete, consultamos:
buzz@sysadmin:~$ cat /usr/share/doc/virt-manager/README.Debian 
Access Control
==============
Access to the libvirt socket is controlled by membership in the "libvirt"
group. If you want to manage virtual machines as non root you need to add your
user to that group or you have to use the session uris like qemu:///session.

See also /usr/share/doc/libvirt-bin/README.Debian.

 -- Guido Guenther <agx@sigxcpu.org>  Thu, 04 Jun 2010 11:46:03 +0100
  • Lo anterior nos indica que debemos hacer al usuario buzz miembro del grupo libvirt para tener acceso a la interfaz recién instalada:
buzz@sysadmin:~$ sudo adduser buzz libvirt
Añadiendo al usuario `buzz' al grupo `libvirt' ...
Añadiendo al usuario buzz al grupo libvirt
Hecho.
  • Ahora cerramos la sesión y la iniciamos nuevamente. Después de entrar en nuestro Cinnamon Desktop, vamos al Menú –> Administración –> Gestor de Máquina Virtual, y accedemos a la interfaz de administración de nuestro KVM. virt-manager

Redes Virtuales en el Gestor de Máquina Virtual

A pesar de que el Gestor de Máquina Virtual es fácil de utilizar y que con la práctica diaria podemos obtener una Maestría en su uso, ofrecemos un Tip sobre cómo modificar la red virtual que por defecto instala el Qemu-Kvm.

Navegamos por su Menú –> Editar –> Detalles de la conexión, y vamos a la pestaña «Redes Virtuales«. Si hacemos clic sobre el enlace configuración IPv4, se muestra la Red, y además nos informa que el servidor DHCP está activado para ella. Ese servidor se ejecuta gracias al paquete dnsmasq-base, el cual está instalado.

Para más información al respecto, consulte el archivo: /usr/share/doc/libvirt-bin/README.Debian. redes

Si queremos cambiar la configuración de la red «default«, procederemos de la siguiente forma:

buzz@sysadmin:~$ sudo cp /etc/libvirt/qemu/networks/default.xml  /etc/libvirt/qemu/networks/default.xml.original
buzz@sysadmin:~$ cat /etc/libvirt/qemu/networks/default.xml.original
<network>
  <name>default</name>
  <bridge name="virbr0"/>
  <forward/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254"/>
    </dhcp>
  </ip>
</network>

buzz@sysadmin:~$ sudo nano /etc/libvirt/qemu/networks/default.xml
<network>
  <name>default</name>
  <bridge name="virbr0"/>
  <forward/>
  <ip address="192.168.100.1" netmask="255.255.255.0">
  </ip>
</network>

buzz@sysadmin:~$ sudo systemctl restart libvirtd
buzz@sysadmin:~$ sudo systemctl status libvirtd

Sino habíamos cerrado el Gestor de Máquina Virtual antes de reiniciar el demonio libvirtd, recibiremos el siguiente mensaje de error, lo cual es normal que suceda: error

Solamente debemos cerrar el Virt-Manager y volverlo a abrir. Volvemos a la parte de la configuración de Redes Virtuales, y comprobamos que la red default, ya tiene los parámetros modificados.

Sugerimos se habilite el inicio automático de la Red default, marcando la casilla «Autoniciar«.

Almacenamiento en el Virt-Manager

Otro aspecto que queremos tocar es el del Almacenamiento – Storage en el Virt-Manager. Por defecto, la carpeta del sistema para guardar todas las imágenes de las máquinas virtuales, está ubicada en /var/lib/libvirt/images. Supongamos que tenemos un disco duro totalmente dedicado a esa función, y lo tenemos montado en /home/vms. Para adicionarlo al Virt-Manager, navegamos por su Menú –> Editar –> Detalles de la conexión –> Almacenamiento. En la esquina inferior izquierda hacemos clic sobre el botón «+«. Entonces se despliega un Asistente para «Crear depósito de almacenamiento«: almacenamiento

Observemos los diferentes tipos de almacenamiento que podemos escoger. Detallada documentación encontraremos en Virtualization Deployment and Administration Guide, de la Red Hat. Nosotros selecionaremos la primera «dir: Directorio del Sistema de Archivos«. almacenamiento2

almacenamiento3

Al terminar el asistente el nuevo depósito de almacenamiento queda Activo y con su inicio de forma automática.

Primera máquina virtual

Debemos navegar por, y leer las, diferentes opciones que nos ofrece el Virt-Manager. Observemos en la penúltima imagen de las mostradas más adelante, que cuando llegamos a la edición de la máquina virtual recién creada y antes de Iniciar la instalación, en la opción «Procesor«, marcamos la casilla «Configuración» Copiar configuración de CPU del equipo anfitrión. Puede que No sea necesario el hacerlo, pero nos atenemos a la recomendación de Debian y a nuestra práctica sobre servidores HP.

Para más información al respecto, consulte el archivo: /usr/share/doc/libvirt-bin/README.Debian. crea-vm01

crea-vm02

crea-vm03

crea-vm04

crea-vm05

crea-vm06

crea-vm07

crea-vm08

crea-vm09

Solo añadiremos que desde hace más tres de años, tenemos en producción en dos empresas a esta plataforma de virtualización. A pesar de fallas en el suministro eléctrico, computadoras normales «adaptadas» para que funcionen como servidores, y de todas las dificultades que puedan existir en un país subdesarrollado como el nuestro, el Qemu-Kvm siempre ha funcionado correctamente, así como los servidores virtuales que se ejecutan sobre él.

Esperamos les sea de utilidad este artículo.

¿Próxima entrega?

«Virsh en Debian«

Recuerden que esta será una serie de artículos de Redes de Computadoras para las PYMES.  ¡Los estaremos esperando!.


12 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Zodiac dijo

    Didactico articulo que me ayudara en mi implementacion de mi par de servidores con el Qemu-KVM. Muchas gracias Federico y continuaremos esperando tus posts.

  2.   Alberto dijo

    Muy buen artículo para cualquier iniciación en Qemu-KVM.
    Sería muy interesante que en próximos artículos que explicaras los ficheros XML de las máquinas virtuales y el aprovisionamiento ligero (thin provisioning) de los discos duros, consiguiendo así un despliegue muy eficiente.
    Un saludo y gracias por contribuir.

  3.   Federico dijo

    ¡Muchas gracias por sus comentarios!.

    Alberto: el objetivo principal de nuestros artículos, como ya hemos escrito en mucho de ellos, es ofrecer un Punto de Entrada a los temas tratados. Algunas veces de forma muy concisa y en otras un poco más explícitas. Depende de la complejidad del tema. Por ello, damos toda una serie de enlaces a otros sitios para que los lectores, sean iniciados o no, encuentren mas literatura donde enriquecer sus conocimientos. Encabezo a esa lista de lectores. 😉

    Por tu comentario, veo que no eres un iniciado en el tema. Me pides que explique una característica bastante técnica como es el «Thin provisioning», aunque la usemos de alguna forma u otra en nuestro diario trabajo.

    «Thin Provisioning», para propósitos prácticos, es cuando empleamos tecnologías de virtualización para dar la apariencia de que tenemos mas recursos de hardware de los que disponemos realmente. Si un sistema tiene siempre a su disposición los recursos de hardware necesarios para dar soporte a todos los recursos virtualizados, entonces no podemos hablar de que tengamos implementado un Aprovisionamiento Ligero en ese sistema.

    Intento que, los recursos necesarios de memoria, espacio en disco duro, cantidad de procesadores, etcétera, para la ejecución de los servidores virtuales o Guests, no excedan los recursos del propio Host.

    Trato de tener un Aprovisionamiento Pesado o Tick Provisioning. Organizo la virtualización -cuando puedo- de forma que la totalidad de los recursos utilizados en los Guest, se aproxime a la totalidad de recursos disponibles.

    Se plantea que la eficiencia del tipo de aprovisionamiento depende de cómo lo utilicemos y no de la tecnología de virtualización. El Aprovisionamiento pesado es más eficiente cuando la cantidad de recursos de hardware utilizados se aproxima a la cantidad de recursos disponibles. El Aprovisionamiento Ligero es más eficiente cuando la cantidad de recursos de hardware utilizados es mucho menor que la disponible.

    Para más info sobre el Aprovisionamiento, visite en primera instancia: https://en.wikipedia.org/wiki/Thin_provisioning.

    De paso te comento que en el documento «Virtualization Deployment and Administration Guide» mencionado en éste artículo, solo se hace referencia al Thin provisioning una sola vez, y es para decirnos que ese tipo de aprovisionamiento no lo soportan los Depósitos de Almacenamiento o Storage Pool, con LVM o Gestor de Volúmenes Lógicos.

    Por último, quiero llamar la atención que un post no puede abarcar ni sustituir a la literatura especializada sobre un determinado tema. Por ejemplo, el documento anterior de la Red Hat consta de 565 páginas.

  4.   federico dijo

    Luigys, tengo dificultades en recibir los comentarios publicados.

    1.    Luigys Toro dijo

      Trabajamos en ello

  5.   Marty Mcfly dijo

    ¿Por qué en Desde Linux no se ha hablado nada sobre el lanzamiento 25 de la popular distribución Fedora? Me da la impresión de que este blog solo se especializa en Debian y Ubuntu… Qué triste yo que soy un ávido lector y al mismo tiempo usuario de Fedora

    1.    Luigys Toro dijo

      Mi estimado Marty, sin duda alguna tenemos algo olvidado a Fedora, no es por gusto, sino por necesidad. El mundo GNU/Linux y libre, se mueve constantemente y nuestras capacidades de probar, aprender, comunicar se ven limitadas. Nos gustaría tener días de 48 horas, para poder de una u otra manera poder contribuir más y sobre más temas.

      En algún momento, vamos a escribir sobre Fedora, perdonano si no es ahora, estamos trabajando en llegar a más y más colaboradores que nos ayuden a crear contenido, de esta manera serán más los puntos que podamos abarcar.

      Todos son invitados a colaborar en DesdeLinux, para ello existe la guía de Guía de Redactores y Editores https://blog.desdelinux.net/guia-redactores-editores/ esperamos pues, en algún momento cercano, tener mucho más material que ofrecer.

    2.    federico dijo

      ¿Te gustaría publicáramos también sobre CentOS?

  6.   crespo88 dijo

    Especial artículo, ya estamos acostumbrados. Gracias por esta entrega hermano, ya andas tocando temas más mucho más interesantes, lo cual no le quita al resto de los posts, lo digo así desde mi punto de vista pues mi seguimiento al Qemu-KVM comenzó hace unos años y desde que lo conocí no tengo queja del mismo.
    Espero que el Qemu-KVM se mantenga en el futuro firme y continúo de Debian.

  7.   Federico dijo

    Si eres observador Crespo88, en éstos nuevos artículos sobre Qemu-KVM, profundizo más, como ya lo viste en el siguiente, y verás en los dos mas que publicaré proximamente. En el mundo actual la virtualización es una tecnología imprescindible. Vale la pena profundizar en su uso. Gracias por comentar!!!.

  8.   Ismael Alvarez Wong dijo

    Muy buen articulo sobre como llevar a la practica de una manera sencilla y asequible la teoría sobre la virtualizacion basada en KVM (o Kernel-based Virtual Machine), es decir esta todo lo básico para comenzar:
    1ro) Instalar la plataforma de virtualización Qemu-Kvm.
    2do) Como el host tiene interfase gráfica necesitamos del Virtual Machine Manager para administrar la virtualizacion KVM.
    3ro) Muy buenos los TIPs de agregar nuestro usuario buzz al grupo libvirt para tener acceso a la interfaz del Virtual Machine Manager; de modificar la interfase de red virtual y el almacenamiento predeterminado en el Virt-Manager hacia otra partición «montada» de un 2do disco duro.
    4to y final) La creación de la 1ra MV.
    Gracias por compartir esta información «desinteresadamente» para superarnos mas en el mundo de Linux.

  9.   federico dijo

    Muchas gracias por tu comentario, amigo Wong. Mensajes como el tuyo, son los que me hacen continuar escribiendo para la Comunidad DesdeLinux y para todos los amantes de Linux