Despliegue con Kubernetes¶
Introducción¶
Kubernetes (K8s) es una plataforma de orquestación de contenedores que permite automatizar el despliegue, escalado y gestión de aplicaciones en contenedores.
Estructura del Proyecto¶
Para desplegar una aplicación Spring Boot en Kubernetes, necesitamos crear una carpeta k8s/ en la raíz del proyecto con los siguientes archivos:
Componentes Básicos¶
1. Deployment¶
El Deployment es el componente que gestiona los pods de tu aplicación. Define:
- La imagen Docker a utilizar
- El número de réplicas
- Los puertos que expone el contenedor
- Recursos (CPU, memoria)
2. Service¶
El Service expone tu aplicación dentro del clúster de Kubernetes. Permite la comunicación entre pods y actúa como un balanceador de carga interno.
3. Ingress¶
El Ingress gestiona el acceso externo a tu aplicación mediante HTTP/HTTPS. Define las reglas de enrutamiento basadas en nombres de dominio y rutas.
Archivos de Configuración¶
deployment.yaml¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: <nombredelapp>
namespace: <nombredelnamespace>
spec:
replicas: 2
selector:
matchLabels:
app: <nombredelapp>
template:
metadata:
labels:
app: <nombredelapp>
spec:
imagePullSecrets:
- name: ghcr-secret
containers:
- name: <nombredelapp>
image: ghcr.io/<dueniorepo>/<nombredelrepo>:latest
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: <nombredelapp>
namespace: <nombredelnamespace>
spec:
selector:
app: <nombredelapp>
ports:
- protocol: TCP
port: 8080
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: <nombredelapp>
namespace: <nombredelnamespace>
spec:
ingressClassName: public
rules:
- host: <grupo>.inphotech.co
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: <nombredelapp>
port:
number: 8080
Notas Importantes¶
- Imagen Docker: Asegúrate de que tu aplicación Spring Boot esté correctamente empaquetada en una imagen Docker
- Puerto: Por defecto Spring Boot usa el puerto 8080
- Ingress Controller: Necesitas tener un Ingress Controller instalado en tu clúster (como NGINX Ingress Controller)
- DNS: El dominio configurado en el Ingress debe apuntar a tu clúster de Kubernetes
2. Crear el Secret en Kubernetes¶
Antes del primer despliegue, crea el secret para descargar imágenes de GitHub:
kubectl create secret docker-registry ghcr-secret \
--docker-server=ghcr.io \
--docker-username=TU_USUARIO_GITHUB \
--docker-password=TU_TOKEN_GITHUB \
--docker-email=TU_EMAIL
¿Qué hace cada paso?¶
- Checkout código: Descarga el código del repositorio
- Configurar Java: Instala Java 17
- Compilar con Maven: Genera el archivo JAR
- Login a GitHub Container Registry: Se autentica con GITHUB_TOKEN automático
- Construir y subir imagen: Crea la imagen y la sube a ghcr.io
- Configurar kubectl: Instala kubectl en el runner
- Configurar acceso a Kubernetes: Configura las credenciales del clúster
- Desplegar a Kubernetes: Aplica los archivos YAML y reinicia el deployment
Verificar el Despliegue¶
Entrar a: https://javeriana.inphotech.co/k8smonitor Buscar el namespace y el estado del pod y del service
Ver el Progreso
Puedes ver el progreso del workflow en la pestaña Actions de tu repositorio en GitHub.