La realizzazione e la gestione di un sistema a microservizi sono attività complesse per questo, nel corso degli anni, sono stati sviluppati degli strumenti il cui scopo è quello di agevolare le attività più importanti. Qui di seguito riporto l’elenco di quelli che conosco e uso più spesso:
- CI/CD pipelines di GitLab: Quando si programma non si può prescindere dall’uso di un repository in cui salvare le varie versioni del codice. Uno di questi è GitLab che offre anche molte altre funzionalità, tra le quali una delle più utili è la possibilità di configurare una sequenza di azioni (pipelines) da eseguire come conseguenza di vari eventi, per esempio il salvataggio del codice nel repository (git push). Queste pipeline possono rendere automatica l’integrazione del codice con librerie e altro codice (continuous integration), l’esecuzione di test e il deploy dell’applicazione su un sistema di test o di produzione (continuous delivery). Tra le alternative a GitLab ci sono Jenkins, GitHub actions.
- Docker: I microservizi possono essere considerati come delle piccole applicazioni (app) eseguite all’interno di contenitori minimali che contengono solo gli elementi essenziali del sistema operativo, le variabili d’ambiente, i driver, le runtime e le librerie da cui dipende l’app. Non è quindi necessario utilizzare un intero server o un’intera macchina virtuale. La tecnologia che permette di realizzare questi containers si chiama Docker. Si tratta quindi di un sistema di virtualizzazione che rende più veloce lo sviluppo e la messa in opera delle applicazioni. Alcune alternative a Docker sono: Podman, Cri-o e Containerd.
- Kubernetes: Dato che un sistema complesso però può essere costituito da decine di servizi, per gestire tutti questi container si può ricorrere a un “orchestratore” come Kubernetes. Si tratta di un sistema che permette di automatizzare la creazione, la configurazione e la gestione di insiemi di container e la definizione delle connessioni tra di essi.
- Rancher: Tutte le configurazioni di Kubernetes possono essere fatte a linea di comando (kubectl), ma esistono delle interfacce web che facilitano molte attività. Una di queste è Rancher che permette anche di gestire da interfaccia web i volumi, i persistent volume claims, i secrets, le config-maps, le applicazioni create tramite gli Helm chart e le integrazioni con Prometheus e altri software. Un’alternativa valida e molto usata è OpenShift.
- Piattaforme cloud: La gestione in autonomia di un sistema così complesso non è facile e non è economica, molto spesso si ricorre all’utilizzo di una piattaforma cloud che permetta di allocare o liberare le risorse dinamicamente in base alle esigenze. Dove lavoro io usiamo Azure, altre alternative sono Aws e Google cloud.
- Helm charts: Helm è un gestore di pacchetti per Kubernetes, serve per semplificare il processo di distribuzione e gestione delle applicazioni. Consente di definire, installare e aggiornare applicazioni complesse. Per fare questo utilizza dei file di testo in formato YAML organizzati secondo una struttura ben definita. In questi file si trova tutto ciò di cui è costituita l’app: i container, i volumi, le config-map, le regole di avvio/riavvio, ecc. Essendo i file parametrizzati, una volta definita una app con un Helm chart, è possibile replicarla facilmente lanciando lo stesso Helm chart con parametri diversi. In pratica un Helm chart può essere definito come un template per la realizzazione di applicazioni. Esiste anche un Helm hub, ossia un registro online di charts che consente agli sviluppatori di cercare e condividere chart con la comunità.
- Prometheus: Prometheus è un sistema open-source di monitoraggio e allerta progettato per raccogliere e visualizzare metriche da ambienti distribuiti. E’ molto usato in sistemi Kubernetes specialmente per raccogliere grandi quantità di dati e valori temporizzati, ossia a intervalli di tempo regolari. Per fare questo usa una strategia di tipo pull, cioè contatta attivamente il target per chiedere i dati che servono. I dati raccolti possono essere interrogati utilizzando il linguaggio PromQL e rappresentati graficamente con Grafana, un altro software open-source.
- Elastic search: Elasticsearch è un motore di ricerca open-source altamente distribuibile basato su Lucene, una libreria di ricerca e indicizzazione. E’ progettato per gestire grandi quantità di dati (soprattuto testuali e geospaziali) in modo rapido e scalabile, fornendo una piattaforma potente per la ricerca full-text, l’analisi dei dati e la visualizzazione. Utilizza il formato JSON per memorizzare i dati per i quali non richiede uno schema rigido.
- Ansible: Ansible è uno strumento open-source per automatizzare la configurazione e la gestione delle infrastrutture. È progettato per semplificare attività ripetitive e complesse, riducendo la necessità di interventi manuali nella gestione dei sistemi e delle reti. Gli script Ansible, in pratica permettono di configurare dei server o di fare il deploy di applicazioni massivamente senza dover ripetere delle operazioni in modo “manuale”. Una caratteristica interessante è quella che non c’è bisogno di installare alcun client sul server che deve ricevere la configurazione. L’unica dipendenza è Python. Personalmente non l’ho mai usato, ma siccome potrebbe essere utile penso che presto inizierò a studiarlo.
L’idea di questo post è quello di presentare alcuni degli strumenti con cui lavoro quotidianamente per poi parlare di ognuno di essi in modo più approdondito in post successivi. Sarà l’occasione per me di approfondire alcuni argomenti, chiarirmi un po’ le idee e consolidare i concetti più importanti. Perché quando si prova a spiegare un argomento a qualcun altro spesso si realizza di non avere le idee molto chiare.
Per i riferimenti a molti di questi strumenti ho utilizzato il canale Youtube di Nana che è un’ottima divulgatrice in ambiuto DevOps. I suoi video sono chiari e ben fatti e posso costituire una valida introduzione a questi argomenti.
Fonti e riferimenti:
- [1] 10 DevOps Tools you need to know su TechWorld with Nana.
- [2] Microservizi: architettura, componenti e interoperabilità su questo blog.
- [3] Docker Crash Course for Absolute Beginners su TechWorld with Nana.
- [4] Helm charts: sito ufficiale del progetto.
- [5] Cos’è Kubernetes?: sito ufficiale del progetto.
- [6] Docker get started: sito ufficiale del progetto.
- [7] Prometheus – Overview: sito ufficiale del progetto.
- [8] How Ansible works: sito ufficiale del progetto.