Introducción y primeros pasos con vSphere Integrated Containers

Hoy vamos a empezar a conocer y ver como funciona vSphere Integrated Containers, que la solución que proporciona VMware para poder ejecutar y sobre todo gestionar contenedores docker en una infraestructura vSphere. Es una solución que está en sus primeras versiones pero que creo que ya podemos ir viendo como funciona.

En alguna entrada anterior ya hemos visto como funcionan los contenedores docker y cómo se diferencian de las máquinas virtuales. Los contenedores implican un cambio, no sólo en la parte de desarrollo sino también en la parte de los administradores de sistemas que tenemos que gestionar la infraestructura de virtualización.

Para conocer donde encaja vSphere Integrated Containers vamos a plantear la situación en la que queremos utilizar (o nos piden utilizar) contenedores en nuestra infraestructura.

La solución que podríamos dar en una infraestructura típica de vSphere es la siguiente:

  • Creamos una máquina virtual Linux (con la distribución que queramos) en la infraestructura vSphere
  • Le asignamos recursos (CPU, memoria, disco…) y le asignamos y configuramos una dirección IP
  • Proporcionamos la IP a quién nos haya solicitado el uso de contenedores para que se conecte a esa máquina, se instale y configure docker y gestione sus imágenes y contenedores.

Es una situación, que funciona y puede dar servicio, pero surjen algunas preguntas:

  • Como administrador de la infraestructura de vSphere, ¿cómo se que una máquina está utilizando contenedores? ¿qué contenedores? ¿cuantos?…
  • ¿Como se gestionan los parches de esa máquina Linux? ¿Necesitaría una licencia? (por ejemplo si utilizamos Red Hat)
  • Qué pasa si quiero asignar más recursos, o balancearlos ¿creo otra máquina virtual?
  • ¿Cómo se gestionan las copias de seguridad?

Es aquí donde entra en juego vSphere Integrated Containers, cambiando esta forma de trabajar con los contenedores que nos permite dar respuesta y solución a algunas de estas preguntas.

 

¿Qué es vSphere Integrated Containers?

La solución está basada en 3 componentes principales:

  • vSphere Integrated Containers Engine: es el motor que permite la ejecución de contenedores en los hosts VMware ESXi.
  • vSphere Integrated Containers Registry: es el registro que permite almacenar y distribuir las imágenes de los contenedores
  • vSphere Integrated Containers Management Portal: es un portal que proporciona un interfaz web desde el que gestionar y crear los contenedores.

Una de las ventajas es que al ser un proyecto de código abierto podemos tener acceso a todo el código de los diferentes componentes

Algunas de las características más importantes son las siguientes:

  • vSphere es el host que ejecuta los contenedores, no Linux
  • Los contenedores se despliegan como máquinas virtuales, no dentro de máquinas virtuales
  • Cada contenedor está completamente aislado del host y del resto de contenedores
  • Permite una gestión dinámica de los recursos
  • vSphere proporciona la infraestructura
  • Los contenedores pueden utilizar las redes definidas en la infraestructura vSphere
  • Las imágenes, volúmenes y contenedores se almacenan en datastores VMFS

 

¿Que requerimientos tiene?

  • Disponer de una infraestructura vSphere
  • Es una solución gratuita, por lo que no es necesario una licencia en concreto para poder utilizarla, pero tiene un par de condicionantes
    • Para tener soporte si necesitamos licencia Enterprise Plus
    • Es necesario disponer de un vswitch distribuido por lo que en la práctica nos condiciona el licenciamiento de la infraestructura vSphere.

 

Componentes

Dentro del despliegue e implantación de vSphere Integrated Containers, tenemos los siguientes componentes:

  • vSphere Integrated Containers Appliance: es el appliance que proporciona los servicios de Registry y Management Portal, así como los archivos necesarios para desplegar el resto de componentes
  • Virtual Container Host (VCH): es la vApp que permite agrupar y visualizar los contenedores.
    • VCH Endpoint VM: es la máquina dentro del VCH que proporciona los servicios de API, logging, monitorización..
    • vic-machine: es el binario que permite gestionar los VCH
  • Container VM: representa el contenedor que se ejecuta sobre un kernel Photon Linux

 

¿Cómo obtener vSphere Integrated Containers?

Podemos acceder a la sección de página de descargas de VMware: http://www.vmware.com/go/download-vic donde podemos acceder a la última versión estable.

También podemos obtener versiones de diferentes del paquete OVA desde: https://console.cloud.google.com/storage/browser/vic-product-ova-builds

Para obtener documentación e información:

  • https://vmware.github.io/vic-product/
  • https://vmware.github.io/vic-product/assets/files/html/1.1/

Y si queremos acceder al código fuente de los diferentes componentes

 

Instalación

Una vez que nos hemos descargado el archivo “vic-v1.1.1_56a309fb.ova” procedemos a su despliegue en la infraestructura vSphere a través del vCenter.

  • Desplegamos el OVA en nuestra infraestructura, indicando nombre y ubicación
  • En la sección en la que personalizamos el despliegue de la plantilla, indicamos los siguientes campos:
    • Introducimos la contraseña del usuario root
    • Permitimos las conexiones SSH
    • Configuración de red (dirección IP, máscara, puerta de enlace …)
    • Registry Configuration
      • Puertos de los servicios Registry y Notary (443 y 4443 por defecto)
      • Contraseña del usuario admin del servicio Registry
      • Contraseña del usuario root de la base de datos MySQL
      • Podemos incluir un certificado personalizado si ya lo tenemos o dejarlo en blanco para que se autogenere.
    • Management Portal Configuration
      • Puerto de escucha (8082 por defecto)
      • Podemos incluir un certificado personalizado si ya lo tenemos o dejarlo en blanco para que se autogenere.
    • FileServer Configuration
      • Puerto de escucha (9443 por defecto)
      • Podemos incluir un certificado personalizado si ya lo tenemos o dejarlo en blanco para que se autogenere.

  • Finalizamos y esperamos a que se despliegue la nueva máquina.

Tras esto tendremos una nueva máquina virtual con las siguientes características:

  • 2 vCPU
  • 8 GB RAM
  • 80 GB disco

En este momento hemos desplegado vSphere Integrated Containers Appliance en nuestra infraestructura por lo que podemos encenderla y comenzar a utilizarla.

 

 

Si nos conectamos, podemos ver que los servicios los proporciona con contenedores docker de los diferentes componentes:

De un vistazo, podemos ver:

  • Contenedores del servicio Registry (nombre harbor)
  • Contenedores del servicio Management Portal (admiral)
  • Contenedores del servicio Notary
  • nginx (entiendo que como publicador de los servicios de Registry y Notary)

Vamos a echar un primer vistazo para comprobar que todo está funcionando, y con el navegador conectarnos a los servicios.

  • Si accedemos a https://vic01.localdomain.local (el nombre de mi appliance VIC) accedemos al portal de login de Registry

  • Si nos conectamos con el usuario admin, podemos ver de un vistazo rápido lo que nos ofrece (más adelante lo veremos más en detalle)

  • Si nos conectamos al puerto 8282, accedemos al Management Portal. En este caso nos encontramos con una pantalla de bienvenida y con las instrucciones básicas para desplegar una aplicación

  • Al entrar, nos podemos mover por los diferentes menús de Hosts, plantillas, recursos

  • Si nos conectamos al puerto 9443, vemos que tenemos enlaces para descarganos algunos archivos que vamos a necesitar en los siguientes pasos

Una vez que hemos visto que parece que está funcionando correctamente vamos a continuar con nuestro proceso de instalación.

Instalación del plugin para el cliente web

A continuación vamos a instalar el plugin que nos va a permitir ver en el cliente web informacíon relacionada con la infraestructura de vSphere Integrated Containers. El plugin está disponible tanto para el cliente Flash como para el cliente HTML5 así como para la instalación del vCenter en Windows o con VCSA (en este caso voy a hacer mostrar los pasos para la instalación en un vCenter VCSA)

  • Nos conectamos al vCenter por SSH con el usuario root
  • Accedemos a la shell si no lo tenemos por defecto
  • Nos descargamos el archivo desde el appliance VIC

o en mi caso

  • Descomprimimos el archivo que nos hemos descargado

  • Obtenemos el thumbprint del certificado

 

  • Editamos el archivo vic/ui/VCSA/configs y modificamos los siguientes valores
    • VCENTER_IP
    • VIC_UI_HOST_URL
    • VIC_UI_HOST_THUBPRINT
    • PLUGIN_TYPE

 

  • Accedemos a la carpeta vic/ui/VCSA y ejecutamos ./install.sh. Proporcionamos las credenciales para conectarse al vCenter y esperamos a que termine la instalación

  • Reiniciamos el servicio del cliente web

  • Nos conectamos al cliente web y comprobamos que tenemos el nuevo icono disponible.

  • Podemos volver a editar el archivo configs y cambiar el valor de PLUGIN_TYPE por “flex” para instalar el plugin para el cliente Flash

El siguiente paso a a ser crear un VCH

Creación de VCH con vic-machine

El primer paso es obtener el ejecutable vic-machine

  • Accedemos al repositorio de archivos y descargamos a nuestra máquina cliente el archivo vic_1.1.1.tar.gz

  • Descomprimimos el archivo y podemos ver los distintos archivos disponibles

  • Vemos que entre los archivos se encuentran los ejecutables de vic-machine para las distintas distribuciones (linux, windows…) así como las imágenes que se utilizan para desplegar VCH Endpoint VM y Containers VM. En mi caso voy a utilizar el ejecutable para windows.

Antes de comenzar con el despliegue de VCH, tenemos que cumplir con algunos requerimientos:

  • Abrir el puerto 2377 en el firewall de los servidores ESXi. Para esto podemos hacerlo desde el interfaz de VMware vSphere o podemos hacerlo con el propio binario de vic-machine. Por ejemplo, para habilitar el puerto en los servidores del Cluster01 ejecutamos:

 

  • El siguiente paso es preparar los grupos de puertos necesarios para VCH

Vamos a ver las redes que necesitamos y como las vamos a implementar para que estén disponibles a la hora de desplegar VCH y los contenedores.

En el siguiente esquema vemos las redes que vamos a necesitar

  • Management Network: es la red por la que se comunican VCH, vCenter y ESXi.
  • Client Network: la red en la que está disponible el Endpoint con el API docker.
  • Public Network: es el interfaz público por el que los contenedores acceden a Internet
  • Bridge Network: la red que utilizan los contenedores para comunicarse entre ellos. Requiere que sea un grupo de puertos en un vSwitch distribuido. Cada VCH requiere un grupo dedicado.
  • Container Network: son redes de la infraestructura vSphere que pueden estar disponibles a los contenedores.

 

  • Por esto, en nuestra infraestructura vSphere, creamos los siguientes elementos:
    • Un grupo de puertos en un vSwitch distribuido llamado VIC-VCH01-Bridge.
  • En estos momentos, VCH solo soporta 3 grupos de puertos diferentes. La red Bridge requiere de su propio puerto, por lo que al menos 2 de las redes Management, Client y Public tienen que compartir el mismo grupo de puertos
    • Un grupo de puertos llamado VIC-Management-Client
    • Un grupo de puertos llamado VIC-Public
  • Requerimos un datastore en el que almacenar las imágenes, contenedores… en mi caso el datastore STORAGE01-VMWARE-VM-01

 

Vamos a proceder a desplegar nuestro primer VCH, y para ello ejecutamos:

Nos tenemos que quedar con la información mostrada al final

  • 10.0.254.2: es la dirección IP del VCH Endpoint VM
  • https://10.0.254.2:2378 es la dirección del VCH Admin Portal
  • 10.0.254.3: es la dirección IP de la red Pública
  • DOCKER_HOST=10.0.254.2:2375: es la variable que utilizaremos en el cliente docker para conectarnos a este servidor

Existen más parámetros para configurar el VCH (como puede ser direcciones IPs fijas de las redes, redes de vSphere a mapear, carpetas específicas en los volúmenes donde guardar las imágenes y contenedores…)

Como podemos ver todo se ha creado correctamente y ya tenemos nuestro primer VCH creado

Vamos a desplegar nuestro primer contenedor en la infraestructura vSphere. Para ello seguimos estos pasos:

  • Accedemos a una máquina con el cliente docker instalado
  • Ejecutamos el comando info contra el VCH para obtener la información

 

  • Vamos a ejecutar un contenedor en el VCH, por ejemplo desde la imagen de wordpress

 

  • Con este comando nos estamos descargando la imagen de grafana/grafana en nuestro cliente desde el repositorio oficial y la estamos “subiendo” a VCH01. Podemos comprobarlo ejecutando el comando docker images y ver que en el cliente local no tenemos ninguna imagen, lo tenemos en el VCH

  • Si accedemos a los archivos y carpetas del datastore, podemos ver que hay una carpeta con el nombre del VCH (VHC01), dentro una carpeta de nombre VIC y en ella una carpeta images con las capas descargadas.

  • Ahora vamos a ejecutar un contenedor desde esta imagen

  • Podemos ver que se ha creado una nueva máquina en el vApp VCH01 con el nombre que le hemos puesto al contenedor

  • Podemos verlo también desde el cliente docker

 

Ahora vamos a ver un poco como está configurado el contenedor en vSphere.

  • Recursos: tiene asignados 2 vCPUs y 2Gb de RAM
  • Está conectado con un interfaz de red a VIC-VCH01-Bridge
  • Tiene conectados 2 discos duros
    • Uno es un archivo .vmdk propio de la máquina virtual
    • El otro disco es un archivo .vmdk de la imagen correspondiente

  • Tiene mapeado una imagen ISO en el CD/DVD (V1.1.1-10711-56A309F-bootstrap.iso) que es el archivo con el kernel de Photon Linux con el que arranca

  • La carpeta de la máquina tiene de nombre el identificador del docker

 

  • Si creamos un contenedor y le mapeamos un puerto, en este caso deberiamos de tener acceso al servicio a través de la IP de la red Pública del VCH, en el caso de mi ejemplo, a través de la IP 10.0.254.3
  • También podemos ver los volumenes y las redes disponibles para docker

 

  • Y como VMware no ha implementado todos los comandos del API de docker

VCH Admin Portal

  • Si accedemos con el navegador a la dirección del VCH Admin Portal (https://10.0.254.2:2378) nos solicita las credenciales de vSphere

  • Tras acceder podemos ver el estado del VCH y acceder a los diferentes logs del servicio

 

Trabajando con el Management Portal

  • Si accedemos a Management Portal, podemos añadir el VCH01 para poder tener una visión desde ahí, de los componentes de la infraestructura
  • Añadimos el host.

  • Podemos tener una visión de los elementos que están funcionando en el host

  • Podemos ver más información de los contenedores

  • Desde aquí podemos también crear plantillas o incluso escalar los contenedores a otros hosts. Se puede aprovisionar directamente un contenedor desde aquí de una forma muy sencilla

 

 

Uso de Registry

Hasta ahora hemos utilizado el registro público de docker para obtener las imágenes. Pero podemos utilizar el servicio Registry que tenemos disponible con vSphere Integrated Containers.

Registry funciona con proyectos, usuarios y repositorios.

  • Los proyectos pueden ser públicos (todos los usuarios pueden hacer pull de imágenes) o privados (sólo los miembros con permisos pueden hacer pull de imágenes)
  • Los usuarios pueden ser locales o utilizar un repositorio LDAP
  • Permite implementar el servicio de Docker Notary para firmar y verificar las imágenes.
  • Permite acceder a los logs del proyecto.

La configuración de Registry implica:

  • Establecer el origen de los usuarios (local o LDAP)

  • Configuración del uso de certificados en la replica con registros remotos
  • Configuración del servidor de correo

 

Como ejemplo vamos a crear un usuario

  • Creamos el usuario

  • Podemos darle el permiso de administrador

  • Nos volvemos a conectar con el usuario que hemos creado

  • Creamos un nuevo proyecto
    • Indicamos el nombre (como curiosidad me he encontrado con el error de no poder crear un proyecto con el inicio en mayúsculas)
    • Podemos marcar si es un proyecto Público o Privado

 

Ahora vamos a ver como trabajar con imágenes y contenedores en el Registry.

  • Partimos de la situación en la que:
    • Tenemos la imagen de wordpress en el VCH01 pero no tenemos ninguna imagen en local

  • Descargamos la imagen de MariaDB en local (lo normal sería trabajar con una imagen que hemos desarrollado nosotros, pero para el ejemplo utilizo esta imagen)

  • Etiquetamos la imagen con un tag haciendo referencia al servidor de Registry y el proyecto

  • Para confiar en el certificado desde el cliente docker, creamos la siguiente carpeta

  • Y descargamos el certificado del servidor

  • Nos conectamos con el usuario

  • Hacemos push de la imagen al Registry

  • Podemos ver en el repositorio la imagen que hemos creado

Ahora podemos utilizar esta imagen desde el VCH. Pero para ello, tenemos que haberlo creado añadiendo el certificado del Registry. Para ello, tenemos que seguir estos pasos:

  • Descargar el certificado del Registry y guardarlo junto a los archivos de vic-machine. Lo podemos hacer desde el propio interfaz web del Registry
  • Crear el VCH utilizando el parámetro
  • Hacemos el pull de la imagen

 

 

Resumen

La verdad es que ha sido interesante el “jugar” con vSphere Integrated Containers y ver como VMware está trabajando para integrar una infraestructura consolidada y robusta como es vSphere con el mundo de los contenedores. Para ello es necesario desplegar una infraestructura que, en un primer momento, puede parecer compleja, pero que seguiremos en el futuro ya que se prevee una constante evolución en el uso de los contenedores.

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.