Negli ultimi anni, con l’ondata di adozione di strumenti e pratiche DevOps si è iniziato a parlare di GitOps. Il termine è il risultato della fusione dei termini Git e Operations.
Vediamo in dettaglio di cosa si tratta, quali benefici possono derivare dalla sua adozione e quali sono le sfide che si possono affrontare durante la sua adozione.
Cos’è GitOps
GitOps è, in maniera simile a DevOps, un set di pratiche e strumenti utilizzati per le applicazioni che vengono applicati anche a livello di infrastruttura. Ne fanno parte il controllo di versione, i flussi di Continuous Integration e Delivery, i controlli automatici di sicurezza e compliance.
Tramite GitOps è possibile automatizzare completamente la creazione di infrastrutture, specialmente se si parla di infrastrutture in cloud. L’utilizzo delle pratiche GitOps permette di ridurre al minimo gli errori umani, dato che gli interventi manuali vengono ridotti al minimo.
Come applicare GitOps
Per poter applicare GitOps, è necessario utilizzare almeno le seguenti pratiche DevOps:
- Infrastructure as Code: L’infrastruttura deve essere definita come codice per rendere tracciabili e replicabili le modifiche.
- Gestione dei workflow Git: Avendo un workflow Git ben definito, è possibile agevolare la collaborazione tramite le Pull Request (chiamate anche Merge Request) che permettono di effettuare review del codice prima ancora che questo venga utilizzato per generare nuove risorse infrastrutturali
- CI/CD: è fondamentale che siano utilizzati flussi di CI/CD per garantire la piena automazione dei rilasci infrastrutturali nonché l’esecuzione continua di test e controlli di sicurezza.
Benefici di GitOps
Tra i benefici riscontrati da aziende che hanno utilizzato GitOps vi sono:
- maggiore efficienza e velocità nella creazione delle infrastrutture
- riduzione dei costi
- miglioramento della sicurezza
Inoltre, se si utilizzano sistemi per la creazione e orchestrazione di container (come Docker e Kubernetes) per il rilascio degli applicativi, si raggiunge un livello di consistenza e replicabilità totale dell’infrastruttura.
GitOps consente anche un monitoraggio continuo delle applicazioni e delle infrastrutture. Qualsiasi cambiamento imprevisto o errore può essere rilevato e corretto rapidamente, grazie al sistema di controllo delle versioni messo in atto da Git. In caso di necessità, è possibile eseguire il rollback a una versione precedente semplicemente ripristinando lo stato del repository Git.
Per quanto riguarda la sicurezza, che è una priorità fondamentale nello sviluppo di applicazioni e infrastrutture, GitOps facilita la gestione delle politiche di sicurezza e la conformità normativa grazie alla possibilità di eseguire revisioni delle modifiche apportate al codice e alle configurazioni. Inoltre, il modello di applicazione delle modifiche tramite pull di GitOps implica che solo i cambiamenti approvati vengano portati nell’ambiente di produzione.
Sfide nell’adozione di GitOps
Se è vero che l’adozione di GitOps porta innumerevoli benefici, è anche vero che si tratta di un processo non semplice da attuare per svariati motivi.
Ad esempio, l’approccio GitOps prevede che Git sia utilizzata come “single source of truth“, ovvero come unica fonte di verità, per descrivere lo stato di un’infrastruttura. Questo approccio potrebbe non essere familiare a persone con un background sistemistico che nel corso della propria carriera hanno avuto poco a che fare con il codice e i sistemi di versionamento. Ciò comporta quindi un grande lavoro necessario a cambiare la cultura e il mindset necessari per attuare effettivamente GitOps.
Un altro aspetto importante è quello della validazione delle configurazioni. L’utilizzo di Git permette effettivamente di attuare diverse pratiche utili come i controlli di sicurezza e compliance sul codice. Tuttavia, è necessario prendersi il giusto tempo per analizzare in maniera approfondita e applicare effettivamente tutti questi controlli. Questo perché i controlli di sicurezza possono essere fatti su più livelli e i controlli sul codice possono includere unit-testing, linting e simulazioni di esecuzioni tramite modalità dry-run.
Un’altra sfida è quella legata all’aumento del numero di strumenti e integrazioni necessarie. Sono infatti diversi gli strumenti pensati per applicare GitOps nella propria infrastruttura. Tra i principali vogliamo ricordare i seguenti:
L’introduzione di nuovi strumenti richiede quindi un’analisi preventiva per comprenderne le logiche. Gli strumenti GitOps sono solitamente opinionati, quindi l’analisi deve essere eseguita meticolosamente. È poi necessaria formazione aggiuntiva per utilizzare al massimo delle potenzialità tutti gli strumenti scelti.
Conclusioni
GitOps rappresenta una metodologia potente per semplificare e migliorare il processo di sviluppo e deployment. Presenta alcune sfide in fase di adozione, ma i suoi vantaggi sono innumerevoli. Come in ogni aspetto dell’informatica, resta quindi da valutare attentamente il proprio caso d’uso e valutare se l’adozione di GitOps può essere d’aiuto nel percorso continuo di miglioramento dell’esperienza di sviluppo e manutenzione dei sistemi.
Picture credits: Cloud Native Computing Foundation