LPIC-1 102.6: Linux como huésped (virtualización)

El tema 102.6 de las certificaciones LPIC-1 está destinado a comprobar si los candidatos a ser administradores de sistemas Linux tienen conocimientos sobre la implementación de sistemas virtualizados usando GNU/Linux como huesped. Este tema solo hace una introducción a los aspectos básicos, y en otros temas, especialmente en LPIC-3 330, hay más contenido para profundizar más en la virtualización.

Simplemente se busca entender los conceptos generales sobre máquinas virtuales y contenedores, comprender su aplicación en sistemas de la nube, etc., así como conocimientos del paquete cloud-init para iniciar instancias. Cuando llegue a LPIC-3 330 veremos herramientas, configuración, y cómo virtualizar, por el momento solo comprender estos conceptos y así no genero contenido redundante…

Voy a pasar por encima por este tema porque tengo en mente publicar unos artículos sobre virtualización y, en especial, sobre cómo levantar instancias, usar AWS (Amazon Web Service), etc. Pero tampoco quería dar un salto desde el Tema 102.5 al 103.1.

¿Qué es la virtualización?

Sistema real vs sistema virtual

La virtualización es una tecnología que permite recrear algún recurso informático, como puede ser un disco duro virtual, una red virtual, o una máquina completa con el sistema completo. Es es una gran ventaja para aprovechar mejor los recursos de las grandes máquinas, para crear escenarios o para el fencing, es decir, el aislamiento por motivos de estabilidad, seguridad o alta disponibilidad.

En GNU/Linux, la mayoría de sistemas de virtualización se basan en la API denominada libvirt que aporta Linux. Gracias a ella funciona KVM, LXC, Xen, VirtualBox, VMWare, OpenVZ, QEMU, etc. Esta API usa el demonio libvirtd, tiene sus ficheros de configuración en /etc/libvirt/ y tienes a tu disposición herramientas como virsh.

Virtualiación vs emulación

Virtualizar un sistema no es emular un sistema. Aquí hay que saber diferenciar entre los emuladores como qemu o DOSBox, y los sistemas de virtualización. Tampoco hay que confundirlos con las capas de compatibilidad, que ni son sistemas virtualizados ni son tampoco emuladores. Un ejemplo de capa sería Wine.

Tampoco es lo mismo un simulador, que como su propio nombre indica intenta simular el comportamiento o función de algo. Por ejemplo, un simulador de carreras es un software trata de recrear la conducción de un coche real, pero no es un coche real.

Virtualizar siempre supone ejecutar un recurso virtual o sistema sobre una plataforma nativa para la que fue creado. Es decir, puedes virtualizar sistemas para x86 en un sistema x86, pero no puedes virtualizar un sistema operativo para RISC-V, SPARC, PPC, ARM, o cualquier otra arquitectura en un x86 ni viceversa.

En cambio, emular puede permitirte ejecutar sistemas o software nativo de otras plataformas diferentes en tu máquina. Por ejemplo, ejecutar videojuegos de la consola Sega sobre un x86, Solaris para SPARC en tu PC, Android-ARM , etc. Eso se consigue recreando el hardware de la máquina nativa que intenta emular, así como su sistema operativo. En ocasiones solo se necesita emular algunas partes y no la máquina completa.

Host o anfitrión vs Guest o huésped

Dentro de un sistema virtual encontrarás el host y el guest, es decir, anfitrión y huésped. Como puedes imaginar, el sistema anfitrión es el sistema operativo real, el que tú estás usando en tu equipo. Mientras que el huésped es el virtualizado que se ejecuta sobre el primero y no se encuentra físicamente instalado en el hardware del equipo, sino que usa unos recursos de hardware virtual (vRAM, vCPU, almacenamiento virtual, redes virtuales,…). En función de la relación entre guest y host, se puede tener varios tipos de virtualización…

Tipos de virtualización

Existen varios tipos de virtualización, y deberías tenerlo bien claro:

Virtualización parcial:

La virtualización parcial se usaba hace tiempo para algunas máquinas, virtualizando solo ciertas instancias del hardware, como por ejemplo los espacios de direcciones, para compartir recursos y separarlos en cada una de las instancias.

Virtualización completa o HVM:

La virtualización completa es también llamada nativa, es aquella en la que el sistema operativo huésped no es consciente de que está siendo virtualizado y, por tanto, no necesita modificaciones. El software de virtualización se encarga de recrear un hardware virtual para que pueda ejecutar sobre él de forma aislada y actuará como intermediario para pasarle las instrucciones necesarias al sistema anfitrión (en el curso C2GL explico detalladamente cómo se hace la traducción de instrucciones, etc.) para que éste último sea el que se encargue de manejar el hardware real.

Al conjunto sistema huésped y recursos de hardware virtuales que usa se le conoce como máquina virtual o VM. Además, para este tipo de virtualización se necesita de soporte para tecnologías conocidas como hardware-assisted, es decir, asistencia a la virtualización por hardware. Por ejemplo AMD-V, Intel VT, etc. Puedes comprobar que tu CPU las soporta consultando las banderas de la CPU en:

#AMD lo llama SVM, mientras Intel lo denomina VMX
egrep –c ‘(svm|vmx)’ /proc/cpuinfo

hipervisor tipos

Ese software intermediario entre el host y el guest del que he hablado se denomina hypervisor, y los hay de dos tipos. El Tipo 1 o bare-metal se ejecuta directamente sobre el hardware, trabajando como parte del host. Mientras que el Tipo 2 se instala sobre el sistema operativo anfitrión. Ejemplos de Tipo 1 serían VMWare ESX/ESXi, Oracle VM, Xen, Hyper-V de Microsoft, etc., mientras que como ejemplo del Tipo 2 tienes VirtualBox, VMWare Workstation, etc.

Paravirtualización

La virtualización completa supone un incremento considerable de la carga de trabajo para el hardware. Para reducir esta carga se ha creado la paravirtualización, donde el kernel del huésped se modifica para que sea consciente de que está siendo virtualizado, evitando las transacciones que se realizan con el hipervisor y las traducciones dinámicas binarias.

Xen en Linux puede usarse tanto para HVM como para la paravirtualización, como veremos en artículos más adelante.

Virtualización a nivel del sistema operativo

La virtualización a nivel de sistema operativo, virtualización ligera o semi-parcial, como quieras llamarla, es otro tipo. No necesita hipervisor como tal, ni otro tipo de software, tampoco modificar el kernel. Simplemente es una tecnología implementada sobre el propio kernel anfitrión para permitir varias instancias aisladas.

Con poco impacto sobre el rendimiento, tienes una virtualización con posibilidades de escalabilidad, buena densidad, y facilidad de administrar recursos y al propio sistema virtual (contenedores). Ejemplos de este tipo de proyectos los tienes con Docker, LXC, LXD, OpenVZ, etc.

Un poco más adelante también trataremos el tema de las jaulas chroot, sandboxing, etc.

Máquina virtual vs contenedor

Diagrama de Docker

Aunque comparten muchas semejanzas, existen algunas diferencias entre una máquina virtual y un contenedor. Una de las principales diferencias es que los contenedores proporcionan una forma de virtualizar el sistema operativo para que múltiples cargas de trabajo puedan ejecutarse en una sola instancia del sistema operativo. En cambio, con las máquinas virtuales, el hardware se está virtualizando para ejecutar varias instancias del sistema operativo. Eso es lo que dota a los contenedores de mayor portabilidad, agilidad y velocidad.

Algunos ejemplos prácticos

Más adelante también veremos cómo usar Linux como sistema anfitrión para la virtualización. Pero como huésped quizás te interese conocer algunas cosas que te pueden ayudar cuando administras máquinas. Por ejemplo, puede darse el caso que la administración la estés haciendo de forma remota y no sepas si se trata de una máquina física o virtual. Puedes saberlo usando lo siguiente (por cierto, recuerda usar privilegios para los comandos en los que sea necesario, aunque yo no lo ponga…):

#Si localiza esa cadena estarás ante una MV

dmesg | grep “Hypervisor detected”

#Usa la tabla DMI para saber si se trata de máquina física o virtual. Si devuelve algo como ASUS, HP, Acer, Dell, etc., será una máquina física. Mientras que si devuelve algo como Oracle, VMWare, etc., será virtual.

dmidecode –s system-manufacturer

#Otra alternativa, si la anterior no resulta es usar esta otra  entrada de la tabla DMI

dmidecode –s system-product-name

#Con lshw también podrías detectar si se trata de MV o no

lshw –class system

Recuerda también que es importante también saber configurar el huésped adecuadamente para lo que sea que lo estés usando. Por ejemplo, la configuración de red, usar IP estática si se trata de un servidor o VPS, levantar todos los servicios necesarios, etc. Otro error común que genera problemas es tener reglas de iptables configuradas o SELinux / AppArmor mal configurado, con reglas que tienen conflictos con los servicios que se necesitan…

Cloud-init

Ahora con el cloud computing y servicios como AWS, o proyectos como OpenStack, para inicializar instancias en la nube es necesario usar imágenes con el paquete cloud-init. Si vas a usar Linux como huésped en la nube, debes seguir estos pasos:

  1. Instalar cloud-init con ayuda del gestor de paquetes que estés usando en tu sistema.
  2. Debes tener un usuario por defecto para iniciar la instancia, y que pertenezca a sudoers si tiene que usar privilegios.
  3. Configurar adecuadamente tu instancia (véase /etc/hostname, /etc/hosts, /etc/resolv.conf, /etc/ssh/ssh_config, y ~/.ssh/authorized_keys)
  4. También necesitarás configurar cloud-init desde /etc/cloud/cloud.cfg

No te preocupes si por ahora no entiendes algunas cosas, con futuros artículos irás entendiendo para qué sirve cada uno de esos ficheros de cofniguración, cómo configurarlos, etc.

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja un comentario

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

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar