Í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
- Kernel-based Virtual Machine
- Hypervisor
- Índice de la Documentación de Red Hat
- Virtualization Getting Started Guide
- Virtualization Deployment and Administration Guide
- Virtualization Tuning and Optimization Guide
- Virtualization Security Guide
- Converting virtual machines from other hypervisors to KVM with virt-v2v
- Libvirt Project
- Virt-Manager Organization
- Linux KVM Organization
- Qemu Organization
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 status ● libvirtd.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.
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.
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:
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«:
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«.
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.
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!.
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.
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.
¡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.
Luigys, tengo dificultades en recibir los comentarios publicados.
Trabajamos en ello
¿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
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.
¿Te gustaría publicáramos también sobre CentOS?
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.
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!!!.
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.
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