Creditos a Cloud Champ por la idea y la imagen de Tetris en Java.
Vamos a ejecutar el deploy de una App Tetris en un cluster de Azure Kubernetes Services (AKS).
Prerrequisitos:
- Implementar un Cluster básico de AKS con Terraform.
- Como conectarse a el CLI de Azure Kubernetes Services (AKS).
- Implementar ArgoCD en AKS.
(Estaré haciendo un post de cada uno de estos prerrequisitos en breve :))
Asociar repositorio Git
Repositorio a utilizar
En este caso estaremos utilizando el repositorio https://github.com/mdiloreto/N4si-tetris-game.
Aquí encontraremos el manifiesto para el deploy de nuestra App en AKS:
# tetris-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tetris-deployment
spec:
replicas: 1 # You can adjust the number of replicas as needed
selector:
matchLabels:
app: tetris
template:
metadata:
labels:
app: tetris
spec:
containers:
- name: tetris
image: nasi101/tetris # Replace with the actual image tag
ports:
- containerPort: 80 # Replace with the port your Tetris game listens on
apiVersion: v1
kind: Service
metadata:
name: tetris-service
spec:
selector:
app: tetris
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
Add Repository en ArgoCD
Debemos conectarnos a ArgoCD a través de el endpoint publico de nuestro servicio de argocd-server
Ingresamos a través del browser: https://20.124.172.62/
Ahora, dentro de Argo ingresaremos a Settings>Repositories.
Click sobre “+ Connect Repo”
Configuramos las opciones:
- Método: vía HTTPS.
- Tipo: Git.
- Project: en esté caso será “Default”.
- Repositorio: https://github.com/mdiloreto/N4si-tetris-game/
- El resto de las opciones vacías.
- Para finalizar, click en “Connect“
Si ejecutamos los pasos correctamente, nuestro repo tendrá el status “Successful“:
Implementar Aplicación
Ahora, con nuestro repositorio conectado, realizaremos la implementación de nuestra app.
En primer lugar navegaremos la sección “Applications” en nuestra consola de ArgoCD. Luego haremos click en “+New App“.
En este caso, estaremos configurando las opciones generales básicas:
- Nombre: “tetris” (sin mayusculas).
- Project Name: “Default”.
- Sync policy: Automatic.
En Source, configuraremos el repositorio configurado en el paso anterior. En el path debemos especificar la folder en la que se encuentran nuestros manifiestos de K8s, en este caso será “manifests”:
En las opciones de Destino, estaremos configurando nuestra Default Cluster URL: https://kubernetes.default.svc
Luego de configurar los parametros especificados daremos click en “Create“. Esto iniciará el deploy de nuestra aplicación. En la sección “Applications” podremos ver el status:
Luego de un momento la App será creada en nuestro AKS.
Si hacemos click sobre esta App, podremos ver la estructura en detalle:
Aplicación implementada
Luego del deploy exitoso podremos ver:
- Que se creó un pod:
- Tambien podemos ver la creación de un deployment:
- Y la creación de un servicio:
Al ingresar por un navegador a la External-IP de “tetris-service” encontraremos nuestra aplicación funcionado:
Beneficios de ArgoCD
ArgoCD es una herramienta popular de entrega continua (Continuous Delivery) para Kubernetes que ha ganado tracción en la comunidad debido a una variedad de características y beneficios.
Uno de sus principales beneficos es la simplificación de GitOps
ArgoCD utiliza un enfoque GitOps, donde el estado deseado de una aplicación se describe en el repositorio Git. Esto permite la sincronización y la gestión de la historia y cambios a través de este medio. Esta sync puede ser manual o automatica.
Sincronización de estado automatica
En este caso probaremos la sincronización automatica realizando 2 cambios en el manifiesto de K8s:
- Cambiaremos la version de la imagen de Docker.
- Cambiaremos la cantidad de replicas (pods) para este deployment.
Editar Manifest
Ingresamos al repositorio de GitHub y editamos el archivo tetris-deploy.yaml
Editamos la imagen:
Y editamos el numero de replicas:
Cambio automatico
Como comentamos anteriomente, las caracteristicas de syncronización automatica permite que ArgoCD detecte el cambio en nuestro repo y realice la modificación del status en nuestra aplicación:
Podemos comprobar que se esta ejecutando una nueva version de la App (tener en cuenta el cache del navegador para test):
En nuestro Cluster de AKS, podemos detectar 2 nuevos pods para esta app:
Leave a Reply