Come GitOps beneficia il workflow del tuo progetto

13 minutes Leggi
03 Ottobre 2024

L’indagine della Cloud Native Computing Foundation (CNCF) su GitOps ha rivelato che il 91% degli intervistati all’interno della community cloud-native ha adottato GitOps. I team che utilizzano GitOps hanno registrato un incremento del 25% della velocità di deploy, a dimostrazione del suo impatto sul miglioramento dei moderni cicli di sviluppo e deploy del software.

GitOps è più di una terminologia moderna del cloud: è un approccio raffinato alla gestione e all’implementazione delle infrastrutture, che utilizza un sistema di controllo delle versioni come Git come unica fonte di verità.

Comprendere i vantaggi di GitOps è fondamentale per qualsiasi team che voglia ottimizzare il proprio workflow. Che si tratti di un metodo pul-based o push-based, GitOps offre la flessibilità che consente alla vostra infrastruttura di rimanere coerente e nello stato desiderato.

Esploriamo GitOps: perché è utile per i team, che vantaggi porta al workflow del progetto e quali sono i principi fondamentali alla base della sua metodologia.

Che cos’è GitOps?

GitOps è una metodologia che combina l’approccio Infrastructure as Code (IaC) con le best practice di DevOps, come continuous integration e delivery, automazione dei processi e molto altro. Utilizza sistemi di controllo delle versioni, come Git, per garantire che le modifiche all’infrastruttura siano dichiarative, riproducibili e automatizzate, riducendo al minimo gli errori e i problemi di scalabilità comuni con la configurazione manuale.

BlogPost_Gitops components

Diagramma dei componenti chiave di GitOps.

Il concetto di GitOps e la sua rilevanza in DevOps

GitOps svolge un ruolo fondamentale nella metodologia DevOps moderna, portando le pratiche DevOps fondamentali nella gestione dell’infrastruttura. Si concentra sull’automazione delle modifiche all’infrastruttura utilizzando sistemi di controllo delle versioni, come Git, per gestire e tracciare le modifiche. Questa automazione riduce la dipendenza dai processi manuali e aiuta a mantenere i workflow coerenti e affidabili. Con GitOps, i development e operation team possono mantenere standard elevati nella gestione del software e dell’infrastruttura.

Alexis Richardson, in una sua intervista, ha fatto notare che, ancor prima che il termine “GitOps” venisse coniato, il suo team era riuscito a riprendersi da un cambiamento potenzialmente devastante nell’implementazione dell’infrastruttura perché era gestita attraverso un sistema di controllo delle versioni (Git).

Iniziare con GitOps

Il primo passo con GitOps è memorizzare l’intera Infrastructure as Code (IaC) in un repository Git, dove ogni modifica è controllata dalla versione, verificabile e applicata automaticamente all’infrastruttura tramite pipeline di Continuous Integration e Continuous Deployment (CI/CD) o agenti GitOps come ArgoCD. Per utilizzare al meglio il workflow, è importante comprendere i principi fondamentali che rendono GitOps efficace nella gestione dell’infrastruttura.

Principi chiave del workflow GitOps

Il workflow di GitOps si basa su principi chiave che aiutano a ottimizzare le operazioni dell’infrastruttura, aumentando al contempo la produttività, l’affidabilità e la sicurezza dello sviluppo e del deploy. Elenchiamo di seguito i principi fondamentali:

  • Descrizioni dichiarative: Uno dei principi chiave del flusso GitOps è che lo stato del sistema descritto dai file di configurazione IaC  o dal file di manifest deve essere dichiarativo. Ciò significa che invece di scrivere una serie di passaggi per raggiungere un determinato stato, si dichiara semplicemente come dovrebbe essere lo stato finale.
    Strumenti come Kubernetes, DockerTerraform definiscono la configurazione dei componenti in base a questo modello dichiarativo, piuttosto che a semplici istruzioni. Con la configurazione dichiarativa, la gestione dell’infrastruttura e delle applicazioni diventa più semplice, poiché i team di sviluppo possono concentrarsi sulla specifica dello stato desiderato invece della gestione dei processi sottostanti.
  • Versionamento e immutabilità: IaC e le altre configurazioni dell’applicazione devono essere gestite attraverso un sistema di controllo delle versioni (Git), che garantisce la tracciabilità di ogni modifica, rendendo il sistema versionato, immutabile e coerente tra gli ambienti e fornendo un meccanismo affidabile per tracciare le modifiche ed eseguire rollback quando necessario.
  • Gestione automatica delle modifiche e riconciliazione continua: Le modifiche apportate ai file di configurazione all’interno del repository attivano automaticamente gli aggiornamenti dell’infrastruttura. Le pipeline di automazione dell’infrastruttura sono impostate per effettuare il deploy di questi aggiornamenti e per sincronizzare lo stato del sistema in modo che corrisponda allo stato desiderato descritto nel sistema di versionamento utilizzato (Git). A seconda della strategia da implementare, Git viene continuamente monitorato. Se il sistema rileva una deriva dallo stato desiderato definito in Git, gli agenti GitOps come FluxCD, ArgoCD, o le piattaforme CICD riconciliano il sistema con lo stato desiderato. L’intero processo serve a garantire che gli aggiornamenti siano applicati in modo coerente e affidabile in tutti gli ambienti senza interventi manuali.
  • Collaborazione e sicurezza: Le modifiche all’infrastruttura vengono proposte pull request. Ciò consente la peer review, la discussione e la collaborazione prima di unire (o mergiare, dal verbo to merge, frequentemente usato dalla community) le modifiche ed effettuare il deploy.

Comprendere il workflow di GitOps

Consideriamo ora uno scenario pratico: è necessario effettuare il provisioning di un server cloud, installare Ubuntu Nginx e quindi fare il deply della propria applicazione. Tradizionalmente, questo comporta la navigazione manuale nell’interfaccia di un provider cloud, la configurazione del server e l’esecuzione di comandi. Ma cosa succederebbe se si dovesse ripetere questa operazione per più applicazioni o ambienti? Diventerebbe rapidamente macchinosa e soggetta a errori.

Con GitOps, si definisce l’intero processo in un file di configurazione IaC memorizzato in Git. Quando alcuni aggiornamenti sono necessari, il team invia una pull request per modificare la configurazione. Una volta riviste e approvate, le modifiche vengono mergiate nel branch principale, innescando una pipeline di CI/CD automatizzata che prepara il server, installa il software necessario ed effettua il deploy dell’applicazione, il tutto senza alcun intervento manuale.

BlogPost_Gitops workflow

Il workflow di GitOps

Strumenti necessari quando si utilizza GitOps

Nel workflow GitOps vengono impiegati diversi strumenti per gestire e distribuire (o deployare, dal verbo to deploy, usato dalla community) efficacemente le applicazioni e le infrastrutture. Questi includono:

  • Piattaforme di orchestrazione dei container: Strumenti come Kubernetes o Docker Swarm sono essenziali per gestire applicazioni containerizzate e per mantenere i loro stati attraverso configurazioni dichiarative.
  • Strumenti di tipo Infrastructure as Code (IaC): Terraform e similari sono fondamentali per la definizione e il provisioning dell’infrastruttura tra vari cloud provider, consentendo la gestione dell’infrastruttura come codice (infrastructure management as code).
  • Operatori GitOps: FluxCDArgoCD sono importanti operatori utilizzati con Kubernetes. Automatizzano la sincronizzazione tra i repository Git e il cluster Kubernetes.

Benefici di GitOps nel workflow del tuo progetto

Ci sono diversi vantaggi che si possono ottenere mettendo in pratica i principi di GitOps nel workflow di un progetto. Vediamone alcuni nei successivi paragrafi.

Controllo della versione

Con GitOps, la configurazione dell’infrastruttura è centralizzata tramite il sistema di controllo delle versioni, simili a una codebase su GitHub. Ciò consente trasparenza e gestione a ogni modifica dell’infrastruttura; tutto è ben tracciato, rivisto e approvato prima dell’esecuzione del deploy. Utilizza inoltre best practice per stabilire un workflow comune tra development team e operation team, assicurando una migliore cooperazione e riducendo gli errori di comunicazione, in modo che le modifiche all’infrastruttura siano come minimo visibili e tracciabili, come le modifiche al codice dell’applicazione.

Gestione e automazione dell’infrastruttura

Uno dei principali vantaggi dell’utilizzo della metodologia GitOps è la capacità di gestione che offre. Le modifiche all’infrastruttura vengono distribuite con deploy automatici applicando i principi della continuous integration e continuous delivery che vengono già applicati al codice dell’applicazione. Inoltre, GitOps facilita l’applicazione coerente dei file di configurazione nelle diverse fasi di sviluppo dell’applicazione, portando ad ambienti prevedibili. Questa automazione si traduce in deploy più affidabili, in quanto le stesse configurazioni sono utilizzate in tutte le fasi di sviluppo, test e produzione. Di conseguenza, si riducono gli errori e si minimizza la necessità di interventi manuali.

Controllabilità e disaster recovery

I workflow tradizionali spesso non hanno visibilità, registri di audit e controllo delle modifiche all’infrastruttura, lasciando un ambiente di produzione con problemi imprevisti. Con GitOps, c’è una traccia di audit esplicita su tutto; questo semplifica notevolmente l’identificazione di problemi e come risolverli.
GitOps consente di eseguire rollback di versione per risolvere problemi quali rollback complessi e ambienti inconsistenti.

Collaborazione e sicurezza migliorate

GitOps migliora la collaborazione tra development team e operation team sfruttando workflow di Git già noti. I membri del team possono proporre, rivedere e approvare le modifiche in modo controllato e trasparente, migliorando la comunicazione e l’allineamento e rafforzando la sicurezza.
Solo le modifiche approvate e salvate (o committate, dal verbo to commit, molto utilizzato nella community tecnica) nel repository Git sono applicate ai sistemi di produzione, riducendo il rischio di modifiche non autorizzate e assicurando che ogni modifica sia sottoposta a un processo di revisione approfondito.

Approcci in GitOps: Pull-based e Push-based

Esistono due differenti approcci al deploy con GitOps: Push e Pull.

Deploy Push-based (deploy basato su Pipeline)

L’approccio push-based è un metodo in cui le modifiche ai file di configurazione, memorizzati su Git, vengono automaticamente spinte (o pushate, dal verbo to push, usato dalla community) nell’ambiente di destinazione quando vengono committate nel repository Git. Questo metodo utilizza solitamente le classiche pipeline di CI/CD per sincronizzare le modifiche e implementare logiche di continuous delivery all’ambiente di destinazione. Per questo approccio vengono comunemente utilizzate diverse piattaforme di CI/CD, tra cui pipeline di Azure, GitHub Actions, Jenkins, e GitLab CI.

Il workflow: In questo modello, le modifiche committate in un repository Git da uno sviluppatore o da un processo automatizzato attivano una pipeline di CI/CD configurata. La pipeline convalida le modifiche, crea gli artefatti necessari ed effettua il deploy nell’ambiente di destinazione, come una piattaforma cloud, server on-premise o un cluster Kubernetes.

BlogPost_Push-based workflow

Il workflow Push-based

I vantaggi: L’approccio push-based è popolare per la sua semplicità e facilità di adozione, utilizzando strumenti e metodi di CI/CD già noti. Permette di pushare immediatamente le modifiche all’ambienti di destinazione, consentendo aggiornamenti più rapidi e una risposta più veloce a nuovi requisiti o problemi. Questo approccio è particolarmente apprezzato per gli ambienti al di fuori di Kubernetes, dove una strategia pull-based potrebbe non essere pratica.

Approccio Pull-based (conosciuto anche come approccio GitOps)

A differenza della strategia push-based, l’approccio pull-based si basa molto sul lavoro dei cosiddetti agenti. Questi agenti prelevano le modifiche dl repository di configurazione dell’ambiente in modo che lo stato attuale dell’infrastruttura deployata corrisponda allo stato desiderato definito nel repository Git. Questo metodo è ideale per scenari che richiedono elevata stabilità, controllo e sicurezza, come per esempio nell’ambiente di produzione. L’approccio pull-based è usato soprattutto dalle moderne infrastrutture cloud in combinazione con orchestratori come Kubernetes e Docker Swarm, con diversi agenti come ArgoCDFluxCD per facilitare il processo di deploy.

BlogPost_Pull-based workflow

L’approccio Pull-based

Il workflow: Le fasi di realizzazione dei deploy con questa strategia sono tre, e includono:

  • Deploy degli agenti: Gli agenti vengono distribuiti nell’ambiente di destinazione, ad esempio un cluster Kubernetes. Questi agenti sono responsabili del monitoraggio del repository Git per le modifiche.
  • Monitoraggio continuo: Gli agenti controllano continuamente il repository Git per gli aggiornamenti dello stato desiderato, comprese le configurazioni delle applicazioni, le definizioni della infrastruttura ecc.
  • Sincronizzazione: Quando vengono rilevate modifiche tramite metodi come il polling, gli agenti prelevano automaticamente questi aggiornamenti e li applicano all’ambiente.

I vantaggi: L’approccio pull-based garantisce che i deploy siano applicati all’ambiente desiderato in modo controllato e sicuro. Mantenendo le credenziali del cluster e del cloud provider solamente all’interno del cluster, si evitano rischi come l’esposizione accidentale dei file di configurazione. Questo metodo aumenta la sicurezza perché avvia processi di sincronizzazione dall’interno del sistema, riducendo la necessità di accessi esterni e riducendo così la superficie d’attacco.
Infine, l’approccio pull-based si integra senza problemi con le catene di strumenti esistenti, come gli strumenti di monitoraggio, le pipeline di CI/CD, gli strumenti di alert e molti altri, consentendo alle organizzazioni di adottare e implementare le pratiche GitOps senza interrompere il flusso di lavoro corrente.

Altre implementazioni di GitOps

Esistono piattaforme che consentono di gestire e implementare in modo più efficiente gli approcci push-based e pull-based al workflow GitOps. Una piattaforma degna di nota è Mia-Platform.

Mia-Platform offre una strategia di implementazione GitOps completa, progettata per facilitare gli approcci sia push-based che pull-based. Il suo approccio è incentrato su un’interfaccia grafica di facile utilizzo, nota come DevOps Console, che fornisce una console di deploy unificata che semplifica la gestione dei workflow GitOps. La console funge da hub centrale per entrambi i development e operation team, promuovendo la collaborazione e la gestione efficiente dei workflow.

Mia-Platform si integra con gli strumenti più diffusi per supportare vari workflow GitOps. Per le operazioni push-based, è possibile collegare Mia-Platform con GitHub Actions, Azure Pipelines e GitLab CI. Ciò consente di automatizzare senza problemi i processi di deploy direttamente dal sistema di controllo delle versioni.

Per le operazioni pull-based, Mia-Platform fornisce funzionalità avanzate attraverso la sua Mia-Platform DevOps Console, integrando strumenti come ArgoCD. Ma prima di utilizzare questo approccio, è necessario abilitare l’Enhanced Project Workflow.

Con Mia-Platform Console, i team possono beneficiare di una maggiore visibilità e di un maggiore controllo sui processi GitOps, che portano a deploy più affidabili e gestibili.

Come confrontare GitOps con CI/CD?

Quando si confronta GitOps con le pratiche di CI/CD, è importante notare che mentre con CI/CD si automatizza l’intero ciclo di vita dello sviluppo del software – dal build e test al deploy delle applicazioni – GitOps adotta un approccio più mirato. GitOps si concentra sulla gestione dell’infrastruttura attraverso sistemi di controllo delle versioni, utilizzando configurazioni dichiarative e riconciliazione continua. Lavora a braccetto con le pipeline di CI/CD, migliorandole e fornendo un metodo strutturato per gestire le modifiche all’infrastruttura.

Punti chiave

GitOps può migliorare notevolmente il processo di sviluppo di applicazioni cloud-native, integrando la gestione dell’infrastruttura con i sistemi di controllo delle versioni già noti. Questo semplifica il workflow e aumenta la resilienza delle risorse e dell’infrastruttura cloud, permettendo di sviluppare con fiducia e di deployare continuamente nuove idee e funzionalità ai clienti. Inoltre, piattaforme come Mia-Platform semplificano l’implementazione del workflow GitOps, rendendo più facile la gestione dell’infrastruttura insieme al codice.

Adottando un approccio GitOps, non solo si rende più efficiente il processo di sviluppo, ma si garantisce anche che le applicazioni siano più robuste e adattabili. Per ulteriori informazioni, visita la pagina di Mia-Platform Console per scoprire come una Internal Developer Platform (IDP) possa migliorare ulteriormente la strategia GitOps, e molto altro ancora.

 

Mia-Platform Demo
Torna all'inizio ↑
INDICE
Che cos’è GitOps?
Iniziare con GitOps
Benefici di GitOps nel workflow del tuo progetto
Approcci in GitOps: Pull-based e Push-based
Altre implementazioni di GitOps
Punti chiave