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
|
||||
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
|
||||
```
|
7
build.sh
7
build.sh
|
@ -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
|
||||
|
|
|
@ -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
|
||||
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
60
run.sh
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue