Tutorial

Cómo configurar implementaciones multinodo con Rancher 2.1, Kubernetes y Docker Machine en Ubuntu 18.04

DockerDeploymentKubernetesUbuntu 18.04

El autor seleccionó a Code Org para recibir una donación como parte del programa Write for DOnations.

Introducción

Rancher es una popular plataforma de administración de contenedores de código abierto. Rancher 2.X , lanzada a principios del 2018, funciona en Kubernetes y ha incorporado nuevas herramientas, como la administración multiclúster y canales de integración continua (CI) incorporados. Además de la seguridad mejorada, la escalabilidad y las herramientas de implementación fáciles de usar ya disponibles en Kubernetes, Rancher ofrece una interfaz gráfica de usuario (GUI) que facilita más la administración de los contenedores. A través dela GUI de Rancher, los usuarios pueden administrar secretos, gestionar funciones y permisos de forma segura, escalar nodos y pods, y configurar equilibradores de carga y volúmenes sin necesidad de una herramienta de línea de comandos ni de archivos YAML complejos.

A través de este tutorial, implementará un servidor multinodo de Rancher 2.1 usando Docker Machine en Ubuntu 18.04. Al final del tutorial, podrá suministrar nuevos Droplets y pods de contenedor de DigitalOcean a través de la UI de Rancher para expandir o reducir su entorno de alojamiento.

Requisitos previos

Antes de comenzar este tutorial, deberá contar con una cuenta de DigitalOcean y con lo siguiente:

  • Un token de acceso personal de DigitalOcean, que puede crear siguiendo las instrucciones de este tutorial. Este token permitirá que Rancher tenga acceso de API a su cuenta de DigitalOcean.

  • Un nombre de dominio completamente registrado con un registro A que apunte a la dirección IP del Droplet que creó en el paso 1. Puede aprender a apuntar dominios a los Droplets de DigitalOcean leyendo la documentación sobre dominios y DNS de DigitalOcean. A lo largo de este tutorial, sustituya su dominio por example.com.

Paso 1: Crear un droplet con Docker instalado

Para iniciar y configurar Rancher, deberá crear un nuevo droplet con Docker instalado. Para conseguir esto, puede usar la imagen de Docker de DigitalOcean.

Primero, inicie sesión en su cuenta de DigitalOcean y seleccione Crear Droplet. A continuación, en la sección Choose an image, seleccione la pestaña Marketplace. Elija Docker 18.06.1~ce~~3 en 18.04.

Seleccione la imagen de Docker 18.06 del menú One-click Apps

A continuación, seleccione un droplet que no tenga un tamaño inferior a 2 GB y una región de centro de datos para este.

Finalmente, añada sus claves SSH, proporcione un hombre de host para su droplet y pulse el botón Create.

Serán necesarios unos minutos para que el servidor se abastezca y Docker se descargue. Una vez que el droplet se implemente correctamente, estará listo para iniciar Rancher en un nuevo contenedor de Docker.

Paso 2: Iniciar y configurar Rancher

El droplet que creó en el paso 1 ejecutará Rancher en un contenedor de Docker. En este paso, iniciará el contenedor de Rancher y se asegurará de que cuente con un certificado SSL de Let’s Encrypt para que pueda acceder de forma segura al panel de administración de Rancher. Let´s Encrypt es una autoridad de certificación automática de código de código abierto que permite a los desarrolladores proporcionar certificados SSL por 90 días gratis.

Inicie sesión en su nuevo droplet:

  • ssh root@your_server_ip

Para asegurarse de que Docker esté en ejecución, introduzca lo siguiente:

  • docker -v

Compruebe que la versión de Docker listada sea la que espera. Puede iniciar Rancher con un certificado de Let’s Encrypt que ya esté instalado ejecutando el siguiente comando:

  • docker run -d --restart=unless-stopped -p 80:80 -p 443:443 -v /host/rancher:/var/lib/rancher rancher/rancher --acme-domain example.com

La opción --acme-domain instala un certificado SSL de Let’s Encrypt para garantizar que su administrador Rancher se presente en HTTPS: Esta secuencia de comandos también indica al droplet que busque la imagen de Docker rancher/rancher e inicie una instancia de Rancher en un contenedor que se reiniciará automáticamente si se desconecta de forma accidental. Para facilitar la recuperación en caso de pérdida de datos, la secuencia de comandos monta un volumen en la máquina host (en /host/rancher) que contiene los datos de host.

Para ver todos los contenedores en ejecución, introduzca lo siguiente:

  • docker ps

Verá un resultado similar al siguiente (con un ID y nombre de contenedor únicos):

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b2afed0a599 rancher/rancher "entrypoint.sh" 12 seconds ago Up 11 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp wizardly_fermat

Si el contenedor no está en ejecución, puede ejecutar el comando docker run nuevamente.

Para poder acceder al panel de administración de Rancher, deberá configurar su contraseña de administrador y la URL del servidor de Rancher. La interfaz de administrador de Rancher le brindará acceso a todos sus nodos en ejecución, pods y secretos. Por ello, es importante que utilice una contraseña segura para ello.

Vaya al nombre de dominio que apunta a su nuevo droplet en su navegador web. La primera vez que visite esta dirección, Rancher le permitirá establecer una contraseña:

Establezca su contraseña de Rancher usando la línea de comandos

Cuando se solicite su URL del servidor de Rancher, utilice el nombre de dominio orientado a su droplet.

Con esto, habrá completado la configuración del servidor de Rancher y verá la pantalla de inicio de administración de Rancher:

Pantalla de inicio de administración de Rancher

Está listo para continuar con la configuración del clúster de Rancher.

Paso 3: Configurar un clúster con un nodo único

Para usar Rancher, deberá crear un clúster que tenga al menos un nodo. Un clúster es un grupo de uno o más nodos. Esta guía le proporcionará más información sobre la arquitectura de Kubernetes. En este tutorial, los nodos se corresponden con los droplets que Rancher administrará. Los pods representan un grupo de contenedores de Docker en ejecución en el droplet. Cada nodo puede ejecutar muchos pods. Usando la UI de Rancher, puede configurar clústeres y nodos en un entorno subyacente de Kubernetes.

Al final de este paso, habrá configurado un clúster con un único nodo listo para ejecutar su primer pod.

En Rancher, haga clic en Add Cluster y seleccione DigitalOcean como proveedor de infraestructura.

Seleccione DigitalOcean en la lista de proveedores de infraestructura.

Introduzca un nombre en Cluster Name *y desplácese hasta la sección *Node Pools. Introduzca un prefijo en Name Prefix, deje Count en el valor 1 por el momento y seleccione etcd, Control Plane y Worker.

  • etcd es un sistema de almacenamiento de valores de claves de Kubernetes pensado para mantener todo el estado del entorno. A fin de preservar una alta disponibilidad, debería ejecutar tres o cinco nodos etcd para que, si uno se desactiva, siga siendo posible administrar su entorno.
  • Control Plane verifica todos los objetos de Kubernetes, como los pods, en su entorno y los mantiene actualizados con la configuración que proporcione en la interfaz de administración de Rancher.
  • Workers ejecutará las cargas de trabajo reales y los agentes de monitorización para garantizar que sus contenedores continúen en ejecución y en red. Los nodos de trabajo se encuentran donde sus pods ejecutarán el software que implemente.

Cree un grupo de nodos con un único nodo

Antes de crear el clúster, haga clic en Add Node Template a fin de configurar las opciones específicas para su nuevo nodo.

Introduzca su Token de acceso personal de DigitalOcean en el cuadro de entrada Access Token y haga clic en Next: Configure Droplet.

A continuación, seleccione los mismos valores para Region y Droplet Size que en el paso 1. En el caso de Image, asegúrese de seleccionar Ubuntu 16.04.5 x64, ya que actualmente existe un problema de compatibilidad entre Rancher y Ubuntu 18.04. Pulse Create para guardar la plantilla.

Finalmente, haga clic en Crear en la página Add Cluster para iniciar el proceso de aprovisionamiento. Rancher tardará unos minutos en completar este paso, pero verá un nuevo Droplet en su panel de control de droplets de DigitalOcean cuando esto suceda.

A lo largo de este paso, creó un nuevo clúster y nodo en los cuales implementará una carga de trabajo en la siguiente sección.

Paso 4: Implementar una carga de trabajo de aplicación web

Una vez que el clúster y el nodo nuevos estén listos, puede implementar su primer pod en una carga de trabajo. Un pod de Kubernetes es la unidad de trabajo más pequeña disponible para Kubernetes y, por extensión, para Rancher. Las cargas de trabajo describen un grupo único de pods que implementa juntos. Por ejemplo, puede ejecutar varios pods de su servidor web en una única carga de trabajo para garantizar que si un pod se ralentiza con una solicitud concreta otras instancias puedan gestionar las solicitudes entrantes. En esta sección, implementará una imagen de Nginx Hello World en un único pod.

Posicione el cursor sobre Global en el encabezado y seleccione Default. Con esto, accederá al panel de control de proyecto Default. Se centrará en implementar un único proyecto en este tutorial, pero desde este panel de control también puede crear varios para conseguir entornos de alojamiento de contenedores aislados.

Para comenzar a configurar su primer pod, haga clic en Deploy.

Introduzca un nombre en Name y nginxdemos/hello en el campo Docker Image. A continuación, asigne el puerto 80 del contenedor al puerto 30000 *de los nodos host. Esto garantizará que los pods que implemente estén disponibles en cada nodo en el puerto 30000. Puede dejar el valor *TCP para Protocol y NodePort en el siguiente elemento desplegable.

Nota: Aunque este método para ejecutar el pod en cada puerto del nodo es más sencillo para comenzar, Rancher también incluye Ingress a fin de proporcionar equilibrio de carga y terminación SSL para el uso en producción.

Formulario de entrada para implementar una carga de trabajo

Para iniciar el pod, desplácese hasta la parte inferior y haga clic en Launch.

Rancher lo direccionará a la página de inicio del proyecto predeterminado, y en unos segundos su pod estará listo. Haga clic en el enlace 30000/tcp justo debajo del nombre de la carga de trabajo. Rancher abrirá una nueva pestaña con información sobre el entorno del contenedor en ejecución.

Dirección del servidor, nombre del servidor y otros resultados del contenedor de NGINX en ejecución

Los** valores de Server add**ess y de puerto que ve en esta página son los de la red interna de Docker. No pertenecen a la dirección IP pública que ve en su navegador. Esto significa que Rancher funciona y dirige el tráfico de http://first_node_ip:30000/ a la carga de trabajo, como se espera.

En este punto, habrá implementado correctamente su primera carga de trabajo de un pod en un nodo único de Rancher. A continuación, verá cómo escalar su entorno Rancher.

Paso 5: Escalar nodos y pods

Rancher le proporciona dos formas de escalar sus recursos de alojamiento: aumentar el número de pods de su carga de trabajo o aumentar el número de nodos de su clúster.

Añadir pods a su carga de trabajo le proporcionará a su aplicación más procesos en ejecución. Esto le permitirá gestionar más tráfico y habilitar implementaciones sin tiempo de inactividad, pero cada nodo solo puede gestionar un número finito de pods. Una vez que todos sus nodos hayan alcanzado su límite de pods, deberá aumentar el número de nodos si desea continuar con la expansión.

Otro aspecto que se debe tener en cuenta es que, si bien el aumento de pods es normalmente gratuito, tendrá que pagar por cada nodo que añada a su entorno. A lo largo de este paso, escalará ambos nodos y pods, y añadirá otro nodo a su clúster de Rancher.

Nota: En esta parte del tutorial, se proporcionará un nuevo droplet de DigitalOcean automáticamente a través de la API. Por lo tanto, tenga en cuenta que deberá afrontar costos adicionales mientras el segundo nodo esté en ejecución.

Diríjase a la página de inicio del clúster de su instalación de Rancher seleccionando Cluster: nombre-de-su-clúster en la barra de navegación superior. A continuación, haga clic en Nodes en la barra de navegación superior.

Utilice el elemento desplegable de la barra de navegación superior para seleccionar su clúster

En esta página se muestra que actualmente dispone de un nodo en ejecución en el clúster. Para añadir nodos, haga clic en Edit Cluster y desplácese hasta la sección Node Pools en la parte inferior de la página. Haga clic en Add Node Pool, introduzca un prefijo y seleccione la casilla Worker. Haga clic en Save para actualizar el clúster.

Agregar un grupo de nodos únicamente como trabajador

En un plazo de dos a cinco minutos, Rancher proporcionará un segundo droplet y marcará el nodo con la indicación Active en el panel de control del clúster. Este segundo nodo es solo un trabajador, lo cual significa que no ejecutará los contenedores de etcd o Control Plane de Rancher. Esto brinda al trabajador más capacidad para ejecutar cargas de trabajo.

Nota: Disponer de un número desigual de nodos de etcd garantizará que estos siempre puedan alcanzar un cuórum (o consenso). Si solo dispone de un nodo de etcd, correrá el riesgo de que no sea posible alcanzar su clúster si ese nodo se desactiva. En un entorno de producción, es mejor ejecutar tres o cinco nodos de etcd.

Cuando el segundo nodo esté listo, podrá ver la carga de trabajo que implementó en el paso anterior en este nodo visitando http://segundo_node_ip:30000/ en su navegador.

La expansión de nodos le proporciona más droplets para distribuir sus cargas de trabajo, pero es posible que también desee ejecutar más instancias de cada pod en una carga de trabajo. Para añadir más pods, vuelva a la página del proyecto con el valor default, pulse la flecha a la izquierda de su carga de trabajo hello-world y haga clic en + dos veces para añdir dos pods más.

Ejecutar tres pods de Hello World en una carga de trabajo

Rancher implementará de forma automática más pods y distribuirá los contenedores en ejecución a cada nodo, según dónde haya disponibilidad.

Ahora, podrá escalar sus nodos y pods para satisfacer los requisitos de su aplicación.

Conclusión

De esta manera, habrá configurado implementaciones multinodo usando Rancher 2.1 en Ubuntu 18.04 y habrá aplicado una expansión a dos nodos en ejecución y varios pods en una carga de trabajo. Puede usar esta estrategia para alojar y escalar cualquier tipo de contenedor de Docker que deba ejecutar en su aplicación, y usar el panel de control y las alertas de Rancher para maximizar el rendimiento de sus cargas de trabajo y nodos en cada clúster.

Creative Commons License