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
- 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. - Comprensión básica de implementaciones y servicios.
Consulte Implementaciones y servicios para obtener una comprensión básica.
¿Qué haremos?
- 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.