|
| 1 | +# Monolito |
| 2 | + |
| 3 | +## Enunciado |
| 4 | + |
| 5 | +Construir los distintos recursos de Kubernetes para generar un clúster, como el de la siguiente imagen: |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | +### Para ello seguir los siguientes pasos: |
| 10 | + |
| 11 | +### Paso 1. Crear una capa de persistencia de datos |
| 12 | + |
| 13 | +Crear un `StatefulSet` para tener una base de datos dentro del cluster, para ello generar los siguientes recursos: |
| 14 | + |
| 15 | +* Crear un `ConfigMap` con la configuración necesaria de base de datos |
| 16 | +* Crear un `StorageClass` para el aprovisionamineto dinámico de los recursos de persistencia |
| 17 | +* Crear un `PersistentVolume` que referencie el `StorageClass` anterior |
| 18 | +* Crear un `PersistentVolumeClaim` que referencie el `StorageClass` anterior |
| 19 | +* Crear un `Cluster IP service`, de esta manera los pods del `Deployment` anterior serán capaces de llegar al `StatefulSet` |
| 20 | +* Crear el `StatefulSet` alimentando las variables de entorno y el volumen haciendo referencia al `PersistentVolumeClaim` creado anteriormente. |
| 21 | + |
| 22 | +Una vez tengamos nuestro `StatefulSet` corriendo la manera más directa de generar la base de datos sería: |
| 23 | + |
| 24 | +* Ejecutamos `kubectl get pods`, y obtenemos el nombre del pod relacionado con el `StatefulSet`. |
| 25 | +* Ejecutamos `kubectl exec [postgres-pod-name] -it bash` |
| 26 | +* Ejecutamos `psql -U postgres`, pegamos `todo-app/todos_db.sql` y pulsamos `enter`, la base de datos debería estar generada |
| 27 | + |
| 28 | +### Paso 2. Crear todo-app |
| 29 | + |
| 30 | +Crear un `Deployment` para `todo-app`, usar el `Dockerfile` de este direetorio **todo-app**, para generar la imagen necesaria. |
| 31 | + |
| 32 | +Al ejecutar un contenedor a partir de la imagen anaterior, el puerto por defecto es el 3000, pero se lo podemos alimentar a partir de variables de entorono, las variables de entorno serían las siguientes |
| 33 | + |
| 34 | +* **NODE_ENV** : El entorno en que se está ejecutando el contenedor, nos vale cualquier valor que no sea `test` |
| 35 | +* **PORT** : El puerto por el que va a escuchar el contenedor |
| 36 | +* **DB_HOST** : El host donde se encuentra la base de datos |
| 37 | +* **DB_USER**: El usuario que accede a la base de datos, podemos usar el de por defecto `postgres` |
| 38 | +* **DB_PASSWORD**: El password para acceeder a la base de datos, podemos usar el de por defecto `postgres` |
| 39 | +* **DB_PORT** : El puerto en el que postgres escucha `5432` |
| 40 | +* **DB_NAME** : El nombre de la base de datos, en `todo-app/todos_db.sql`, el script de inicialización recibe el nombre de `todos_db` |
| 41 | +* **DB_VERSION** : La versión de postgres a usar, en este caso `10.4` |
| 42 | + |
| 43 | +Crear un `ConfigMap` con todas las variables de entorno, que necesitarán los pods de este `Deployment`. |
| 44 | + |
| 45 | +> NOTA: Las obligatorias son las de la base de datos, todas aquellas que comienzan por `DB` |
| 46 | +
|
| 47 | +### Paso 3. Acceder a todo-app desde fuera del clúster |
| 48 | + |
| 49 | +Crear un `LoadBalancer service` para acceder al `Deployment` anteriormente creado desde fuera del clúster. Para poder utilizar un `LoadBalancer` con minikube seguir las instrucciones de este [artículo](https://minikube.sigs.k8s.io/docs/handbook/accessing/) |
| 50 | + |
0 commit comments