GNU/Linux >> Tutoriales Linux >  >> Linux

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

Una aplicación de varios niveles es una aplicación distribuida en 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 usando implementaciones en Kubernetes y tendremos servicios para enviarles solicitudes.

Requisitos previos

  1. Clúster de Kubernetes con al menos 1 nodo trabajador.
    Si desea aprender a crear un clúster de Kubernetes, haga 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.

¿Qué haremos?

  1. Implementar una aplicación de varios niveles

Implementar una aplicación multinivel

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 test-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

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

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, el 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

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 Puerto=31081. Cree uno nuevo 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

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 pods

kubectl obtener implementaciones

servicio de obtención de kubectl

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 de MongoDB, la implementación del servidor web Python Flask y el servicio del servidor web Python Flask.

kubectl create -f test-db-deployment.yaml

kubectl create -f test-db-service.yaml

kubectl create -f test-web-deployment.yaml

kubectl create -f prueba-servicio-web.yaml

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

Para verificar lo mismo, ejecute los siguientes comandos.

kubectl obtener pods

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.

Ahora, estamos listos para acceder a la aplicación en IP-of-any-Node:NodePort, es decir, IP-of-any-Node: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.

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.

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 .

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

Para comprobar si todos los objetos que creamos se han eliminado correctamente, 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.

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 muestra de 2 niveles que utiliza imágenes acoplables disponibles públicamente.


Linux
  1. Cómo configurar un clúster de Kubernetes con Rancher

  2. Implemente una aplicación Flask con Dokku

  3. Cómo implementar la aplicación Flask con Nginx y Gunicorn en Ubuntu 20.04

  4. Cómo eliminar carpetas con un nombre determinado

  5. ¿Cómo eliminar un archivo con un nombre extraño?

Cómo implementar Kubernetes de un solo nodo con Microk8s en Ubuntu 20.04

Cómo implementar pilas de Docker Compose en Kubernetes con Kompose

Cómo implementar CouchDB como un clúster con Docker

Cómo implementar aplicaciones completas rápidamente con las plantillas de aplicaciones de Portainer

Cómo implementar una aplicación PHP con Nginx y MySQL usando Docker y Docker Compose

¿Cómo implementar la aplicación Laravel con Nginx en Ubuntu?