Skip to main content

Nell’ambito dei progetti Cloud Native, la gestione efficiente dell’infrastruttura applicativa è una sfida in piena regola. GitOps è un framework operativo moderno che introduce in quest’ambito i concetti di automazione, di tracciabilità e collaboration, trasformando pratiche manuali e destrutturate in processi efficienti e scalabili. Ma andiamo per gradi.

IaC e il percorso verso l’automazione dell’infrastruttura

L’automazione è un concetto chiave delle metodologie moderne di sviluppo, di deployment e di gestione del codice applicativo. Lo stesso approccio DevOps, che rappresenta il cuore metodologico dello sviluppo del software moderno, si fonda su elementi costitutivi come le pipeline Continuous Integration e Continuous Delivery (CI/CD), che per loro stessa natura sono basate sull’automazione. In loro assenza, i team IT non potrebbero aggiornare gli applicativi decine di volte al giorno, cosa che ormai accade in diversi progetti.

Se però restringiamo il campo alla gestione dell’infrastruttura applicativa, che va dalle Virtual Machine ai cluster Kubernetes, c’è sempre stata una forte componente manuale relativa al design, alla modifica e al deployment dei vari ambienti, con tutta la complessità del caso. Un passo avanti significativo verso la cosiddetta Infrastructure Automation è stato l’introduzione del concetto di Infrastructure as Code (IaC), reso noto da tool come Ansible e Terraform. Con IaC, l’infrastruttura non viene più creata, gestita e configurata manualmente, ma è definita sotto forma di codice; ciò significa che lo stato desiderato dei componenti dell’infrastruttura applicativa viene descritto all’interno di file di configurazione (solitamente YAML o JSON) e affidato ad appositi tool che provvedono ad applicare queste definizioni agli ambienti operativi.

L’Infrastructure as Code (IaC) rappresenta un passo avanti significativo verso l’Infrastructure Automation. Definire l’infrastruttura desiderata in file di codice ha infatti aperto le porte a molteplici benefici, tra cui il miglioramento dell’efficienza operativa e la riduzione degli errori manuali.

Ma anche IaC ha dei limiti

Nonostante IaC sia il pilastro della gestione infrastrutturale nell’era Cloud Native, ha un limite molto importante, ovvero non definisce un processo formale, efficiente e automatizzato per la gestione, l’integrazione e il deployment del codice.

Nel ciclo di vita di un progetto software, infatti, è necessario modificare spesso l’infrastruttura a causa di nuovi requisiti, di aggiornamenti tecnologici o di altre esigenze. In molti casi, la gestione di queste modifiche al codice dell’infrastruttura avviene in modo informale e manuale, con il rischio di introdurre errori e incoerenze dovute a molteplici cause, tra cui l’assenza di collaborazione con gli altri Ops e, soprattutto, l’assenza di un processo strutturato e formale per la revisione e il testing del codice IaC.

Ed è qui che entra in gioco GitOps.

GitOps, il framework moderno per la gestione dell’infrastruttura applicativa

Tra tutte le definizioni esistenti di GitOps, troviamo particolarmente calzante quella di GitLab, secondo cui si tratta di un “framework operativo che attinge alle best practice DevOps utilizzate per lo sviluppo delle applicazioni, come il version control, la collaborazione e il CI/CD, e le applica all’automazione dell’infrastruttura”. Semplice, chiara, efficace.

In senso lato, dunque, GitOps è l’applicazione dei principi, dei flussi di lavoro e dei tool DevOps alla gestione del codice infrastrutturale (IaC). Il tutto, con al centro il tool di version control per antonomasia, Git, che di conseguenza assume il ruolo di single source of truth anche per i team che gestiscono l’infrastruttura applicativa (Ops) e non solo per quelli che sviluppano il codice sorgente dell’applicazione.

In termini pratici, al codice IaC viene dedicato un repository Git, così da abilitare capacità collaborative e di version control. A differenza della gestione destrutturata, laddove il deployment è manuale e mancano procedure collaborative, di testing, revisione e approvazione, qui il codice viene integrato in una pipeline DevOps completa, comprensiva di workflow e procedure, nonché di automazioni CI/CD. Ogni modifica al codice non è soltanto tracciata e passibile di rollback, ma è soggetta alle stesse dinamiche (pull/merge request) utilizzate, appunto, per il codice sorgente dell’applicazione e che sono fondamentali per massimizzare la qualità del codice, per stimolare la collaborazione, evitare errori ed efficientare i processi di sviluppo e di gestione delle applicazioni.

Come detto, poi, fanno parte del processo le pipeline di Continuous Integration (CI) e Continuous Delivery (CD), rigorosamente intrise di automazione: se le prime hanno l’obiettivo di validare il codice attraverso test automatizzati, garantendo che ogni modifica non introduca errori e mantenga standard di qualità elevati, le seconde si occupano di distribuire automaticamente il codice validato negli ambienti operativi, attraverso logiche push o pull a seconda dei casi e delle esigenze.

BUSINESS CASE

Infrastruttura applicativa per una Banca con Kubernetes e GitSecOps

GitOps nell’universo Cloud Native: 5 benefici chiave

GitOps rappresenta, dunque, un framework con cui raggiungere l’ideale dell’Infrastructure Automation nel mondo Cloud Native, fondendo le caratteristiche distintive di IaC, la metodologia DevOps e le funzionalità di Git. Implementare GitOps non è banale, un po’ per questioni culturali e di definizione dei processi, un po’ perché non esiste un solo tool o piattaforma con cui porre in essere l’intera pipeline, ma è necessaria la sinergia di diversi strumenti.

Tra i benefici che i team IT – e le aziende, in senso lato – possono ottenere adottando questa metodologia, segnaliamo:

Accelerazione del time to market delle applicazioni

Grazie alla collaboration e all’automazione, GitOps permette di rilasciare nuove funzionalità e aggiornamenti con maggiore frequenza e rapidità, riducendo il tempo necessario per portare qualsiasi modifica in produzione.

Auditing semplificato

Ogni modifica all’infrastruttura è tracciata. Si ha dunque capacità di accesso alla cronologia delle modifiche, semplificando il processo di auditing e garantendo trasparenza e responsabilità.

Riduzione del rischio

Il codice è sempre soggetto a revisione e test prima del deployment. Inoltre, la possibilità di eseguire un rollback a uno stato precedente, tipico del version control, riduce il rischio di errori e downtime.

Riduzione dei costi

L’automazione dei processi riduce in modo considerevole la necessità di interventi manuali successivi, diminuendo i costi operativi e liberando risorse umane per attività a maggior valore aggiunto.

Estensione alla sicurezza con GitSecOps

Come si è visto, GitOps non è una tecnologia ma un framework, un paradigma che può essere esteso a tutte le pratiche di sviluppo e di gestione del software moderno. Data l’importanza della sicurezza nel panorama attuale, un concetto che si sta diffondendo con vigore è GitSecOps, che integra le pratiche di sicurezza (controlli, analisi del codice, vulnerability scanning…) nel ciclo di vita dello sviluppo e del deployment del software, rendendole sinergiche con le altre anime dell’ecosistema applicativo.

Continuous Integration e Continuous Development:
accelera il time-to-market grazie a rilasci rapidi e sicuri degli applicativi

Paolo Ajassa

Autore Paolo Ajassa

Cloud Architect con un'esperienza sistemistica e di Service Management di circa 10 anni, dopo aver ricoperto per un anno il ruolo di BU Manager è approdato nel team di Intesys che si occupa dei servizi gestiti, con focus sul mondo Elasticsearch e DevOps.

Altri post di Paolo Ajassa
CONTATTACI