## Virtualización de Servidores
* La virtualización de servidores se ha convertido en muy poco tiempo en una tecnología confiable y una solución muy extendida en servidores x86.
* KVM, Kernel-based Virtual Machine, es uno de los últimos hipervisores en hacer su entrada en el mercado, ya abarrotado, de la virtualización.
* Como otros hipervidores tipo 1, se integra en un sistema operativo existente, principalmente Linux, aunque también se ha portado a FreeBSD y Illumos (antes OpenSolaris).
## ¿Qué es KVM?
* **KVM** (Kernel-based Virtual Machine) es un hipervisor tipo 1 que proporciona una solución completa de virtualización para el SO Linux en arquitecturas x86 que cuenten con las extensiones de virtualización Intel VT/AMD-V.
* Cuando se carga el módulo KVM, Linux se convierte en un hipervisor "bare-metal" (tipo 1) capaz de ejecutar varias máquinas virtuales (VM) aisladas. KVM hospeda las VMs como procesos, por lo que cada VM puede beneficiarse de todas las características del kernel de Linux, incluyendo todas aquellas referentes al hardware, seguridad, almacenamiento, etc.
## Arquitectura (1)
* KVM es un módulo cargable del kernel que permite al SO Linux actuar un hipervisor “bare metal” tipo 1.
* Un hipervisor puede verse como un SO especializado en la ejecución de máquinas virtuales.
* Pero un hipervisor tipo 1 también tiene que tratar con otras tareas más estándares como gestión de memoria, planificación de procesos, drivers de dispositivos, E/S.
* El enfoque de KVM es:
* Implementar dentro del módulo todo lo referente a la gestión de VM.
* No reinventar la rueda y permitir que todo lo demás lo realice un SO probado y eficaz como Linux.
## Arquitectura (2)
![kvm](img/kvm/kvm1.png)
## Extensiones nativas para x86
* KVM necesita de forma obligatoria las extensiones de virtualización incluidas por Intel y AMD:
* Intel Virtualization Technology (Intel VT-x), codename Vanderpool (2005).
* AMD Virtualization (AMD-V), codename Pacifica (2006).
* Permiten a los hipervisores un rendimiento mayor en modo virtualización completa.
* De esta forma la virtualización completa es mucho más fácil de implementar y ofrece un mayor rendimiento.
##KVM y libvirt (1)
Linux y KVM se han estandarizado a través de libvirt y libguestfs, usadas como APIs base para la gestión de las máquinas virtuales y de las imágenes.
* Además, **libvirt** es capaz de gestionar no solo a KVM, sino a otros hipervisores como Xen, VMware, OpenVZ, MS Hyper-V, VirtualBox, etc.
* Muchas de las herramientas utilizadas de alto nivel como **virsh** o **virt-manager** han sido construidas sobre la librería base libvirt.
##KVM y libvirt (2)
![kvm](img/kvm/kvm2.png)
##Características principales (1)
* Seguridad
* Bajo KVM, cada máquina virtual se implementa como un proceso.
* KVM se aprovecha del modelo de seguridad de Linux proporcionado tanto por SELinux como por AppArmor. Ambos proporcionan, básicamente, "sandboxes" donde encerrar los procesos. Si un proceso se ve comprometido, esto no afectará al resto del sistema.
##Características principales (2)
* Gestión de memoria
* KVM hereda las características de gestión de memoria de Linux. La memoria utilizada por una VM se gestionará de la misma forma que la de otro proceso, podrá ser guardada en disco (swapped), utilizada en páginas grandes (large pages). El soporte NUMA de Linux, permite también el uso a las VMs de grandes cantidades de memoria.
* La compartición de páginas de memoria se consigue a través de la características añadida a Linux llamada KSM (Kernel Same-page Merging)
##Características principales (3)
* Almacenamiento
* KVM utiliza cualquier tipo de almacenamiento soportado por Linux (discos locales, NAS ó SAN).
* KVM soporta el almacenamiento de imágenes en sistemas de ficheros distribuidos (GFS2, OCFS ó GlusterFS), con lo que podemos compartirlas por varios hipervisores.
* Las imágenes de disco soportan aprovisionamiento bajo demanda evitando tener que reservar todo el espacio inicialmente. El formato nativo de KVM es QCOW2, el cual permite la realización de snapshots, compresión y cifrado.
##Características principales (4)
* Live migrations
* KVM permite migraciones en caliente (live migrations), esta característica permite mover una VM en ejecución entre servidores físicos (hipervisores) sin interrupción del servicio.
* Estas migraciones son transparentes al usuario, la VM permanece encendida, las conexiones de red activas y las aplicaciones en ejecución mientras que la máquina se realoja en un nuevo servidor físico.
* KVM también permite almacenar el estado de una VM a disco para permitir su almacenamiento y posterior reanudación.
##Características principales (5)
* Drivers
* KVM soporta virtualización híbrida. En los SSOO invitados hay que instalar drivers paravirtualizados que permiten utilizar una interfaz de E/S optimizada en vez de emular estos dispositivos. Estos drivers permiten altos ratios de rendimiento en la E/S para dispositivos de bloques y dispositivos de red.
* El hipervisor KVM utiliza el estándar VirtIO, desarrollado por IBM y Red Hat con la ayuda de la comunidad Linux.
##Características principales (6)
* VirtIO
* VirtIO es una interfaz independiente del hipervisor diseñada para el desarrollo de drivers que puedan ser utilizados sobre varios hipervisores. El objetivo principal es conseguir una mayor interoperabilidad con los invitados.
* Red Hat ha desarrollado drivers VirtIO optimizados para E/S de red y disco para los SSOO Windows.
##Características principales (7)
* Rendimiento y escalabilidad
* KVM posee los mismos rasgos de rendimiento y escalabilidad que caracteriza a Linux.
* KVM soporta VM de hasta 16 CPUs virtuales y 256 GB de RAM.
* El rendimiento de aplicaciones como SGBD Oracle, SAP, LAMP, MS Exchange sobre KVM puede oscilar entre el 95 % y el 135 % comparado con su ejecución en servidores físicos.
* Se han conseguido ratios de hasta 600 máquinas virtuales en un solo servidor físico.