Update scripts and update README

This commit is contained in:
Santiago Lo Coco 2023-11-18 00:36:14 -03:00
parent eb488a3852
commit b05b91a172
5 changed files with 174 additions and 45 deletions

View File

@ -1,46 +1,70 @@
Todas las variables que se repiten y que, en un principio, no tendría sentido cambiarlas para este chart se marcaron con default.
# Uso de `run.sh`
Por ejemplo, busque los default de service.yaml. Verá que `type` es por defecto "ClusterIP" y que `targetPort` es por defecto `$port`.
El script `run.sh` automatiza el proceso de implementación para un entorno de `k8s` utilizando `minikube`. Incluye la construcción de imágenes `Docker`, la personalización de versiones de `Postgres`, la habilitación de `TLS` y la configuración de réplicas para la API.
Esto tiene dos beneficios:
## Requisitos
1) Elimina redundancia en values.yaml
2) Da libertad para que en un futuro se pueda simplemente modificarlo en `values.yaml`. Por ejemplo, supongamos que queremos cambiar el `type` a "NodePort" en el servicio de `api`, basta con hacer el siguiente cambio:
- [Minikube](https://minikube.sigs.k8s.io/docs/start/)
- [Docker](https://docs.docker.com/get-docker/)
- [Helm](https://helm.sh/docs/intro/install/)
```yaml
services:
- api:
name: "api"
tier: "backend"
port: 5000
type: "NodePort"
## Uso
```bash
./run.sh -i # Modo interactivo
./run.sh -p <version> -s <Y|N> -r <number> # Modo no interactivo
```
----------
## Opciones de línea de comandos
En `ingress` se repite el `host` debido a facilita que la api pueda estar en otro dominio, si así se desea:
- **-i:** Modo interactivo
- **-p <version>:** Especificar la versión de Postgres
- **-s <Y|N>:** Habilitar o deshabilitar SSL (Y para sí, N para no)
- **-r <number>:** Especificar el número de réplicas para la API
```yaml
ingress:
ssl: true
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
hosts:
- host: kube.slc.ar
paths:
- path: /
name: "client"
port: 8080
pathType: "Prefix"
- host: api.kube.slc.ar
- path: /
name: "api"
port: 5000
pathType: "Prefix"
tls:
- secretName: exam-crt
hosts:
- kube.slc.ar
- api.kube.slc.ar
## Funcionalidad del script
1. **Verificación del estado de Minikube:**
El script verifica si Minikube ya está en ejecución y lo inicia si no lo está.
2. **Versión de Postgres y construcción:**
Solicita al usuario la versión de Postgres, construye imágenes `Docker` y actualiza la versión en el archivo de valores de `Helm`.
3. **Configuración de TLS:**
Pregunta al usuario si desea habilitar `TLS` y actualiza el archivo de valores de `Helm` en consecuencia.
4. **Configuración de réplicas para la API:**
Solicita al usuario el número de réplicas para la API y actualiza el archivo de valores de `Helm`.
5. **Configuración de Ingress:**
Habilita el complemento Ingress si Minikube está en ejecución.
6. **Implementación de Helm:**
Verifica la existencia de un release de `Helm` llamado "exam" y lo actualiza o instala según sea necesario.
## build.sh
El script `build.sh` es el encargado de construir imágenes de `Docker`. Ofrece diversas opciones para personalizar el proceso de construcción. Aunque es posible ejecutarlo de forma independiente, se recomienda utilizar el script `run.sh`, ya que actúa como `wrapper`. De todos modos se adjunta la documentación pertinente:
### 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

@ -1,21 +1,22 @@
#!/usr/bin/env bash
usage() {
printf "$0 usage: \n -x: down\n -d \$DOMAIN: domain\n -t: tests\n -i integration\n" $0
printf "$0 usage: \n -b: build all\n -v Postgres version\n" $0
exit 0
}
domain=
build=N
while getopts ":hd:bv:" arg; do
case $arg in
d) domain=${OPTARG} ;;
b) build=Y ;;
v) version=${OPTARG} ;;
h | *) usage ;;
esac
done
[ "$build" = 'N' ] && exit 0
export API=data/sample-api-users
docker build $API -f $API/Dockerfile.prod -t api:prod
export CLIENT=data/sample-client-users

54
helm/README.md Normal file
View File

@ -0,0 +1,54 @@
------------------------------------------------------------------------------------------
Todas las variables que se repiten y que, en un principio, no tendría sentido cambiarlas para este chart se marcaron con default.
Por ejemplo, busque los default de service.yaml. Verá que `type` es por defecto "ClusterIP" y que `targetPort` es por defecto `$port`.
Esto tiene dos beneficios:
1) Elimina redundancia en values.yaml
2) Da libertad para que en un futuro se pueda simplemente modificarlo en `values.yaml`. Por ejemplo, supongamos que queremos cambiar el `type` a "NodePort" en el servicio de `api`, basta con hacer el siguiente cambio:
```yaml
services:
- api:
name: "api"
tier: "backend"
port: 5000
type: "NodePort"
```
----------
En `ingress` se repite el `host` debido a facilita que la api pueda estar en otro dominio, si así se desea:
```yaml
ingress:
ssl: true
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
hosts:
- host: kube.slc.ar
paths:
- path: /
name: "client"
port: 8080
pathType: "Prefix"
- host: api.kube.slc.ar
- path: /
name: "api"
port: 5000
pathType: "Prefix"
tls:
- secretName: exam-crt
hosts:
- kube.slc.ar
- api.kube.slc.ar
```

View File

@ -98,4 +98,4 @@ deployments:
mountPath: /var/lib/postgresql/data
storage: pv-storage
probe:
command: ['/bin/sh', '-c', 'exec pg_isready -U "$(POSTGRES_USER)" -h localhost -p 5432;']
command: ['/bin/sh', '-c', 'exec pg_isready -U "$(POSTGRES_USER)" -h 127.0.0.1 -p 5432;']

60
run.sh
View File

@ -1,20 +1,70 @@
#!/usr/bin/env bash
usage() {
printf "$0 usage: \n -i: interactive\n -p <version>: Postgres version\n -s <Y|N>: enable SSL\n -r <number>: API replicas\n" $0
exit 0
}
interactive=false
postgres_version=
enable_ssl=
api_replicas=
while getopts "ihp:s:r:" arg; do
case $arg in
i) interactive=true ;;
p) postgres_version=${OPTARG} ;;
s) enable_ssl=${OPTARG} ;;
r) api_replicas=${OPTARG} ;;
*) usage ;;
esac
done
if [ "$#" -gt 1 ] && [ "$1" = "-i" ]; then
interactive=false
fi
minikube status | grep -q "Running" && START_MINIKUBE=false || START_MINIKUBE=true
$START_MINIKUBE && minikube start
$START_MINIKUBE && eval $(minikube docker-env)
read -p "Do you want to run Postgres with a specific version? [y/N]: " answer
if [ "$interactive" == true ]; then
read -p "Enter the Postgres version (press Enter for default 13.3): " postgres_version
read -p "Do you want to enable SSL? [y/N]: " enable_ssl
read -p "Enter the number of replicas for the API: " api_replicas
fi
if [ "$answer" == "y" ] || [ "$answer" == "Y" ]; then
read -p "Enter the Postgres version: " version
./build.sh -b -v "${version}"
if [ -n "$postgres_version" ]; then
./build.sh -b -v "${postgres_version}"
sed -ni "/repository: db/ {
p;
n;
/tag:.*/ {
s/tag:.*/tag: ${version}/;
s/tag:.*/tag: ${postgres_version}/;
p;
d;
}
}
p;" helm/values.yaml
else
./build.sh -b
fi
if [ -n "$enable_ssl" ]; then
if [ "$enable_ssl" == "y" ] || [ "$enable_ssl" == "Y" ]; then
sed -i "s/ssl: .*/ssl: true/" helm/values.yaml
else
sed -i "s/ssl: .*/ssl: false/" helm/values.yaml
fi
fi
if [ -n "$api_replicas" ]; then
sed -ni "/port: \*apiPort/ {
p;
n;
/replicas:.*/ {
s/replicas:.*/replicas: ${api_replicas}/;
p;
d;
}