Kubernetes

Implementación de aplicaciones en clústeres de Kubernetes

Implementación de aplicaciones en clústeres de Kubernetes

En un artículo anterior, implementamos un clúster de Kubernetes con un nodo maestro y un nodo trabajador. Los clústeres de Kubernetes se tratan principalmente de dos cosas; Nodos y vainas. Los pods son las aplicaciones en contenedores que desea implementar en el clúster y los nodos son los servidores informáticos individuales responsables de administrar el clúster o ejecutar las aplicaciones. Para simplificar las cosas, comenzamos con una aplicación sin estado e introducimos varios conceptos como etiquetas y selectores que se utilizan para unir pods entre sí.

Hay otros conceptos importantes como conjuntos de réplicas, servicios e implementaciones, todos los cuales aprenderemos en este artículo.


Implementación de aplicaciones tradicionales

Si observa el enfoque tradicional para implementar una aplicación web, la escalabilidad es algo que debería considerar antes de comenzar. Si necesita una base de datos separada de su interfaz web, es mejor hacerlo ahora mismo que hacerlo más tarde. ¿Planea ejecutar más de una aplicación web?? Configure mejor un servidor proxy inverso de antemano.

Con Kubernetes, el enfoque ha cambiado. La implementación se puede realizar teniendo en cuenta las necesidades actuales y luego se puede escalar a medida que su negocio crezca. La contenedorización le permite segregar componentes esenciales de sus servicios web, incluso cuando se ejecutan en un solo nodo. Más adelante, cuando escale horizontalmente (lo que significa que agrega más servidores a su entorno), simplemente necesita activar más contenedores, y Kubernetes lo programará en los nodos adecuados para usted.  Proxy inverso? Los servicios de Kubernetes vendrían para resolver ese problema.


Vainas

Como primer paso, hagamos girar una vaina. Para hacer eso, necesitaríamos un archivo YAML que defina varios atributos del pod.

apiVersion: v1
tipo: Pod
metadatos:
nombre: nginx
Especificaciones:
contenedores:
- nombre: nginx
imagen: nginx: 1.7.9
puertos:
- contenedorPuerto: 80

Agregue el contenido de arriba en un vaina.yaml archivo y guárdelo. Mirando el texto de arriba, puede ver que el amable del recurso que estamos creando es un vaina. Lo nombramos nginx, y la imagen es nginx: 1.7.9 lo que, de forma predeterminada, significa que Kubernetes obtendrá la imagen nginx adecuada de las imágenes disponibles públicamente de Docker Hub.

En organizaciones a gran escala, K8 a menudo se configura para apuntar a un registro privado del que puede extraer las imágenes de contenedor adecuadas.

Ahora para iniciar la ejecución del pod:

$ kubectl create -f pod.yaml

No puede acceder al pod desde fuera del clúster. Todavía no está expuesto, y solo existe como una manada solitaria. Para asegurarse de que esté realmente implementado, ejecute:

$ kubectl obtener vainas

Para deshacerse de la vaina llamada nginx, ejecuta el comando:

$ kubectl eliminar pod nginx

Despliegues

Conseguir un solo pod en funcionamiento no es el objetivo de Kubernetes, lo que querríamos, idealmente, son múltiples réplicas de un pod, a menudo programadas en diferentes nodos, de modo que si uno o más nodos fallan, el resto de los pods todavía estará allí para tomar aumentar la carga de trabajo adicional.

Además, desde el punto de vista del desarrollo, necesitaríamos tener alguna forma de implementar pods con una versión más nueva del software y hacer que los pods más antiguos permanezcan inactivos. En caso de que haya un problema con el módulo más nuevo, podemos revertirlo recuperando los módulos más antiguos y eliminando la versión fallida. Las implementaciones nos permiten hacer eso.

La siguiente es una forma muy común de definir una implementación:

apiVersion: apps / v1beta1
tipo: Despliegue
metadatos:
nombre: nginx-deployment
Especificaciones:
réplicas: 2
plantilla:
metadatos:
etiquetas:
aplicación: nginx
Especificaciones:
contenedores:
- nombre: nginx
imagen: nginx: 1.7.9
puertos:
- contenedorPuerto: 80

Notará, entre otras cosas, un par clave-valor que es:

etiquetas:
aplicación:
nginx

Las etiquetas son importantes para la gestión de grupos, ya que ayudan a realizar un seguimiento de una gran cantidad de módulos, todos con la misma función. Los pods se crean por orden del nodo principal y se comunican con el nodo principal. Sin embargo, todavía necesitamos una forma efectiva para que se comuniquen entre sí y trabajen juntos como un equipo.


Servicios

Cada pod tiene su propia dirección IP interna y una capa de comunicación como Flannel ayuda a los pods a comunicarse entre sí. Sin embargo, esta dirección IP cambia bastante y, después de todo, el objetivo de tener muchas cápsulas es dejarlas desechables. Las vainas mueren y resucitan a menudo.

La pregunta que surge ahora es la siguiente: ¿cómo hablarán los pods de front-end con los pods de back-end cuando las cosas son tan dinámicas en el clúster??

Los servicios entran en escena para resolver esta complejidad. Un servicio es otro pod que actúa como un equilibrador de carga entre un subconjunto de pods y el resto del clúster de Kubernetes. Se une a todos los pods que tienen una etiqueta específica adjunta, por ejemplo, la base de datos, y luego los expone para el resto del clúster.

Por ejemplo, si tenemos un servicio de base de datos con 10 pods de base de datos, algunos de los pods de base de datos pueden aparecer o ser eliminados, pero el servicio garantizaría que el resto del clúster obtenga el 'servicio' que es una base de datos. Los servicios también se pueden utilizar para exponer el front-end al resto de Internet.

Aquí hay una definición típica de un servicio.

apiVersion: v1
tipo: Servicio
metadatos:
nombre: wordpress-mysql
etiquetas:
aplicación: wordpress
Especificaciones:
puertos:
- puerto: 3306
selector:
aplicación: wordpress
nivel: mysql
clusterIP: Ninguno

Los pods etiquetados como WordPress con el nivel mysql especificado son los que serán recogidos por este servicio y expuestos a los pods del servidor web para una configuración típica de WordPress realizada en Kubernetes.


Palabra de precaución

Al implementar una aplicación gigante de varios niveles dirigida a una gran base de consumidores, se vuelve muy tentador escribir muchos servicios (o microservicios, como se les conoce popularmente). Si bien esta es una solución elegante para la mayoría de los casos de uso, las cosas pueden salirse de control rápidamente.

Los servicios, como los pods, son propensos a fallar. La única diferencia es que cuando falla un servicio, muchos pods, que son perfectamente funcionales, se vuelven inútiles. En consecuencia, si tiene una gran interconexión de servicios (tanto internos como externos) y algo falla, averiguar el punto de falla sería imposible.

Como regla general, si tiene una visualización aproximada del grupo, o si puede usar un software como la cabina para ver el grupo y darle sentido, su configuración está bien. Kubernetes, al final del día, está diseñado para reducir la complejidad, no para mejorarla.

Tutorial de OpenTTD
OpenTTD es uno de los juegos de simulación empresarial más populares que existen. En este juego, necesitas crear un maravilloso negocio de transporte....
SuperTuxKart para Linux
SuperTuxKart es un gran título diseñado para ofrecerte la experiencia Mario Kart de forma gratuita en tu sistema Linux. Es bastante desafiante y diver...
Tutorial de Battle for Wesnoth
The Battle for Wesnoth es uno de los juegos de estrategia de código abierto más populares que puedes jugar en este momento. Este juego no solo ha esta...