This commit is contained in:
Santiago Lo Coco 2023-11-24 11:49:00 -03:00
parent af59f6d678
commit 80c3b30b0f
4 changed files with 28 additions and 24 deletions

View File

@ -26,6 +26,24 @@ El script `run.sh` automatiza el proceso de implementación para un entorno de `
- **-u:** Desinstalar el chart
- **-d:** Agrega datos básicos a la DB
## Ejemplos
### Cambio de versión de postgres
Si se quiere modificar la versión de la base de datos se puede hacer simplemente:
```bash
./run.sh -p 13.1
```
Esto actualizará todo lo que sea necesario para que se pueda hacer este cambio.
### Especificar número de réplicas para la API
```bash
./run.sh -r 6
```
## Funcionalidad del script
1. **Verificación del estado de minikube:**
@ -66,29 +84,8 @@ El script `run.sh` automatiza el proceso de implementación para un entorno de `
Para realizar la configuración y el envío a un backend de registros como `elasticsearch`, podés editar `fluentd.yaml` según tus necesidades.
7. **Implementación de helm:**
Verifica la existencia de un release de helm llamado "exam" y lo actualiza o instala según sea necesario.
8. **Configuración de Secrets (opcional):**
7. **Configuración de Secrets (opcional):**
Para no mantener los secretos en el SVC (si se utiliza uno), se pueden pasar a `helm` mediante un archivo `secrets.yaml` con la opción `-f`. Si existe `./helm/secrets.yaml` (en la carpeta `./helm`, es decir en la misma ubicación que `values.yaml`), se utilizarán estos valores; de lo contrario, se utilizarán los definidos en `values.yaml`. Estos valores sobrescribirán los existentes.
Cabe destacar que al crear `./helm/secrets.yaml`, el script `run.sh` lo detectará automáticamente y lo utilizará al ejecutar `helm`. Por lo tanto, no es necesario realizar acciones adicionales, ya que el script gestionará la detección y el paso de este archivo a `helm`.
### Uso
```bash
./build.sh -d <dominio> -b -v <versión>
```
### Opciones
- `-b`: Construye las imágenes de `docker`.
- `-v <version>`: Especifica la versión de `postgreSQL`.
### Ejemplo
```bash
./build.sh -d ejemplo.com -b -v 13.3
```

View File

@ -79,7 +79,11 @@ Note que si se hace un upgrade solo NO se regenerará el `exam-crt`. Esto es esp
## Stateful para postgres
Se eligió usar stateful debido ya que necesitamos que sea una aplicación "Stable, persistent storage" (ver (documentación)[https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#using-statefulsets]). Además, en un futuro, si quisieramos tener READ replicas se podría hacer muy fácilmente agregando containers y la lógica necesaria. Para ese caso se debe usar si o si un stateful set para mantener al master siempre identificado. Lo dejé como algo más bien future-proof.
Se eligió implementar un archivo `stateful.yaml` ya que necesitamos que postgres sea una aplicación con "Stable, persistent storage" (ver (documentación)[https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#using-statefulsets]). Además, en un futuro, si quisieramos tener READ replicas se podría hacer muy fácilmente agregando containers y la lógica necesaria. Para ese caso se debe usar si o si un stateful set para mantener al master siempre identificado. Lo dejé como algo más bien future-proof.
Notemos que de usar un deployment tendríamos muchos problemas con el `stop` de la aplicación ya que están compartiendo el mismo volumen de datos al mismo tiempo (pues hasta que no levante correctamente el nuevo pod el viejo seguirá activo y luego parará). Esto podría pasar que se corrompa la base de datos. Se arregla simplemente con un StatefulSet este problema.
Por otro lado, si estuvisemos usando un cluster el `RollingUpdate` nos salvaría de una imagen que no existe por ejemplo ya que empieza por los pods con cardinal más alto y si alguno falla no sigue actualizando.
## Tests de conexión

View File

@ -89,6 +89,9 @@ spec:
- mountPath: {{ .mountPath }}
name: {{ .storage }}
{{- end }}
{{- if .grace }}
terminationGracePeriodSeconds: 30
{{- end }}
{{- if .mountPath }}
volumes:
- name: {{ .storage }}

View File

@ -74,7 +74,7 @@ deployments:
repository: api
tag: prod
port: *apiPort
replicas: 3
replicas: 2
initContainer:
command: ['/bin/sh', '-c', 'until nc -z exam-db "${EXAM_DB_SERVICE_PORT-5432}"; do sleep 1; done;']
- client: