viernes, 16 de agosto de 2019

KVM e instalación desatendida de una Debian 9 en minuto y medio

Atentos y atentas a este artículo, pues es ya uno de los que dará pie a algo mayor. Por el momento, vamos a tratar algo que servirá de base para lo que vamos a traer más adelante. Lo que haremos es algo que no está muy bien documento en Internet y que puede llevar a errores algunas veces, es el tema de utilizar KVM y una instalación desatendida de una distro. En mi caso, como no podía ser de otra forma, de Debian.



Antes de nada, definamos bien cada concepto. Empecemos por KVM (Kernel-based Virtual Machiche), una forma de virtualizar que es la que yo considero que debería darse únicamente en GNU/Linux, nada de VirtualBox o VMWare.

¿Qué es KVM?

De las mejores explicaciones que he podido encontrar es en RedHat, su explicación es incluso mejor que la que tenemos en Debian, pues nos hemos centrado más que nada en una breve explicación y después centrarnos en su instalación.

KVM es el sistema de virtualización desarrollado por Linux y que permite convertir nuestro Linux en un hypervissor de tipo 1. Y es que todos los hypervisores necesitan de ciertos elementos a nivel de sistema operativo como puede ser un administrador de memoria, un planificador de procesos, una pila de entrada/Salida (I/O), controladores de dispositivos, administrador de seguridad, una pila de red y más para poder ejecutar máquinas virtuales. Pues KVM disponde de todos estos requerimientos al ser parte del propio Kernel de Linux. Cada máquina virtual es implementada como un proceso regular  de Linux programado por el propio scheduler de Linux com un hardware virtual dedicado como puede ser, por ejemplo, la tarjeta de red, CPU, memoria,etc.

Entre sus características destacan:

  • Seguridad: KVM utiliza una combinación de SELinux (Originalmente desarrollado por la NSA) y una segura virtualización (sVirt) para aportar un mayor aislamiento y seguridad a las Máquinas Virtuales. Enteniendo un poco más a cada componente, SELinux lo que hace es establecer límites de seguridad alrededor de las máquinas virtuales y sVirt extiende las funcionalidades de SELinux, permitiendo que la seguridad de Mandatory Access Cotnrol (MAC) se aplique a las máquinas virtuales invitadas evitando errores de etiquetado manual.
  • Almacenamiento: KVM es capaz de cualquier sistema de almacenamiento original de Linux, desde discos locales a sistemas NAS. La entrada y salida de múltiples rutas puede usarse para mejorar el almacenamiento y proporcionar redundancia. Además, las imágenes de disco admiten el aprovisionamiento delgado, asignando almacenamiento bajo demanda en vez de todo por adelantado. 
  • Administración de la memoria: Como cabe esperar, KVM hereda las funciones de administración de memoria de Linux, incluido el acceso no uniforme a la memoria y la fusión de la misma página del kernel. La memoria de una VM puede intercambiarse, respaldada por grandes volúmenes para mejorar el rendimiento y compartida o respaldada por un archivo de disco.
  • Migración en caliente: KVM admite la migración en caliente, que es la capacidad de mover una VM en ejecución entre hosts físicos sin interrupción del servicio. La VM permanecerá encendida, las conexiones de red permanecen activas y las aplicaciones permanecen activas y en ejecución mientras la VM se reubica. KVM también permite almacenar el estado de una VM que que se pueda guardar y reanudar más tarde.
  • Rendimiento y escalabilidad: KVM hereda el rendimiento de Linux, escalando para igualar la carga de la demanda si aumenta la cantidad de máquinas invitadas y solicitudes. Nos va a permitir virtualizar las cargas de trabajo de aplicaciones más exigentes y es la base de muchas configuraciones de virtualización empresarial como lo pueden ser centros de datos y nubles privadas.
  • Control de recursos: En KVM, las VM son procesos de Linux que son administrados por el núcelo. El scheduler de Linux permite un control detallado de los recursos asignados a un proceso de Linux y garantiza una calidad de servicio para un proceso en particular.
  • Baja latencia y mayor priorización: El kernel de Linux presenta extensiones en tiempo real que permiten que las aplicaciones basadas en VM se ejecuten a una latencia más baja con una mejor priorización. El núcleo también divide los procesos que requieren largos tiempos de computación en componentes más pequeños, que luego se programan y procesan en consecuencia. 

Estas son algunas de sus ventajas principales, por lo que es algo muy a tener en cuenta, yo añadiría alguna más como las snapshots, algo que es bastante importante. 


¿Cómo implementar una VM en KVM?


Se suele tener la idea errónea de que KVM es muy complicado de implementar. Me resulta curioso, porque después esa son las mismas personas que utilizan Docker con su docker-compose y su Dockerfile. Me resulta que por un lado digan que KVM es complicado pero utilicen Docker, muy curioso. Pero no quiero adelantar nada.

Lo primero que tenemos que hacer es tener todos los componentes necesarios de KVM instalados en nuestro sistema, y para esto la wiki de Debian sí que está bastante completa. Una vez que lo tenemos todo instalado, tenemos que pasar a la acción y lanzar nuestra máquina virtual, pero un momento, no vayamos tan rápido, vamos a darle una vuelta más.

BTW, Por si queréis más info:

- Instalar KVM en un servidor
- Instalar una VM de KVM en Debian 10 Buster

Instalación desatendida

Esta opción muchas veces es olvidada por muchos y no debería ser así ya que es uno de los puntos más fuertes de GNU/Lnux y Debian en este caso. Me estoy refiriendo al tema de realizar instalaciones de distros de forma desatendida, es decir, lanzando una sóla orden y desentenderte de todo lo demás hasta que prácticamente tengas que hacer login en la máquina de nuevo.

Voy a plantear un escenario que, últimamente se me plantea desde los departamentos de desarrollo:

"Manu, nuestros requerimientos son complejos, necesitamos, por ejemplo 3 Nginx de distintas versiones sobre el mismo servidor, y para uno necesitamos una MariaDB, para otro un PostgreSQL y para otro un MySQL 5.5. Esta circunstancia nos da poca libertad de movimiento"

Pues realmente no es así, y esto ya se ha tenido que tratar mucho antes. La solución es cierto que es un poco más compleja que como se suele hacer de forma frecuente, aún así, no es algo muy complejo.

Para abordar este problema, vamos a plantear el escenario de un servidor dedicado con grandes prestaciones y sobre él, vamos a virtualizar. Para cada proyecto, una VM (con sus correspondientes características). Pero claro, no podemos permitirnos tirarnos tantísimo tiempo, por lo que vamos a realizar instalaciones desatendidas para no preocuparnos. De esta manera, vamos a utilizar FAI. Os dejo manuales por aquí por si queréis echarle un vistacillo:

- FAI Guide
- FAI Manual

En DebConf17 se detalló todo en una charla.

 


Yo lo que he hecho ha sido descargarme la iso de faicd y la he lanzando de una forma normal tal y como se haría con kvm y no con fai-kvm.

virt-install --name debianVM \
--memory 1024 \
--disk path=/debianDes-vm1.qcow2,format=qcow2,size=4 \
--os-variant debian9 \
--network default \
--cdrom=/home/manu/Descargas/faicd.iso
--os-type linux \
--vcpus 1

Esto lo que provoca es lo siguiente:


Si arrancamos cualquier forma de ver lo que está ocurriendo de forma gráfica (ya sea con el mismo qemu o VNC), podremos ver cómo se va desarrollando el proceso de instalación habitual. Como podéis observar, la instalación ha llevado 91 segundos (1 minuto y medio).


Y como vemos, tenemos nuestro servidor virtualizado con el filesystem y todo montado y listo para utilizarse.


No obstante, aún nos quedarían unos cuantos servicios para tener un servidor completamente configurado. No obstante, ese no va a ser un problema; aunque eso ya lo veremos en otro artículo.

¿Hackeamos el Mundo?

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...