From 80c3b30b0fb7e16a7f91728b12de80925f2b5930 Mon Sep 17 00:00:00 2001 From: Santiago Lo Coco Date: Fri, 24 Nov 2023 11:49:00 -0300 Subject: [PATCH] Update --- README.md | 41 ++++++++++++++++------------------ helm/README.md | 6 ++++- helm/templates/deployment.yaml | 3 +++ helm/values.yaml | 2 +- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 5ee2099..24e0522 100644 --- a/README.md +++ b/README.md @@ -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 -b -v -``` - -### Opciones - -- `-b`: Construye las imágenes de `docker`. -- `-v `: Especifica la versión de `postgreSQL`. - -### Ejemplo - -```bash -./build.sh -d ejemplo.com -b -v 13.3 -``` \ No newline at end of file diff --git a/helm/README.md b/helm/README.md index 1460b44..b29ffcf 100644 --- a/helm/README.md +++ b/helm/README.md @@ -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 diff --git a/helm/templates/deployment.yaml b/helm/templates/deployment.yaml index 03bc103..e7bfab3 100644 --- a/helm/templates/deployment.yaml +++ b/helm/templates/deployment.yaml @@ -89,6 +89,9 @@ spec: - mountPath: {{ .mountPath }} name: {{ .storage }} {{- end }} + {{- if .grace }} + terminationGracePeriodSeconds: 30 + {{- end }} {{- if .mountPath }} volumes: - name: {{ .storage }} diff --git a/helm/values.yaml b/helm/values.yaml index 3ce85ef..62a79c7 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -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: