¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. LINUX
  3. Máquinas virtuales, contenedores y cloud
Extrait - LINUX Dominar la administración del sistema (5ª edición)
Extractos del libro
LINUX Dominar la administración del sistema (5ª edición)
1 opinión
Volver a la página de compra del libro

Máquinas virtuales, contenedores y cloud

La virtualización

1. Definición

La virtualización es una técnica que permite hacer funcionar a la vez, de manera separada y aislada, varios sistemas operativos o aplicaciones en una misma máquina física, con la particularidad de que cada sistema cree que corre en su propia máquina

La diferencia entre sistema operativo y aplicación es importante: la máquina virtual no es el único mecanismo de virtualización. También se puede virtualizar una aplicación usando mecanismos de aislamiento.

Normalmente, un servidor nunca explota el máximo de su capacidad, de hecho, esto solo ocurre en cortos periodos de tiempo y para tareas puntuales. El resto del tiempo su carga es bastante reducida, lo que hace que esté disponible para otro tipo de tareas sin penalizar las aplicaciones que estén ejecutándose.

Muchos criterios serán tomados en cuenta a la hora de tomar la decisión de virtualización o no. El más importante será el hecho de poder ahorrar. Lo primero, por lo tanto, sería el aspecto económico ya que el gasto será menor así como el coste de mantenimiento del material. Después se tendrá en cuenta el ahorro de recursos, gracias a una buena distribución de las máquinas virtuales en los servidores para poder optimizar, precisamente, el conjunto de los recursos. Ahorro en tareas de administración ya que es más simple instalar, desplegar y migrar máquinas virtuales. Se pueden usar distintas herramientas para transformar máquinas físicas en virtuales o viceversa, y el entorno material virtual es normalmente idéntico para cada máquina virtual.

2. El cloud

El cloud le permite alquilar servicios de infraestructura en Internet: servidores virtuales, redes, espacio de almacenamiento, etc., bajo la forma de un IaaS...

Métodos de virtualización

1. El aislamiento

El aislamiento consiste en ejecutar aplicaciones en entornos aislados los unos de los otros, llamados contextos o zonas de aislamiento. Algunas instancias de una misma aplicación se pueden arrancar simultáneamente, cada una en su contexto, incluso si esta aplicación no ha sido concebida con ese propósito. La aplicación no corre en una verdadera máquina virtual, sino que se encuentra aislada con respecto de las otras gracias a una funcionalidad del sistema operativo. El aislador más conocido en Unix es chroot, que permite un cambio de raíz de sistema.

images/grafico_pagina6.png

Principio de los aisladores

El principio de chroot es simple. Un directorio Unix contiene todo lo necesario para ejecutar un programa, por ejemplo, un servidor web o ftp. En este directorio se encontrará la aplicación así como sus archivos, las bibliotecas y los comandos que esta utilizará. Una vez que está en su sitio, se aplica el comando chroot a ese directorio, el cual se convierte en la raíz. Los procesos del servidor solamente tienen acceso a los datos que se encuentran en esta nueva raíz y no puede salir de ella. 

