Update scripts and update README
This commit is contained in:
parent
eb488a3852
commit
b05b91a172
96
README.md
96
README.md
|
@ -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
|
- [Minikube](https://minikube.sigs.k8s.io/docs/start/)
|
||||||
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:
|
- [Docker](https://docs.docker.com/get-docker/)
|
||||||
|
- [Helm](https://helm.sh/docs/intro/install/)
|
||||||
|
|
||||||
```yaml
|
## Uso
|
||||||
services:
|
|
||||||
- api:
|
```bash
|
||||||
name: "api"
|
./run.sh -i # Modo interactivo
|
||||||
tier: "backend"
|
./run.sh -p <version> -s <Y|N> -r <number> # Modo no interactivo
|
||||||
port: 5000
|
|
||||||
type: "NodePort"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
----------
|
## 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
|
## Funcionalidad del script
|
||||||
ingress:
|
|
||||||
ssl: true
|
1. **Verificación del estado de Minikube:**
|
||||||
annotations:
|
|
||||||
nginx.ingress.kubernetes.io/ssl-redirect: "true"
|
El script verifica si Minikube ya está en ejecución y lo inicia si no lo está.
|
||||||
hosts:
|
|
||||||
- host: kube.slc.ar
|
2. **Versión de Postgres y construcción:**
|
||||||
paths:
|
|
||||||
- path: /
|
Solicita al usuario la versión de Postgres, construye imágenes `Docker` y actualiza la versión en el archivo de valores de `Helm`.
|
||||||
name: "client"
|
|
||||||
port: 8080
|
3. **Configuración de TLS:**
|
||||||
pathType: "Prefix"
|
|
||||||
- host: api.kube.slc.ar
|
Pregunta al usuario si desea habilitar `TLS` y actualiza el archivo de valores de `Helm` en consecuencia.
|
||||||
- path: /
|
|
||||||
name: "api"
|
4. **Configuración de réplicas para la API:**
|
||||||
port: 5000
|
|
||||||
pathType: "Prefix"
|
Solicita al usuario el número de réplicas para la API y actualiza el archivo de valores de `Helm`.
|
||||||
tls:
|
|
||||||
- secretName: exam-crt
|
5. **Configuración de Ingress:**
|
||||||
hosts:
|
|
||||||
- kube.slc.ar
|
Habilita el complemento Ingress si Minikube está en ejecución.
|
||||||
- api.kube.slc.ar
|
|
||||||
|
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
|
||||||
|
```
|
7
build.sh
7
build.sh
|
@ -1,21 +1,22 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
usage() {
|
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
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
domain=
|
build=N
|
||||||
|
|
||||||
while getopts ":hd:bv:" arg; do
|
while getopts ":hd:bv:" arg; do
|
||||||
case $arg in
|
case $arg in
|
||||||
d) domain=${OPTARG} ;;
|
|
||||||
b) build=Y ;;
|
b) build=Y ;;
|
||||||
v) version=${OPTARG} ;;
|
v) version=${OPTARG} ;;
|
||||||
h | *) usage ;;
|
h | *) usage ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
[ "$build" = 'N' ] && exit 0
|
||||||
|
|
||||||
export API=data/sample-api-users
|
export API=data/sample-api-users
|
||||||
docker build $API -f $API/Dockerfile.prod -t api:prod
|
docker build $API -f $API/Dockerfile.prod -t api:prod
|
||||||
export CLIENT=data/sample-client-users
|
export CLIENT=data/sample-client-users
|
||||||
|
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
|
@ -98,4 +98,4 @@ deployments:
|
||||||
mountPath: /var/lib/postgresql/data
|
mountPath: /var/lib/postgresql/data
|
||||||
storage: pv-storage
|
storage: pv-storage
|
||||||
probe:
|
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
60
run.sh
|
@ -1,20 +1,70 @@
|
||||||
#!/usr/bin/env bash
|
#!/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
|
minikube status | grep -q "Running" && START_MINIKUBE=false || START_MINIKUBE=true
|
||||||
|
|
||||||
$START_MINIKUBE && minikube start
|
$START_MINIKUBE && minikube start
|
||||||
$START_MINIKUBE && eval $(minikube docker-env)
|
$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
|
if [ -n "$postgres_version" ]; then
|
||||||
read -p "Enter the Postgres version: " version
|
./build.sh -b -v "${postgres_version}"
|
||||||
./build.sh -b -v "${version}"
|
|
||||||
sed -ni "/repository: db/ {
|
sed -ni "/repository: db/ {
|
||||||
p;
|
p;
|
||||||
n;
|
n;
|
||||||
/tag:.*/ {
|
/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;
|
p;
|
||||||
d;
|
d;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue