martes, 15 de octubre de 2024

Service Mesh Istio


Imagina que tienes una aplicación la cual está construida por muchos microservicios, ¿Cómo la vas a monitorear/supervisar/optimizar el rendimiento y la comunicación de la aplicación entre todos estos microservicios?

Aquí es dónde te ayudan tener un service mesh:

- Administrar conexiones entre servicios
- Supervisión de tráfico
- Registro de tráfico
- Rastreo de tráfico
- Control de tráfico
- Escalabilidad y alta disponibilidad

En resumen un **service mesh** es una software dedicado a manejar la comunicación entre servicios.

Aquí te dejo el video para que lo sigas conmigo:




lunes, 7 de octubre de 2024

MetalLB tu Load Balancer Bare-Metal


Me han preguntando lo siguiente: ¿Es posible tener un Load Balancer local?

Respuesta: Sí, con MetalLB. FIN...

Como es habitual en este blog comenzamos explicando que es un Load Balancer.

## ¿Que es un Load Balancer?

Un Load Balancer sirve para exponer tu aplicación hacia la red externa, provee un punto de entrada para tu aplicación, y como su nombre lo dice balanceará las peticiones/carga entre los pods de la aplicación.

Acá puedes ver el video de lo que vamos hacer en el post:


Gráfica de un Load Balancer:


**Nota:** Los proveedores de nube te cobran por el tiempo y/o uso (transferencia en GB) de los Load Balancer, así que te recomiendo leer cómo es el costo dependiendo del tipo de Load Balancer que uses en tu proveedor de la nube.


viernes, 4 de octubre de 2024

Un regalo para ti: DevOps, Aplicación para hacer tu prueba técnica


Hola querido lector, he escrito una aplicación en FastAPI, cuya finalidad es que realices las tareas que dice en el documento README.md, así podrás practicar para tus pruebas técnicas de DevOps. 

Puedes clonar el repositorio que se encuentra [aquí](https://github.com/ahioros/Bookstore-demo)

Te muestro algunas de las tareas de la prueba técnica:

En el área de los comentarios me puedes poner la URL con el informe si quieres que lo revise y te de feedback.

lunes, 16 de septiembre de 2024

Kubernetes Horizontal Pod Autoscaling


Hoy vamos a hablar sobre Horizontal Pod Autoscaling (HPA para los amigos).

## ¿Qué es HPA?

Es una funcionalidad que ajusta automáticamente el número de pods en un deployment, replicaset o statefulset de "forma automática", según el uso de métricas personalizadas.

Con lo que nos lleva a nuestra siguiente pregunta:

## ¿Qué es una métrica personalizada?

Se basan en cualquier métrica que un objeto de Kubernetes informe en un cluster, como la cantidad de solicitudes de un cliente por segundo, la escritura de E/S por segundo, el uso de CPU o memoria, entre otros.

## ¿Por qué es importante HPA?

Porque es una manera de ahorrar ~~recursos~~ dinero, billete, cash, marmaja, etc. haciendo que la cantidad de pods crezca cuando se cumpla una política de uso en las métricas y disminuya la cantidad de pods cuando esté bajo del umbral.
Imagina que tu aplicación creará pods cuando sea necesario y los eliminará cuando no sean necesarios.

viernes, 30 de agosto de 2024

Helm creando tu repositorio

Antes de enseñarte a cómo hacer tu propio repositorio, primero te voy a enseñar cómo administrar los repositorios.

Buscar en el repositorio de Helm:

```bash
helm search hub grafana
```

Buscar en los repositorios ya instalados:

```bash
helm searh repo grafana
```

Para ver los Values de un paquete:

```bash
helm show values grafana
```

Supongamos que hiciste tu propio archivo de values y lo quieres aplicar en lugar del que trae por el paquete:

```bash
helm install -f miarchivo.yaml aplicación paquete
```

## Crear repositorio con GitHub

    1. Creas un nuevo repositorio público en GitHub.
    2. Ahora que estas en el repositorio nuevo que creaste, vas a settings -> Pages (en la barra de la izquierda).
    3. En Branch seleccionas la branch que quieres usar, en este ejemplo usaré main y por último seleccionas el directorio que por default es /(root).
    4. Por  último le das click en Save. Con esto has creado un repositorio.

La URL para acceder a tu repositorio es:

https://tuuser.github.io/tu-repositorio/

Por ejemplo:
https://ahioros.github.io/nginx-charts/

lunes, 26 de agosto de 2024

Helm Charts: Empaquetando tu aplicación


Seguimos con nuestro primer Helm Chart. Ya en el [anterior post](https://www.ahioros.info/2024/08/helm-el-manejador-de-paquetes-de.html) te enseñe como instalar helm y tus primeros pasos.

## Creación de un Chart

En este paso, crearemos un Chart para nuestra aplicación. Hacemos esto a traves de la herramienta [Helm](https://helm.sh/).


```bash
helm create nginx-chart
```


Esto nos genera la siguiente estructura de directorios y archivos:

lunes, 19 de agosto de 2024

Helm el manejador de paquetes de Kubernetes

## ¿Qué es Helm?

Helm es el administrador de paquetes de Kubernetes. En pocas palabras es un nivel más alto sobre kubernetes para manejar las aplicaciones, esto nos permite poder desplegar aplicaciones y solo cambiar ciertas variables de configuración en tus archivos de Helm. Piensa que Helm es el equivalente a apt, yum, Homebrew o pip para kubernetes.

jueves, 15 de agosto de 2024

Deploy Github Actions y Argo CD


Ya tengo un post explicando [cómo instalar Argo CD](https://www.ahioros.info/2024/06/como-instalar-argo-cd.html). Si no sabes cómo hacerlo ve a leerlo y regresas.

En este post vamos a configurar Argo CD para que utilice el repositorio Github.

El video está acá para que vayas haciéndolo conmigo:

## Configurando Argo CD

Necesitamos un pre-requisito:

- Crear un Personal Access Token (PAT) para conectar el proyecto con Argo CD, por motivos de practicicidad lo he llamado argocd. Si no sabes cómo hacerlo puedes leer los prerequisitos en este [post](https://www.ahioros.info/2024/08/github-actions-y-dockerfile-multi-stage.html).

Ahora entramos a Argo CD con nuestras credenciales.

## Creando el Proyecto

Vamos a Settings -> Projects y damos click en el botón que dice: "+ NEW PROJECT", llenamos los campos con la información que nos pide.

**Nota**: Para este caso que es un ejemplo no voy a explicar a detalle el apartado de seguridad todavía, haremos algo básico e "inseguro".

SOURCE REPOSITORIES: *
DESTINATIONS -  Server: *, Name: *, Namespace: *
CLUSTER RESOURCE ALLOW LIST - Kind: *, Group: *