¿Cómo desplegar un servicio nuevo en Rancher?

En el caso de que queramos desplegar en Rancher servicios adicionales a los servicios de Plataforma, o servicios que no se engloben dentro de la gestión de micro servicios de Plataforma lo haremos siguiendo unas pautas:

 

Añadir un registro privado de imágenes Docker

Si para almacenar nuestras imágenes Docker estamos usando un registro privado y protegido mediante usuario y contraseña, tendremos que registrarlo en el CaaS para delegar la autenticación en Rancher, para ello, una vez logados en Rancher iremos a la opción Infrastructure → registries:

Y añadiremos nuestro registro como “Custom“

Una vez hecho esto deberíamos verlo registrado:

Con esto evitaremos tener que hacer docker login en la vm donde se van a desplegar nuestros servicios.

Crear un stack aislado e independiente del stack de Plataforma

Con el fin de evitar problemas como puede ser parar por accidente un módulo de Plataforma, actualizarlo o incluso borrarlo y de asegurar que nuestros servicios se despliegan de manera aislada, creamos un stack independiente de Plataforma. Para ello elegiremos el entorno sobre el que queramos desplegar:

Y una vez dentro podremos ver el enlace que nos permite crear el stack:

Pincharemos en “Add Stack“, donde nos aparecerá una pantalla donde podemos informar el nombre del stack, e incluso suministrar un docker-compose que tengamos (versión 2) y si pinchamos en opciones avanzadas podremos incluso añadirle uno o varios tags (ya veremos más adelante para qué) por último el check “Start services after creating“ nos permitirá arrancar todos los servicios, a la vez, que incluyamos en el docker-compose una vez creado el stack.

Pinchamos en “Create“ y podremos ver nuestro stack, en este caso vacío, puesto que no hemos suministrado ningún docker-compose

Desplegar un servicio dentro del stack

Una vez tengamos el stack podremos empezar a desplegar nuestros servicios pinchando en el botón “Add Service“ que se encuentra a la derecha del nombre del stack:

Nos aparecerá la siguiente pantalla en donde podremos indicar lo siguiente:

  • Nombre del servicio, que es el modo de descubrimiento entre los contenedores que lo quieran invocar, descripción y la imagen con su versión o tag. Además podremos indicar cuantos contenedores queremos desplegar del servicio mediante la opción “Scale“ y con el check “Always pull image before creating“ forzaremos a que con una operación “Upgrade“ Rancher vaya a buscar al registry cambios en la imagen con el mismo tag y se la descargue.

  • NATeo de puertos y enlaces directos entre servicios. Con el NAT o “Port Map“ podremos exponer un puerto del contenedor al host. Los “Service Links“ nos permitirán invocar desde nuestro contenedor a otros servicios en stacks diferentes mediante su nombre directo sin necesidad de indicar el stack o un alias que le queramos dar.

No es recomendable exponer puertos si hay otros servicios exponiendo puertos en la vm, pudiendo acarrear problemas de colisión

Para invocar servicios en stacks distintos lo haremos indicando su nombre de la siguiente manera: <nombre_servicio>.<nombre_stack>

  • En el recuadro inferior tenemos múltiples opciones de configuración:

    • Pestaña “Command“: Podremos definir variables de entorno, modo de re arranque si el contenedor se cae, usuario con el que el contenedor arranca, un entry-point distinto, etc…

       

    • Pestaña “Volumes“: Nos permitirá poder persistir la información de nuestro contenedor en el filesystem del host donde se despliega.

       

    • Pestaña “Networking“: En esta pestaña podemos definir que tipo de red usará nuestros contenedores, por defecto usará la red gestionada por Docker. Además podemos añadir servidores DNS adicionales o de resolución de nombres, establecer un nombre al contenedor, etc…

       

    • Pestaña “Security/Host“: Opciones para limitar el acceso a los recursos del Host por el contenedor, esto es, memoria, cpu, etc… además también podremos establecer parámetros de log.

       

    • Pestaña “Secrets“: Nos permitirá almacenar información sensible, como contraseñas de acceso a base de datos.

       

    • Pestaña “Health Check“: Esta pestaña es importante puesto que determinará parte de la alta disponibilidad de nuestros servicios, en ella podremos definir el puerto de la aplicación contenerizada y su protocolo (TCP/HTTP) y en caso de que el puerto o servicio deje de estar operativo qué es lo que el CaaS tiene que hacer, normalmente elegiremos recrear el servicio para garantizar que si se cae vuelve a estar operativo.

       

    • Pestaña “Labels“: Permite añadir etiquetas a nuestro servicio para posteriormente poder definir reglas de planificación de despliegue en base a ellas.

       

    • Pestaña “Scheduling“: Junto a la pestaña anterior nos permite definir reglas de planificación de despliegue en base a etiquetas, por ejemplo, que el servicio despliegue sólo en los nodos etiquetados como “DEV“

       

Finalmente crearemos nuestro servicio y podremos verlo en el stack:

Gestión del ciclo de vida de los servicios

Con el servicio debidamente creado podremos gestionar su ciclo de vida.

Desde las opciones del servicio podremos:

  • Upgrade: Actualizar la definición del servicio o la versión del mismo, finalizándolo o volviendo hacia atrás (rollback)

  • Restart: Reiniciar todos los contenedores del servicio

  • Stop: Pararlo sin perder el contenido no persistido del contenedor

  • Delete: Borrar el contenedor, sin embargo el servicio volverá a recrearlo según el factor de réplica establecido (mínimo 1)

  • View in API: API REST asociada que disponibiliza todas las operaciones descritas vía REST

  • Clone: Nos permite clonar el servicio con las definición exacta que tuviera

  • Edit: Sin necesidad de reiniciar los contenedores, podemos modificar alguno de sus valores

     

Además, si entramos en el servicio podremos modificar el número de contenedores en ejecución dependiendo de la carga soportada mediante la opción “Scale“:

En este ejemplo el factor de escala está establecido en tres, de esta manera el CaaS (Rancher) se asegura siempre que el número de estos contenedores es siempre el mismo, y si uno de ellos se cae automáticamente lo vuelve a levantar. Además el servicio ante una petición realiza el balancero Round-Robin entre los tres contendores.

Monitorización de los servicios

Si accedemos a cualquiera de los contenedores de un servicio podremos ver una pequeña monitorización del mismo, tal como:

  • Consumo de cpu

  • Consumo de memoria

  • Consumo de red

  • Consumo de disco

  • IP asociada

  • Nombre generado del contenedor

  • Imagen de la que parte

  • Tiempo de vida

Además en las opciones disponibles del contenedor podremos visualizar los logs volcados a la salida estándar:

Por último, para tareas operativas podremos acceder a la shell del contenedor y explorar su filesystem: