Un'applicazione dimostrativa Spring Boot che illustra l'integrazione con Kubernetes ConfigMaps, mostrando come gestire configurazioni esterne in un ambiente containerizzato.
- Caratteristiche
- Architettura
- Prerequisiti
- Installazione Locale
- Deployment su Kubernetes
- Test dell'Applicazione
- Configurazione
- Monitoring
- Sviluppo
- Contribuire
- Licenza
- Spring Boot 3.4.11 con Java 17
- Integrazione Kubernetes ConfigMaps - Gestione configurazioni esterne
- Health Checks tramite Spring Boot Actuator
- Container Security - Esecuzione con utente non-privilegiato
- Multi-stage Docker Build - Immagini ottimizzate per produzione
- Jib Integration - Build containerless per CI/CD
- Production-Ready - Configurazioni ottimizzate per ambienti di produzione
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β ConfigMap ββββββΆβ Spring Boot App ββββββΆβ REST API β
β (k8s.yaml) β β (testk8s) β β /hello β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ
β Actuator β
β /actuator/* β
ββββββββββββββββββββ
L'applicazione dimostra:
- Caricamento configurazioni da file
application.propertiesinterno - Override dinamico tramite Kubernetes ConfigMap montato come volume
- Esposizione di endpoint REST per verificare le configurazioni caricate
- Health checks per monitoring della salute dell'applicazione
- Java 17 o superiore
- Maven 3.6+ o utilizzare il Maven wrapper incluso
- Docker (per containerizzazione)
- Kubernetes cluster (v1.20+)
- kubectl configurato per accedere al cluster
- Docker registry per le immagini (opzionale per test locali)
git clone https://github.com/alfdagos/K8S_Test.git
cd K8S_Test# Usando Maven wrapper (raccomandato)
./mvnw clean package
# O usando Maven installato localmente
mvn clean package# Esecuzione diretta con Maven
./mvnw spring-boot:run
# O esecuzione del JAR compilato
java -jar target/testk8s-1.0.0.jarL'applicazione sarΓ disponibile su http://localhost:8080
docker build -t k8s-demo/testk8s:1.0.0 ../mvnw jib:dockerBuilddocker build -f Dockerfile.optimized -t k8s-demo/testk8s:optimized .kubectl apply -f namespace.yamlkubectl apply -f deployment_testk8s.yamlQuesto comando creerΓ :
- ConfigMap
config-testk8scon configurazioni personalizzate - Deployment con 1 replica dell'applicazione
- Service NodePort per esporre l'applicazione
# Verificare che i pod siano in running
kubectl get pods -l app=testk8s
# Verificare i servizi
kubectl get svc testk8s
# Verificare i log
kubectl logs -l app=testk8s# Ottenere l'URL del servizio
kubectl get nodes -o wide
# L'applicazione sarΓ disponibile su http://NODE_IP:30000# Ottenere l'IP esterno del nodo
kubectl get nodes -o wide
# Accedere tramite http://EXTERNAL_IP:30000-
Applicazione principale:
GET /curl http://localhost:8080/ # Risposta: "Hello Anna" (valore dal ConfigMap) -
Health Check:
GET /actuator/healthcurl http://localhost:8080/actuator/health # Risposta: {"status":"UP"} -
Info applicazione:
GET /actuator/infocurl http://localhost:8080/actuator/info
-
Modificare il ConfigMap:
kubectl edit configmap config-testk8s # Cambiare k8s.configmap.name da "Anna" a un altro valore -
Riavviare il pod per ricaricare la configurazione:
kubectl rollout restart deployment testk8s
-
Verificare la nuova configurazione:
curl http://NODE_IP:30000/
k8s.application.name=App
management.endpoints.web.exposure.include=health,info,prometheus
management.endpoint.health.show-details=when-authorizedk8s.configmap.name=Anna # Questo valore sovrascrive quello locale| Variabile | Descrizione | Default |
|---|---|---|
SERVER_PORT |
Porta server | 8080 |
LOGGING_LEVEL_ROOT |
Livello di logging | INFO |
MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE |
Endpoint Actuator esposti | health,info |
L'applicazione include Spring Boot Actuator per il monitoring:
- Health Checks:
/actuator/health - Metrics:
/actuator/metrics - Info:
/actuator/info - Prometheus:
/actuator/prometheus(se abilitato)
Aggiungere al application.properties:
management.endpoints.web.exposure.include=health,info,prometheus
management.metrics.export.prometheus.enabled=truesrc/
βββ main/
β βββ java/it/alf/testk8s/
β β βββ Testk8sApplication.java # Main Spring Boot class
β β βββ ConfigMapInfo.java # Configuration properties
β β βββ controller/
β β βββ HelloWorldController.java # REST controller
β βββ resources/
β βββ application.properties # Configurazioni base
β βββ configmap.properties # Configurazioni ConfigMap
βββ test/
βββ java/it/alf/testk8s/
βββ Testk8sApplicationTests.java # Test di base
# Esecuzione in modalitΓ sviluppo con hot-reload
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
# Esecuzione dei test
./mvnw test
# Build senza test
./mvnw clean package -DskipTests
# Analisi delle dipendenze
./mvnw dependency:tree
# Aggiornamento delle dipendenze
./mvnw versions:display-dependency-updatesdefault: Configurazione per ambiente localedev: Configurazione per sviluppo con debug abilitatoprod: Configurazione per produzione
# Verificare i log del pod
kubectl logs -l app=testk8s
# Verificare la descrizione del pod
kubectl describe pod -l app=testk8s# Verificare che il ConfigMap esista
kubectl get configmap config-testk8s -o yaml
# Verificare il mount nel pod
kubectl exec -it <pod-name> -- ls -la /root/# Verificare che il service sia attivo
kubectl get svc testk8s
# Verificare gli endpoint
kubectl get endpoints testk8s- Aggiungere test di integrazione con Testcontainers
- Implementare configurazione multi-ambiente
- Aggiungere metriche personalizzate
- Integrazione con Istio service mesh
- Helm chart per deployment semplificato
Le contribuzioni sono benvenute! Per contribuire:
- Fork del repository
- Creare un branch per la feature (
git checkout -b feature/AmazingFeature) - Commit delle modifiche (
git commit -m 'Add some AmazingFeature') - Push del branch (
git push origin feature/AmazingFeature) - Aprire una Pull Request
Questo progetto Γ¨ distribuito sotto licenza MIT. Vedere il file LICENSE per i dettagli.
Alf - alfdagos
- Spring Boot per il framework
- Kubernetes per l'orchestrazione
- La community open source per l'ispirazione
β Se questo progetto ti Γ¨ stato utile, lascia una stella! β