El núcleo de Linux presenta mecanismos de aislamiento integrados que se llaman namespaces o "espacios de nombre" que definen lo que los procesos podrán ver. El principio es prácticamente el mismo que para chroot (un punto de montaje o directorio contiene...

Paravirtualización

1. Principio

Cuando nos encontramos en presencia de un hipervisor de tipo 1 o 2, el sistema anfitrión puede proponer una interfaz aplicativa optimizada y similar a la del material real. Es lo que se llama paravirtualización. La interfaz aplicativa API permite que el sistema invitado tenga un acceso casi directo a uno o a varios componentes materiales.

images/grafico_pagina10.png

Paravirtualización: el sistema accede al anfitrión gracias a las API

Esta posibilidad la puede ofrecer el núcleo, la arquitectura material (por ejemplo el microprocesador), o incluso los dos.

En el caso del acceso al material realizado por los sistemas invitados los pilotos que se instalarán establecerán una comunicación directa con la API del sistema anfitrión.

En Linux los productos XEN y KVM utilizan técnicas de paravirtualización si están disponibles.

2. Virtio

Virtio, Virtual Input Output, se trata de la interfaz de programación (API) del núcleo Linux dedicada a los pilotos de los periféricos de las máquinas virtuales (o más bien de los sistemas invitados).

Una comunicación de tipo FIFO se establece entre el hipervisor (el núcleo del sistema anfitrión) y el núcleo del sistema invitado. Los pilotos se basarán en esta interfaz. 

Virtio es la API por defecto de KVM, y Linux propone los pilotos de red y discos asociados. Hay otros pilotos que también están disponibles para Windows. VMWare y Virtualbox disponen de un soporte VirtIO. 

3. Asistencia material

a. Anillos de protección

Con el objetivo de mejorar el rendimiento de los supervisores, los fabricantes de microprocesadores añaden modos de funcionamiento y juegos de instrucciones suplementarios. Los procesadores de tipo x86 disponen de niveles de ejecución, o anillos de protección llamados rings. Estos anillos definen los privilegios de ejecución de los programas. Cuanto más bajo sea el número de anillo en el que está instalado un programa, más control ejercerá en el sistema. 

images/grafico_pagina11.png

Los anillos definen los privilegios

En la arquitectura x86 32 bits, existen cuatro anillos 0, 1, 2 y 3. En el material 64 bits, ya que se constata que los niveles 1 y 2 no se utilizan, solamente existen dos: 0 y 3. el sistema operativo funciona en el ring 0 y dispone del más alto...

Los contenedores

1. Principio

El aislamiento de uno o distintos procesos lo realiza el núcleo Linux usando para ello los espacios de nombres y los grupos de control. Los espacios de nombres aparecieron en 2002 y los grupos de control en 2007. La llegada de los espacios de nombres al núcleo 3.8 en febrero de 2013 abrió la vía al soporte completo de los contenedores.

Todo núcleo Linux integra las funciones por defecto:

Los namespaces, o espacios de nombres, permiten:

  • el aislamiento de los procesos y tener un proceso con PID1 como primer proceso en su espacio (PID 1 del primer proceso de un espacio de nombres),

  • el aislamiento de la red, con su propia dirección IP y sus propios puertos,

  • el aislamiento de los volúmenes de datos, de almacenamiento,

  • el aislamiento de los derechos y de los usuarios con respecto al anfitrión: ser root en un contenedor puede corresponder a un usuario sin ese derecho en el anfitrión.

Los cgroups, o grupos de control, son los recursos del sistema que un grupo de procesos puede utilizar, con el objetivo de:

  • limitar los recursos de memoria o de procesador de un grupo,

  • administrar las prioridades,

  • obtener información «contable» sobre el grupo,

  • controlar en su conjunto (por ejemplo, hacer que se paren) algunos procesos,

  • aislar el grupo, asociándolo a un espacio de nombres,

La asociación de esos dos mecanismos es la base del principio del contenedor.

2. Contenedor y Máquina virtual

A veces se comparan los contenedores con las máquinas virtuales, sin embargo se trata de dos tipos de tecnología de virtualización diferentes.

Las máquinas virtuales funcionan en hipervisores. Ya sea el material emulado o no, las máquinas virtuales ejecutan un sistema operativo completo, con núcleo y drivers para los periféricos (incluso los que usan la paravirtualización). Además, las aplicaciones se instalan en el sistema operativo de la máquina virtual. Desde el punto de vista del hipervisor, la máquina virtual es un proceso único.

Los contenedores funcionan directamente en el anfitrión, directamente en el núcleo. Los procesos que este contiene son iguales que los otros, solamente aislados y limitados en recursos. Si un contenedor tiene 10 procesos, habrá 10 procesos funcionando en el anfitrión.

images/grafico_pagina19a.png

El contenedor usa el núcleo del anfitrión...

El cloud

1. Principio

El Cloud, o Cloud Computing, o computación en la nube, consiste en el uso de medios informáticos, generalmente servidores, remotos o a través de una red. En el marco de un Cloud público, la red sería Internet. La palabra cloud, o nube, indica que el usuario no sabe, o no necesita saber, la ubicación de los servidores.

El cloud también puede ser privado. En este caso, la infraestructura asociada queda gestionada por una empresa por cuenta propia, aunque propondrá al conjunto de servicios o entidades medios idénticos a los de un cloud público: servidores, redes, publicaciones, etc.

Las diferencias entre un cloud y un servicio clásico son:

  • Recursos de acceso libre: por ejemplo crearemos, usaremos, modificaremos o simplemente eliminaremos un servidor según sus necesidades y medios, generalmente, de manera automática, con una respuesta inmediata.

  • El pago por uso o Pay-per-use: solamente se pagará lo que se consuma. El consumo lo mide el operador, no solamente para adaptar su capacidad (añadido de recursos físicos o lógicos), sino también para la facturación.

  • La mutualización: las infraestructuras físicas (servidores, discos, redes) son compartidas por el conjunto de los clientes y pueden ser heterogéneas. Las capas superiores están completamente virtualizadas: máquinas virtuales, contenedores, redes, repartidores de carga, etc.

  • La apertura: ya sea un cloud público o privado, el usuario accede a los servicios a través de terminales web, API, CLI, etc. Esto permite un alto nivel de automatización.

Una palabra clave es la elasticidad. Se dice que el cloud es elástico, ya que es capaz de adaptarse más rápidamente a las necesidades expandiendo o reduciendo sus servicios bajo demanda. También se habla de plasticidad y escalabilidad.

Sin embargo no hay que olvidar que, detrás del cloud, hay servidores de verdad, en datacenters de verdad, con personas de verdad que los administran. No hay nada mágico. Es posible que haya algún momento en el que no pueda crear una nueva instancia (servidor virtual) y que reciba un mensaje del operador diciéndolo que no tiene recursos disponibles, o incluso anunciando una avería, o la pérdida de uno o varios servicios en una región o zona de disponibilidad....

Sistemas invitados

1. Hipervisor y adiciones

Por sistema invitado, entendemos el sistema operativo instalado en la máquina virtual. Dependiendo del sistema operativo anfitrión, habrá disponibles distintos programas. Solamente para Linux, encontrará:

  • Qemu, todavía presente en el mercado, pero muy lento,

  • KVM, descendiente de qemu, pero que, al usar virtio y un acceso al núcleo, propone un rendimiento nativo,

  • Virtualbox, de Oracle, que hace lo mismo, pero disponible de manera idéntica en Windows y macOS,

  • VMWare Workstation, de VMWare, que también es multiplataforma,

  • Xen, hipervisor de tipo 1, pero que necesita una instalación particular.

Casi nunca se piensa en ello, pero Qemu y KVM disponen, por supuesto, de comandos accesibles en shell, pero también, gracias a libvirt, dispone de una interfaz gráfica muy eficiente, que permite incluso administrar máquinas virtuales de otros hipervisores (como Virtualbox, Xen, VMware…).

El autor, por ejemplo, usa muchas máquinas virtuales (hasta ocho), en Virtualbox o KVM, desde macOS o una máquina virtual Linux. Esto provoca, a veces, situaciones interesantes en las que Virtualbox ejecuta una máquina virtual que a su vez opera KVM que ejecuta un sistema invitado…

images/cet11_002.png

Una distribución Slitaz virtualizada en un hipervisor VirtualBox dentro en una Debian en un sistema Virtualbox en una Ubuntu

Para obtener un funcionamiento óptimo de los sistemas operativos invitados, hay algunos elementos que se tienen que tener en cuenta:

  • La memoria deber ser la necesaria para el sistema y para el entorno gráfico. Un anfitrión con 16 GB de memoria puede hacer funcionar máquinas virtuales de 4 GB (para Gnome o KDE). El autor ha podido arrancar 6 máquinas virtuales de 1 a 2 GB sin problemas.

  • El número de procesadores debería de ser inferior o igual al número de procesadores del sistema anfitrión, aunque este último puede gestionar correctamente los recursos.

  • Para las máquinas virtuales profesionales, los discos deberían estar provisionados en el momento de su creación, y sobre soportes rápidos.

  • El piloto gráfico debe ser el aconsejado por defecto. Algunos hipervisores proponen el soporte de la 3D acelerada, para ejecutar algunos juegos o herramientas gráficas de mucho rendimiento.

  • Y sobre todo...