Proyecto correspondiente al Laboratorio 3 — aplicación en Spring Boot (Java) preparada para ejecución local con Maven, contenedorización con Docker, despliegue en Kubernetes (Minikube), monitoreo con Prometheus + Grafana y despliegue continuo con ArgoCD.
Repositorio:
https://github.com/RUTENCO/lab3v
- Requisitos
- Configuración de la base de datos local
- Ejecución local con Maven
- Construcción y ejecución con Docker
- Despliegue en Minikube (Kubernetes)
- Uso de ArgoCD
- Monitoreo: Prometheus y Grafana
- Pruebas de sobrecarga
- Comandos útiles
- Buenas prácticas
- Flujo general del proyecto
- Autor
- Java 17+
- Maven o Maven Wrapper (
mvnw) - PostgreSQL en local
- Docker
- Minikube
- kubectl
- Helm (opcional)
- ArgoCD
- Prometheus
- Grafana
Debe existir una base de datos PostgreSQL previamente configurada.
Parámetros ejemplo:
- Base de datos:
lab3v_db - Usuario:
postgres - Contraseña:
postgres - Puerto:
5432
Ejemplo en application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/lab3v_db
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.hibernate.ddl-auto=update./mvnw clean packagejava -jar target/lab3v-0.0.1-SNAPSHOT.jarhttp://localhost:8080docker build -t lab3v:latest .docker run --rm -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:postgresql://host.docker.internal:5432/lab3v_db" \
-e SPRING_DATASOURCE_USERNAME="postgres" \
-e SPRING_DATASOURCE_PASSWORD="postgres" \
lab3v:latestminikube startminikube image load lab3v:latestkubectl apply -f postgres-configmap.yml
kubectl apply -f postgres-deployment.ymlkubectl apply -f lab3v-deployment.ymlkubectl get pods
kubectl get svcminikube service lab3vkubectl apply -f lab3v-argocd-application.yml -n argocdkubectl -n argocd port-forward svc/argocd-server 8080:443helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace
helm install grafana grafana/grafana --namespace monitoringminikube service grafana -n monitoringhey -z 1m -c 200 http://localhost:8080/api/testCrear archivo loadtest.js:
import http from "k6/http";
import { sleep } from "k6";
export default function () {
http.get("http://localhost:8080/api/test");
sleep(1);
}Ejecutar:
k6 run --vus 100 --duration 2m loadtest.js# Ver todos los pods
kubectl get pods -A
# Ver todos los servicios
kubectl get svc -A
# Ver logs de un pod
kubectl logs -f <pod-name>
# Describir un pod
kubectl describe pod <pod-name>
# Métricas de nodos
kubectl top nodes
# Métricas de pods
kubectl top pods
# Port forward
kubectl port-forward deployment/lab3v 8080:8080- Desarrollo en Spring Boot
- Ejecución local con Maven
- Dockerización
- Despliegue en Minikube
- Automatización con ArgoCD
- Monitoreo con Prometheus
- Visualización con Grafana
- Pruebas de sobrecarga
RUTENCO
Repositorio: github.com/RUTENCO/lab3v