Spring Cloud Kubernetes e ConfigMap

Ogni applicazione può avere la necessità di una configurazione, esternalizzata solitamente in dei file di properties che possono poi essere letti a runtime e magari cambiare in base all’ambiente in cui ci troviamo. Questa necessità è ovviamente presente anche in ambiente cloud native come può essere quello di Kubernetes. In questo articolo vedremo quindi come poter sfruttare al meglio le potenzialità di Kubernetes per configurare le nostre applicazioni.

Kubernetes Configmap

All’interno di Kubernetes abbiamo la possibilità di utilizzare un ConfigMap, un componente nativo dove gestire le configurazioni. Quest’ultimo permette di separare le informazioni di configurazione dal nostro Pod (e quindi dalla nostra applicazione). Nella definizione del Pod possiamo “iniettare” queste informazioni in diverse modalità, come ad esempio quella d’inserire i dati del ConfigMap nella variabili d’ambiente. Di seguito vediamo come creare uno di questi componenti a partire da un file di properties

Ora invece vediamo come referenziare queste proprietà all’interno di un nostro Pod

Una volta avviato il Pod possiamo vedere dal log che sarà presente tra le variabili d’ambiente anche MYCONFIGMAP_INFORMATION che contiene tutto il file di properties.

Fabric8

Possiamo accedere al ConfigMap da riga di comando con kubectl o anche attraverso delle librerie che conoscono le API di Kubernetes. In Java è possibile attraverso la client library messo a disposizione da Fabric8, che come potete vedere dal seguente esempio è estremamente semplice nell’utilizzo.

Attraverso questa libreria possiamo leggere ma volendo anche aggiungere altre informazioni al ConfigMap

Spring Cloud Kubernetes

Spring Cloud Kubernetes è un implementazione dell’interfaccia di Spring Cloud, che permette di gestire i servizi di Kubernetes seguendo l’astrazione definita con Spring Cloud. Questa implementazione usa la libreria client Fabric8 già citata per portare nel “mondo” Spring tutte le feature di Kubernetes. Per i dettagli di tutto quello che è possibile fare vi rimando alla documentazione ufficiale.

Nel nostro caso utilizzeremo solo la parte relativa ai ConfigMap, quindi andremo a definire un progetto Spring Boot e ad aggiungere le dipendenze necessarie per includere ciò che ci interessa. Di seguito viene riportato il pom.xml del nostro progetto d’esempio

Essendo un’applicazione Spring Cloud dovremo poi andare a definire un file bootstrap.yml dove in questo caso specifichiamo le informazioni necessarie a Spring Cloud Kubernetes per reperire il nostro ConfigMap

Questa configurazione, che abbiamo definito essere ricaricabile (spring.cloud.kubernetes.reload.enabled=true), andrà a leggere un ConfigMap di nome myk8config dal namespace default. Le informazioni presenti saranno quindi iniettate come properties nel contesto di Spring, per questo motivo abbiamo definito un oggetto che mappa un @ConfigurationProperties

Con un endpoint REST andremo poi a definire una chiamata GET che ritorna qualche informazione di debug sui properties che abbiamo definito

Abbiamo definito un oggetto di tipo Config come Autowired mentre invece una proprietà singola l’abbiamo mappata su una stringa tramite l’annotation @Value. Avviando il progetto Spring Boot potremo quindi vedere che all’url http://localhost:8080 avremo stampate le properties del ConfigMap e che se proviamo a modificare il contenuto attraverso kubectl, le modifiche verranno propagate anche agli oggetti presenti nella nostra applicazione. Di seguito il link al progetto d’esempio presente su Github. Buon divertimento con Spring Cloud Kubernetes 🙂

Example using Kubernetes Configmap with Spring Cloud Kubernetes
https://github.com/fpaparoni/spring-cloud-configmap
0 forks.
0 stars.
0 open issues.
Recent commits: