Cómo implementar una aplicación de varios niveles con Kubernetes

archivo test-db-deployment.yaml

Una aplicación de varios niveles es una aplicación distribuida entre más de una capa. Separa lógicamente las capas operativas. El número de capas varía según los requisitos comerciales y de la aplicación. En este artículo, veremos una aplicación dividida en 2 capas, backend y frontend. Usaremos MongoDB como backend para almacenar datos y Python Flask como servidor web frontend. Implementaremos estas dos aplicaciones utilizando implementaciones en Kubernetes y tendremos servicios para enviarles solicitudes.

rRequisitos previos

  1. Clúster de Kubernetes con al menos 1 nodo trabajador.
    Si quieres aprender a crear un Cluster de Kubernetes, haz clic aquí. Esta guía lo ayudará a crear un clúster de Kubernetes con 1 maestro y 2 nodos en instancias AWS Ubuntu 18.04 EC2.
  2. Comprensión básica de implementaciones y servicios.
    Consulte Implementaciones y servicios para obtener una comprensión básica.

¿Que haremos?

  1. Implementar una aplicación de varios niveles

Implementar una aplicación de varios niveles

Cree un nuevo archivo llamado «test-db-deployment.yaml» con el siguiente contenido. Esto definirá una implementación de MongoDB que actuará como una base de datos, una capa de back-end.

vim prueba-db-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-db
spec:
  selector:
    matchLabels:
      appdb: testdb
  replicas: 1
  template:
    metadata:
      labels:
        appdb: testdb
    spec:
      containers:
      - name: test-db
        image: mongo:3.3
        env:
        - name: MONGODB_DATABASE
          value: testdata
        ports:
        - containerPort: 27017

archivo test-db-deployment.yaml

Ahora, cree un servicio que atenderá las solicitudes a MongoDB desde nuestra aplicación frontend. Este servicio escuchará en el puerto 27017 y reenviará solicitudes a MongoDB en el mismo puerto.

vim prueba-db-servicio.yaml

apiVersion: v1
kind: Service
metadata:
  name: mongodb
  labels:
    app: testdb
spec:
  ports:
  - port: 27017
    protocol: TCP
  selector:
    appdb: testdb

archivo test-db-service.yaml

El siguiente paso es definir una aplicación frontend. Cree un nuevo archivo que contenga la siguiente definición de implementación.

Esto escuchará en el puerto 5000.

Las solicitudes a MongoDB se reenviarán a MONGODB_HOST, es decir, al servicio mongodb.

vim prueba-web-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: test
  replicas: 1
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test-app
        image: teamcloudyuga/rsvpapp
        env:
        - name: MONGODB_HOST
          value: mongodb
        ports:
        - containerPort: 5000
          name: web-port

archivo test-web-deployment.yaml

Para acceder a la interfaz, crearemos un servicio de tipo NodePort escuchando en el puerto 31081. Esto significa que se puede acceder al servidor web Python Flask en IP = IP-Of-Any-Node y Port = 31081. Cree una nueva con la siguiente definición de servicio.

vim prueba-servicio-web.yaml

apiVersion: v1
kind: Service
metadata:
  name: test
  labels:
    apps: test
spec:
  type: NodePort
  ports:
  - name: tcp-31081-5000
    nodePort: 31081
    port: 5000
    protocol: TCP
  selector:
    app: test

archivo test-web-service.yaml

Ahora, estamos listos para crear una aplicación de muestra de 2 niveles. Antes de continuar, verifiquemos si el clúster tiene algún objeto.

Ejecute los siguientes comandos para verificar los pods, las implementaciones y los servicios que se ejecutan en el clúster.

kubectl obtener vainas

kubectl obtener implementaciones

servicio de obtención de kubectl

comprobar los objetos existentes

En la captura de pantalla anterior, se puede ver que solo hay 1 servicio predeterminado de kubernetes en el clúster.

Ahora, ejecute el siguiente comando uno por uno desde el directorio donde ha creado 4 archivos para crear la implementación de MongoDB, el servicio MongoDB, la implementación del servidor web Python Flask y el servicio del servidor web Python Flask.

kubectl create -f test-db-deployment.yamlPublicidad

kubectl create -f prueba-db-servicio.yaml

kubectl create -f test-web-deployment.yaml

kubectl create -f prueba-servicio-web.yaml

crear implementaciones y servicios

En la captura de pantalla anterior, puede ver que la implementación de MongoDB, el servicio MongoDB, la implementación del servidor web Python Flask y el servicio del servidor web Python Flask se crearon correctamente.

Para verificar lo mismo, ejecute los siguientes comandos.

kubectl obtener vainas

kubectl obtener implementaciones

servicio de obtención de kubectl

En la siguiente captura de pantalla, puede ver que se han creado 2 pods y 2 servicios. Los pods que se crearon están controlados por la implementación que creamos.

comprobar los objetos recién creados

Ahora, estamos listos para acceder a la aplicación en IP-de-cualquier-nodo:NodePort es decir IP-de-cualquier-Nodo:31081.

Una vez que presione la URL en el navegador, verá la aplicación de la siguiente manera. Esta es una aplicación de muestra que utiliza la imagen acoplable disponible públicamente y pertenece a CloudYuga. Aquí puede ver que el conteo de RSVP es 0, esto significa que MongoDB no tiene ningún dato.

acceder a la aplicación en NodeIP:NodePort

Ahora, podemos agregar algunas entradas de demostración.

Al agregar algunas entradas, podemos ver que el conteo ha cambiado. Esto significa que los datos se han almacenado en MongoDB.

añadir datos en la aplicación

Ahora, cuando ya no necesite estas aplicaciones, puede eliminar todos los objetos ejecutando el siguiente comando desde el directorio donde tiene todos sus archivos de objetos de Kubernetes.

kubectl eliminar -f .

elimine las implementaciones y los servicios todos juntos

El comando anterior eliminará la implementación de MongoDB, el servicio MongoDB, la implementación del servidor web Python Flask y el servicio del servidor web Python Flask que creamos.

Para verificar si todos los objetos que creamos se han eliminado con éxito, ejecute el siguiente comando.

kubectl obtener todo

En la siguiente captura de pantalla, puede ver que solo hay un servicio de kubernetes predeterminado y los objetos que habíamos creado ya no existen.

verificar si todos los objetos que creamos han sido eliminados

Conclusión

En este artículo, creamos una implementación de la base de datos y el servicio de back-end de MongoDB para acceder a la base de datos y, para la interfaz, creamos la implementación y el servicio de la aplicación basada en Python Flask para acceder a esta interfaz. También vimos que los datos se almacenaban en la base de datos del servidor. Esta es una aplicación de dos niveles de muestra que utiliza imágenes acoplables disponibles públicamente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *