1.3. Virtualización¶
El funcionamiento de los servidores hoy día no tiene nada que ver con lo que sucedía hace unos pocos años. Se ha pasado de un alojamiento en máquinas reales, las cuales incluso albergaban varios servicios, a trabajar con máquinas simuladas que ofrecen unicámente un servicio. Estas técnicas reciben el nombre de Virtualización. La virtualización de sistemas es una potente técnica de abstracción mediante la cual podemos crear una capa intermedia que se encarga de posibilitar la comunicación entre una máquina física (anfitrión o host) y el sistema o sistemas huésped (guest) virtuales.

VENTAJAS
Reducción de costes y mejor gestión de los recursos hardware. Cada máquina física puede usarse para varios propósitos a la vez, con los recursos adecuados.
Sustitución de ordenadores por un fondo de MV (pool) que puedan ser creadas, clonadas y destruidas a demanda.
Posibilidad de vender capacidad de cálculo a otras empresas (Virtual Private Servers).
Simplificación de los sistemas de copia de seguridad. Entornos para aprendizaje y pruebas. Se simplifica el montaje y experimentación de otros sistemas operativos y software distinto al que usamos habitualmente. Ideal para estudiantes.
Compatibilidad de programas. Posibilidad de usar programas que no ofrezcan versiones para nuestro sistema habitual.
Entornos controlados. Se pueden probar programas en los que no confiamos,
Fácil migración de unos ordenadores a otros.
INCONVENIENTES
Un único punto de fallo para todas las máquinas virtuales que se ejecuten en un único servidor físico. Para solucionarlo se deben utilizar servidores con un alto nivel de redundancia de discos, memoria, red, fuente de alimentación, y demás componentes (algo bastante más fácil de conseguir si trabajamos en entornos virtualizados)
Actualmente se asocia un único servicio a cada servidor, con el fin de limitar el alcance de un hipotético fallo
1.3.1. Herramientas.¶
TIPO 1: Denominada nativa/unhosted, es software que se ejecuta directamente sobre el hardware, para ofrecer la funcionalidad. El hipervisor es un SO cuya única misión es gestionar conjuntos de clusters, Máq. Virtuales, unidades de almacenamiento, etc… Un ejemplo de este tipo de virtualización lo puedes encontrar en el siguiente video, en el que muestran una instalación real de un hipervisor denominado Proxmox.

Ejemplos
Proxmox
PowerVM (IBM)
ESXi (VmWare)
Xen
OpenVZ
TIPO 2: denominada hosted o paravirtualización, es software que se ejecuta sobre un SO para ofrecer la funcionalidad(con la consiguiente penlización en rendimiento). Es la virtualización que has usado hasta ahora.

Ejemplos
Parallels (Windows/Mac/Linux)
VMware (Windows / Linux)
VirtualBox (Windows/Mac/Linux, Gratis)
QEMU(Linux, Gratis)
Windows Virtual PC (Windows, Gratis)
CONTENEDORES: Es una alternativa más de virtualización, que persigue mejorar el rendimiento y permitiendo el diseño de infraestructuras de trabajo más dinámicas. Posibilidad de aplicaciones de gestión automática(Kubernetes..)

Ejemplos
Docker
LXC/LXD
Windows servers containers
CLOUD virtualization: Virtualización en sistemas remotos, con todas la ventajas del cloud computing (Azure, AWS, GoogleCloud..)
Puedes encontrar un interesante artículo de las diferencias entre MV y contenedor, y la evolución de estas tecnologías en los últimos años en el siguiente blog.
1.3.1.1. Máquinas Virtuales¶
A la hora de virtualizar SO, debemos tener varios elementos y parametros de configuracion en cuenta. En concreto, utilizando VirtualBox debemos prestar especial atención a:
Requisitos del SO a virtualizar → En el apartado de Configuración de VBox (Memoria, procesador..)
Medios virtuales → Para incluir el/los discos duros necesarios para nuestro sistema, además de vinular la ISO del SO que queremos instalar.
Configuracion de red en las MV → Uno de los apdos. más importantes. Debemos tener claro los distintos tipos de red en VBox y la utilidad de cada uno. Puedes encontrar una buena aclaración en el apartado correspondiente del manual oficial de VirtualBox.
Dispositivos USB → Extension Pack (se instala en la consola de administración de VBox)
Carpetas compartidas → GuestAdditions (Se deben instalar en cada MV por separado. ¿Sabrías hacerlo en una MV sin interfaz gráfica(GUI)?). Puedes encontrar guías de como hacerlo en la web:
1.3.1.2. Contenedores¶
Los contenedores(containers) son el siguiente paso en la evolución de la virtualización de sistemas operativos, su objetivo principal es OPTIMIZAR el uso de los recursos de la máquina anfitrión(host). Se puede entender como una virtualización a nivel de sistema operativo. Se evita la sobrecarga asociada con tener a cada huésped ejecutando un sistema operativo completamente instalado. Una desventaja de la virtualización basada en contenedores, sin embargo, es que cada invitado debe utilizar el mismo sistema operativo que utiliza el host, además de tener un menor nivel de aislamiento.
Docker
Se ha impuesto como sistema de virtualización de aplicaciones mediante contenedores. Podemos encontrar muchos tutoriales y formaciones en la web 1. Varios aspectos destacan:
Inicialmente creada para GNU/Linux. Actualmente también existe como aplicación para Windows 2010/2016/2019 Srv
Los contenedores ofrecen un mejor rendimiento que las MV.
Pueden crearse redes virtuales privadas de contenedores
El núcleo es el Docker Engine, pero existen opciones para gestionar contenedores.
Docker Machine. Para poder ejecutar docker, debemos instalarlo previamente en nuestro SO (preferiblemente una MV Linux Server, donde ya viene incluido en los repositorios por defecto), teniendo en cuenta varias cosas:
Docker autocompleta los comandos.
En caso de duda
$docker --helpPara instalar docker
#apt install docker docker.ioPara ejectuar docker sin privilegios de administración(sin sudo)
#usermod -a -G docker usuarioEstado de Docker, imágenes y contenedores:
$docker system info $docker [image|container] [ls|rm|prune|load..] [-a]
Arrancar|parar un contenedor:
$docker [container] [run|start|pause|kill|restart...]
Gestíon de las redes(doc oficial) en nuestros entornos(similar a lo que ofrecen las MV):
$docker network [ls|connect|create|rm|prune]
Administración de volúmenes(doc oficial). Es importante entender la diferencia entre Volúmenes vs Dir. Enlazado
$docker volume [create|inspect|ls|prune|rm]
Ejecución de comandos contra los contenedores.
$docker exec -it apache-2 /bin/bash $docker cp index.html apache:/opt/bitnami/apache/htdocs/index.html
Como ejemplo, un comando típico de docker, en el que publicamos el puerto 80 del contenedor en el 8080 del host, puede ser:
$docker run -d -p 8080:80 --name=XX --mount type=bind, source=dirHost, target=dirContainer DockerImg
Si quisiéramos organizar la ejecución de dos contenedores relacionados de alguna manera (por ejemplo un servidor http y un servidor de BD que trabajan en conjunto para servir una página web) tendríamos la opción de usar Docker-compose2. Previamente debemos haber instalado el paquete docker-compose.
En los contenedores en general y en Docker en particular se manejan varios conceptos que debemos conocer para aprovechar todas sus posibilidades:
Imágenes: Plantillas a partir de las cuales lanzamos los contenedores. Pueden estar en repositorios públicos o privados (creados por nosotr@s mism@s)
Contenedores: Se ejecutan a partir de las imágenes.
Volúmenes: herramienta para conseguir la persistencia de los datos en la ejecución de contenedores.
Redes: Docker permite la gestión de las redes a distintos niveles y características. Esto proporciona opciones muy útiles para crear distintos escenarios.
¿SABRÍAS?…
Instalar docker y docker-compose en una máquina virtual Ubuntu Server
Conseguir ejecutar comandos de docker sin necesidad de sudo.
Descargar la imagen Hello-world del repoitorio oficial de docker.
Listar las imágenes y contenedores existentes en tu MV, ejecutar la imagen anterior, comprobar su estado y finalmente borrar la imagen de tu MV.
Ejecutar el contenedor httpd poniéndole como nombre web y redirigiendo al puerto 8080 del host(tu MV) el puerto 80 del contenedor. Prueba el acceso a la web.
Modificar la ejecución anterior para que tu contenido web se encuentre en una carpeta real de tu MV.
Ejecutar 4 veces más el contenedor con las mismas características que el caso anterior, en cada caso a los puertos 8081..8084 y con los nombres web2..web5
Ejecutar el ejemplo de docker-compose incluido en el pie de página con éxito.
En el aula virtual del módulo puedes encontrar una sección RECURSOS con un completo manual de Docker con todos las herramientas comentadas más desarrolladas y ejemplos de utilización de las mismas.
1.3.1.3. Automatización¶
La ORQUESTACIÓN O AUTOMATIZACIÓN de los servicios consiste en la organización de los sistemas, configuración, gestión y coordinación automatizadas de los sistemas informáticos, las aplicaciones y los servicios. Ayuda a la TI a gestionar con mayor facilidad las tareas complejas y los flujos de trabajo, ya que éstos suelen ser variables(piensa en el ejemplo de una web como Amazon en determinadas fechas del año como navidades, Black Friday…) 3. Con las herramientas que vamos a ver conseguimos cosas como:
Mejorar el funcionamiento de nuestros servicios, ya que se adaptan a las necesidades en cada momento.
Optimizamos el uso de nuestros recursos, ya que los asignamos de manera coherente.
Reducimos la presencia de errores al limitar la intervención humana.
Ahorro de costes.
Tenemos multitud de herramientas disponibles para configurar entornos de orquestación/automatización a distintos niveles:
Contenedores: Kubernetes o Docker Swarm.
En la nube(cloud computing): Cada empresa ofrece distintas herramientas, si nos fijamos en AWS, y según su propia documentación: Para obtener control completo sobre el entorno de informática, elija ejecutar los contenedores en Amazon Elastic Compute Cloud (EC2). Para los orquestadores de contenedores, puede elegir Amazon Elastic Container Service (ECS) o Amazon Elastic Kubernetes Service (EKS).
- Prueba a instalar Vagrant en tu equipo y a lanzar el ejemplo de Vagrantfile Inicial que se encuentra en el espacio AULES, prueba a ejecutar un primer escenario de IaC con Vagrant en una máquina real (tu portátil o si arrancas tu SO anfitrión desde un DD externo).
- Si quieres probar tu primer CLUSTER de contenedores en una MV, puedes seguir lo indicado en https://www.campusmvp.es.
Una vez ejecutado este ejemplo, piensa las posibilidades que te ofrecen estas herramientas:
Arranque/parada en remoto de varias MV.
Configuración de las características de esas MV.
Automatización de instalaciones, comprobaciones, etc…
1.3.1.4. IaC¶
Gracias a estas capacidades aparece un concepto denominado Infraestructura Como Código (IaC)(https://aws.amazon.com/es/what-is/iac/) en el que trabajamos con nuestos escenarios de una manera completamente diferente a la clásica.

Algunos ejemplos de herramientas IaC pueden ser:
Terraform
Chef
AWS CloudFormation
Puppet
1.3.1.5. Cloud Computing¶
Piensa en todas las alternativas que hemos analizado en este punto. Tu labor como Técnico de Administración de Sistemas en un futuro consisitirá en crear, gestionar y adaptar este tipo de escenarios. Teniendo en cuenta que estamos hablando siempre en entornos locales(servidores locales ejecutando alguna de las soluciones propuestas), piensa en las ventajas de poder realizar TODO esto en sistemas remotos. ¿Te gusta tener tus documentos en la nube para tenerlos siempre accesibles, no encargarte de copias de seguridad y además poderlos compartir y editar con otras personas? Pues la misma filosofía aplicada a la virtualización es lo que se conoce como COMPUTACIÓN EN LA NUBE o CLOUD COMPUTING
¿SABRÍAS?… Imaginar alguna de las ventajas/desventajas de esta tecnología.
Algunas de las empresas más importantes se han involucrado de lleno en este campo.
Amazon -> AWS
Microsoft -> Azure
Google -> Google Cloud Platform
Oracle -> Oracle Cloud
1.3.2. Escenarios en el aula¶
Para el módulo de Servicios de Red e Internet el escenario más típico a configurar en nuestros servidores virtualizados (en los SSOO correspondientes y con la herramienta más oportuna en cada caso), serán los siguientes:
Una tarjeta de red conectada a la red real del aula. Esta será la IP pública de ’nuestra red’ virtualizada.
El resto de tarjetas de red configuradas de manera que solo sean visibles en nuestro equipo, y en la red privada correspondiente.
A lo largo del módulo, uno de los aspectos básicos a comprender de VirtualBox, será el funcionamiento de las distintas opciones en cuanta a redes. Puedes encontrar toda la información en la documentación oficial de VBox
Para probar el funcionamiento de nuestros servidores, crearemos MV que actúen como clientes, teniendo una única interfaz de red, la cual se conectará a la red privada .

En algunos apartados del módulo (especialmente en el servicio web) podremos encontrarnos con escenarios donde ejecutemos múltiples instancias de contenedores para simular un entorno de alta disponibilidad4.

-
Más ayuda en: ↩
-
Ejemplo: Como levantar un entorno con varios contenedores con docker-compose ↩
-
Ejemplo: Tutoriales de RedHat ↩
-
En la imagen el símbolo ? es un balacenador de carga: apache o NginX ↩
