Vainilla hasta el final. Soluci贸n Vanilla Cloud en K8s

Estamos publicando una traducci贸n de un art铆culo sobre Vanilla Stack, una nueva tecnolog铆a de c贸digo abierto basada en la nube basada en Kubernetes.


Recientemente me encontr茅 con Vanilla Stack , que incluye muchos componentes de c贸digo abierto. En este art铆culo, echaremos un vistazo r谩pido al proceso de instalaci贸n y le mostraremos los diferentes casos de uso.







Vanilla Stack de un vistazo



Vanilla Stack se puede definir como un cl煤ster de Kubernetes con muchos componentes de c贸digo abierto.



Entre ellos:



  • Rook : administra el almacenamiento distribuido (sistema de archivos, bloque, objeto),
  • OpenStack : proporciona infraestructura como servicio (IaaS),
  • Cloud Foundry : proporciona plataforma como servicio (PaaS).


El siguiente diagrama de la documentaci贸n oficial ilustra la arquitectura de pila global.



Nota: Todas las soluciones que vienen con Vanilla Stack (Rook, Cloud Foundry, OpenStack y otras herramientas) funcionan como pods en el cl煤ster de Kubernetes subyacente.



Como podemos ver en el diagrama anterior, los usuarios pueden:



  • ejecutar aplicaciones en el cl煤ster b谩sico de Kubernetes mediante la creaci贸n de implementaciones, servicios, gr谩ficos de Helm, etc.
  • use Cloud Foundry para ejecutar su aplicaci贸n desde el c贸digo (con uno simple cf push



    );
  • utilice OpenStack para crear nuevas infraestructuras (m谩quinas virtuales, redes definidas por software, etc.).


Nota: Los requisitos de hardware dependen de los componentes que se instalar谩n en la pila.



El siguiente diagrama es m谩s detallado, contiene una lista de todos los componentes, organizados por categor铆a, que pueden venir con Vanilla Stack:







Creo que este diagrama es bastante preciso. Algunos componentes se instalan de forma predeterminada, otros se pueden seleccionar durante la instalaci贸n.



En este art铆culo, veremos los pasos principales del proceso de instalaci贸n. Para simplificar la tarea, instalaremos Vanilla Stack en seis m谩quinas virtuales preparadas por el proveedor de alojamiento: tres actuar谩n como nodos maestros de Kubernetes y el resto actuar谩 como trabajadores.



Nota:Los proveedores de la nube deben seleccionarse en funci贸n de los componentes que queramos instalar, ya que algunos de ellos pueden no cumplir con los requisitos de instalaci贸n. Por ejemplo, para instalar Rook, necesitamos un proveedor de infraestructura que proporcione almacenamiento en bloque.



Iniciamos la instalaci贸n



Hay dos formas de instalar Vanilla Stack, se describen en la secci贸n de descargas . Usaremos una instalaci贸n de Docker que se puede iniciar con el siguiente comando:



$ docker run \
  --name VanillaStack-installer -d \
  -p 8080:8080 \
  harbor.vanillastack.io/vanillastack/installer:latest

      
      





Se puede acceder a la interfaz web del instalador a trav茅s del puerto 8080. La instalaci贸n se puede completar en diez sencillos pasos, que analizaremos a continuaci贸n.



Requisitos









El primer paso, Inicio , define los requisitos de hardware y software para las m谩quinas en las que se instalar谩 la pila. En nuestro caso usaremos seis m谩quinas virtuales. Cada uno se ejecuta en Ubuntu 20.04 y tiene 4 GB de RAM / 2 CPU.



Como escribimos anteriormente, tres m谩quinas virtuales actuar谩n como los nodos principales de Kubernetes y el resto funcionar谩.



# IP addresses of the master nodes
master1 - 159.65.92.123
master2 - 178.62.32.212
master3 - 178.62.40.225

# IP addresses of the worker nodes
worker1 - 178.62.41.87
worker2 - 178.62.27.97
worker3 - 178.62.67.29

      
      





Adem谩s, necesitamos configurar un dominio (y un par de subdominios) para acceder al cl煤ster. Volveremos a este paso m谩s adelante cuando configure el balanceador de carga.



T茅rminos y condiciones



Aceptar los T茅rminos es nuestro segundo paso. Aseg煤rese de leer la informaci贸n de licencia especificada.







Configuraci贸n general



Luego viene el paso Configuraci贸n general . Es necesario indicar el tipo de instalaci贸n que m谩s nos conviene: el n煤mero de nodos maestro y trabajador y la carga inicial.











En nuestro caso, elegiremos una instalaci贸n HA con tres nodos maestros, los tres nodos restantes actuando como trabajadores. Rook se selecciona de forma predeterminada para la instalaci贸n del repositorio. No utilizamos OpenStack o Cloud Foundry aqu铆. Este podr铆a ser un tema para otro art铆culo.



Acceso a la m谩quina virtual mediante clave SSH



La secci贸n de clave p煤blica proporciona una clave p煤blica RSA, que debe copiarse en cada una de las m谩quinas virtuales. Este paso es necesario para permitir que la m谩quina de instalaci贸n (que est谩 ejecutando el instalador) ejecute los libros de jugadas de Ansible para configurar cada VM.



Nota: Ansible es un sistema de gesti贸n de la configuraci贸n. Solo ejecuta comandos en m谩quinas a trav茅s de una conexi贸n SSH. Ansible no requiere la instalaci贸n de un agente, a diferencia de los an谩logos como Chef y Puppet .







Las instrucciones para copiar la clave se indican en el instalador:



  • guarde la clave en un archivo llamado key.pub



    .
  • copie la clave en la computadora de destino usando ssh-copy-id



    :


ssh-copy-id -f -i key.pub <username>@<ip-address-of-node>
      
      





  • repita esto con todos los nodos.


Para Windows, siga las instrucciones de este art铆culo , comenzando con Copiar clave SSH en un dispositivo Linux remoto.



Definir informaci贸n de nodo



En la etapa de Nodos , necesitamos definir las direcciones IP y el usuario de cada uno de los nodos maestro y trabajador.









Tambi茅n necesitamos definir los nodos que lanzar谩n los Rook Pods. De acuerdo con los requisitos, usamos los tres nodos trabajadores.







Comprobando la configuraci贸n del nodo



En el paso Node-Check , verificamos si todos los nodos cumplen con los requisitos.







Antes de hacer clic en el bot贸n Validates Nodes, es importante desplazarse hasta la parte inferior y asegurarse de que estamos siguiendo las reglas de Rook: un dispositivo de bloque sin formato debe estar conectado a cada nodo.







Mediante el comando lsblk -f



podemos comprobar si todo est谩 configurado correctamente.







Al hacer clic en el bot贸n Validar nodos en el instalador, podemos asegurarnos de que todos los nodos est茅n configurados correctamente.







Configuraci贸n de cl煤ster



Lo primero que debe configurar en el paso Cluster-Settings es Pod CIDR y Service CIDR (es decir, los rangos de IP que se utilizan para proporcionar IP de pod y direcciones IP virtuales de servicio). En nuestro caso, usamos los valores predeterminados.







Adem谩s, necesitamos crear un equilibrador de carga para redirigir el tr谩fico al nodo maestro o de producci贸n.



Debido a la naturaleza del proveedor de nube que est谩 utilizando, no puede usar el mismo balanceador de carga para redirigir el tr谩fico a un conjunto diferente de nodos.



Por lo tanto, crearemos dos balanceadores de carga: frente a los nodos maestros

y frente a los trabajadores.



Balanceador de carga frente a los nodos maestros



Se requiere el primer equilibrador de carga para acceder al servidor API del cl煤ster. Deber铆a configurarse as铆:



  • redirigir el tr谩fico TCP desde el puerto 6443 al mismo puerto en los hosts maestros;
  • Verifique regularmente el funcionamiento de los nodos maestros enviando solicitudes TCP al puerto 6443.




En este caso, el equilibrador de carga obtiene la direcci贸n IP 159.65.211.35.



Balanceador de carga frente a los nodos trabajadores



El segundo equilibrador de carga es necesario para proporcionar acceso al controlador de entrada del cl煤ster (el componente que da acceso a las aplicaciones del cl煤ster). Su configuraci贸n:



  • redirigir el tr谩fico HTTP (puerto 80) al puerto 30080 de los nodos trabajadores;
  • redirigir el tr谩fico HTTPS (puerto 443) al puerto 30443 de los nodos de trabajo;
  • compruebe peri贸dicamente el estado de los nodos trabajadores que env铆an solicitudes TCP en el puerto 30080.




En este caso, el balanceador de carga obtiene la IP 46.101.64.165.



Configurar entradas de DNS



La direcci贸n IP del equilibrador de carga debe estar asociada con el nombre de dominio del cl煤ster. En nuestro art铆culo, usamos vanilla.techwhale.io



. Se requieren subdominios adicionales para acceder al servidor API y las aplicaciones expuestas a trav茅s del controlador de entrada.







En esta etapa, solo podemos proporcionar la direcci贸n IP de un balanceador de carga, pero en las pr贸ximas versiones del instalador habr谩 m谩s opciones.







Vamos a cifrar la configuraci贸n



Let's Encrypt es una autoridad de certificaci贸n gratuita ampliamente utilizada. Nos permite recibir y renovar certificados HTTPS autom谩ticamente. Kubernetes Let's Encrypt se usa a menudo a trav茅s de Cert Manager , el componente predeterminado en Vanilla Stack. Cert Manager puede obtener un certificado de Let's Encrypt (as铆 como de varias otras fuentes) y ponerlo a disposici贸n de la aplicaci贸n a trav茅s de Kubernetes Secret.







Configuraci贸n de torre



Los siguientes pasos le permiten seleccionar los componentes de Rook que se instalar谩n (en este caso, el panel de control y monitoreo de Rook), as铆 como el n煤mero de repeticiones de un dato (nivel de r茅plica).







Instalaci贸n de herramientas adicionales



En la secci贸n Herramientas adicionales , puede especificar qu茅 componentes se instalar谩n en el cl煤ster.









Las herramientas enumeradas aqu铆 son bastante comunes. Se dividen en diferentes categor铆as:



  • seguimiento (Prometheus, Jeager);
  • registro (fluentd, Elasticsearch, Grafana);
  • registro de contenedores y repositorio de cartas Helm (puerto);
  • controlador de ingreso (nginx).




Esta es una forma conveniente de instalar todos los componentes desde una ubicaci贸n. Tambi茅n se pueden instalar m谩s tarde si no se seleccionan en esta etapa.



Suscripci贸n



Si queremos suscribirnos al soporte comercial, en este paso podemos obtener toda la informaci贸n necesaria. Cloudical







proporciona soporte . Es compatible con Vanilla Stack y proporciona Vanilla Cloud , una nueva opci贸n de pila administrada.



Comprobando todos los pasos



Aqu铆 podemos ver y cambiar (si es necesario) los par谩metros de configuraci贸n.







Antes de continuar con el siguiente paso e instalar la pila completa, debemos asegurarnos de que est茅

/etc/apt/sources.list



configurada correctamente en cada nodo y dirigida a los repositorios oficiales.



Nota: Este paso es necesario, por ejemplo, si Ansible no est谩 disponible en los repositorios predeterminados.



La forma m谩s sencilla de solucionar este problema es reemplazar el contenido con las /etc/apt/sources.list



siguientes instrucciones:







Instalaci贸n



Ahora todo est谩 listo y podemos comenzar la instalaci贸n bajo una taza de t茅.







En los registros de instalaci贸n, veremos los playbooks de Ansible aplicados a cada VM para:



  • instale todos los paquetes necesarios;
  • configurar un cl煤ster de Kubernetes (tres nodos principales / tres trabajadores);
  • instale Rook y todas las herramientas seleccionadas anteriormente.




La instalaci贸n de toda la pila no deber铆a llevar mucho tiempo.







Nota: Al instalar la pila, me encontr茅 con un peque帽o problema debido a las peculiaridades del proveedor de nube utilizado: el equilibrador de carga redirige el tr谩fico a la direcci贸n IP interna (privada) del host en lugar de a la p煤blica. El controlador Ingress se asigna a la direcci贸n IP externa (p煤blica) de los nodos, por lo que los nodos trabajadores se marcan como incorrectos, lo cual es incorrecto.



Acceso al cl煤ster



El archivo kubeconfig



se puede recuperar de /etc/kubernetes/admin.conf file



.



# Get kubeconfig file
$ ssh root@master1 cat /etc/kubernetes/admin.conf > vanilla.cfg
# Configure local kubectl
$ export KUBECONFIG=$PWD/vanilla.cfg
      
      







Como de costumbre, comenzamos enumerando los nodos en nuestro cl煤ster:



$ kubectl get no
NAME      STATUS   ROLES    AGE   VERSION
master1   Ready    master   38m   v1.19.6
master2   Ready    master   37m   v1.19.6
master3   Ready    master   37m   v1.19.6
worker1   Ready    worker   37m   v1.19.6
worker2   Ready    worker   37m   v1.19.6
worker3   Ready    worker   37m   v1.19.6
      
      







Adem谩s, podemos comprobar todos los pods que se ejecutan en el cl煤ster, as铆 como los servicios que los proporcionan.









隆Parece que todo est谩 funcionando! El siguiente paso puede ser una ejecuci贸n de prueba, por ejemplo, una aplicaci贸n con estado, que:



  • usa almacenamiento en bloque proporcionado por un cl煤ster Ceph creado a trav茅s de Rook;
  • reenviado a trav茅s del controlador de ingreso nginx;
  • utiliza un certificado TLS de Let's Encrypt CA, generado autom谩ticamente por Cert Manager.




Salir



La configuraci贸n de Vanilla Stack fue r谩pida y el instalador de Docker es simple y directo. Se deben agregar par谩metros adicionales pronto para mayor comodidad.



Si no desea instalar Vanilla Stack, puede usar la misma pila directamente desde Vanilla Cloud . Esta nueva oferta en la nube se lanz贸 en diciembre de 2020 y la primera versi贸n beta ya est谩 disponible.



Recomiendo echar un vistazo m谩s de cerca a esta pila, ya que es una excelente manera de aprender m谩s sobre proyectos populares de c贸digo abierto.



All Articles