Microservicios con Kubernetes
Para explicar como funcionan los microservicios con Kubernetes se va a usar la misma aplicación que todos usan para realizar la demostración. Es una aplicación simple, pero completa, desarrollada por Docker para demostrar las diversas características disponibles en la ejecución de un cluster de aplicaciones en Docker. Vamos a explicar la aplicación. Es es una aplicación de votación que proporciona una interfaz para que un usuario vote y otra interfaz para mostrar los resultados. La aplicación consta de varios componentes:
- La aplicación de votación: es una aplicación web desarrollada en Python para proporcionar al usuario una interfaz para elegir entre dos opciones, un gato y un perro.
- Cuando realiza una selección, el voto se almacena en Redis, una base de datos en la memoria.
- El voto es procesado por el trabajador, que es una aplicación escrita. NET que toma el nuevo voto y actualiza la base de datos de persistencia.
- La base de datos persistente se encuentra en postgreSQL y tiene una tabla con el número de votos para cada categoría.
- Finalmente, el resultado de la votación se muestra en una interfaz web que es otra aplicación web desarrollada en Nodejs. Lee el recuento de votos de la base de datos postgreSQL y lo muestra al usuario.
La aplicación de ejemplo está construida con una combinación de diferentes microservicios con Kubernetes, diferentes herramientas de desarrollo y múltiples plataformas de desarrollo, como Python, NodeJS,. NET, etc Esta aplicación de muestra se utilizará para mostrar como configurar un cluster de aplicaciones completa que consta de diversos componentes en Docker.
Se va a crear el cluster en un solo motor Docker usando los comandos de ejecución. Supongamos que todas las imágenes de las aplicaciones ya están compiladas y están disponibles en el repositorio de Docker.
Creación del cluster
- Comenzamos con la capa de datos. Primero, ejecutamos el comando «docker run redis» para iniciar una instancia de Redis. Agregaremos el parámetro -d para ejecutar este contenedor en segundo plano y también nombraremos el contenedor redis. Nombrar los contenedores es importante.
- A continuación, implementaremos la base de datos PostgreSQL en segundo plano, llamando al contenedor «db». Ejecutando el comando «docker run postgres».
- Vamos con los servicios de la aplicación. Implementamos una aplicación front-end para la interfaz de votación ejecutando una instancia de imagen de la aplicación de votación. Ejecutamos el comando «docker run», asignando el nombre al voto de la instancia. Como se trata de un servidor web, tiene una instancia de interfaz de usuario web que se ejecuta en el puerto 80. Publicaremos ese puerto a 5000 en el sistema host para que podamos acceder a él desde un navegador.
- A continuación, implementaremos la aplicación web de resultados que muestra los resultados al usuario. Para ello, implementará un contenedor utilizando la imagen de la aplicación de resultados y publicará el puerto 80 en el puerto 5001 del host. De esta manera, podemos acceder a la interfaz de usuario web de la aplicación resultante en un navegador.
- Finalmente implementamos el trabajador ejecutando una instancia de la imagen del trabajador.
Todas las instancias se ejecutan en el host, pero no puede funcionar. Hemos ejecutado con éxito todos los diferentes contenedores, pero en realidad no los hemos vinculado. No le hemos dicho a la aplicación web de votación que use la instancia particular de Redis. Podría haber múltiples instancias de Redis ejecutándose. No le hemos dicho al trabajador y la aplicación resultante que usen la base de datos postgreSQL particular que ejecutamos. Para vincularlos usamos enlaces. Link es una opción de línea de comando que se puede usar para vincular dos contenedores.
Comunicación
Por ejemplo, el servicio web de la aplicación de votación depende del servicio de Redis cuando se inicia el servidor web. En el código de la aplicación web, hay un parámetro que busca un servicio de Redis que se esté ejecutando en el host Redis. Pero el contenedor de la aplicación de votación no puede resolver un host con el nombre redis. Agregamos una opción de enlace para vincularlo al contenedor de Redis agregando una opción –link al comando Docker Run y especificando el nombre del contenedor de redis, que es en este caso un redis seguido de dos puntos y el nombre del host que está buscando la aplicación de votación. Es por eso que nombramos el contenedor cuando lo ejecutamos la primera vez.
Lo que se está haciendo es crear una entrada en el archivo de host, etc. en el contenedor de la aplicación de votación, agregando una entrada con el nombre de host redis con una IP interna del contenedor de redis. Del mismo modo, agregamos un enlace para que la aplicación de resultados se comunique con la base de datos agregando una opción de enlace para referir la base de datos con el nombre «db», como puede ver en este nuestro código fuente de la aplicación. Finalmente, la aplicación de trabajo requiere acceso tanto a la base de datos Redis como a la base de datos Postgres. Por lo tanto, agregamos dos enlaces a la aplicación de trabajo, un enlace para vincular los redis y el otro enlace para vincular la base de datos postgres.
Fuentes de la aplicación de ejemplo de microservicios con Kubernetes: https://github.com/dockersamples/example-voting-app