Cos'è GitOps?

Copia URL

Definiamo GitOps un insieme di procedure per la gestione delle configurazioni di applicazioni e infrastruttura che permette di razionalizzare i processi esistenti e migliorare il ciclo di vita dell'applicazione.

Utilizzando i repository Git come singola fonte di attendibilità, GitOps offre un approccio Infrastructure as Code (IaC), ovvero un approccio alla gestione e al provisioning dell'infrastruttura che utilizza il codice in sostituzione dei processi manuali. L'IaC prevede di creare file di configurazione con le specifiche dell'infrastruttura in modo da ottenere processi di provisioning ripetibili. Questo approccio riveste un ruolo fondamentale nell'adozione della metodologia DevOps e delle pipeline di integrazione e distribuzione continue (CI/CD)

GitOps richiede una descrizione dichiarativa della condizione target del sistema e servendosi di strumenti dichiarativi permette di controllare le versioni di tutti i file di configurazione e del codice sorgente in Git. Qualunque modifica al codice viene registrata, il che semplifica l'aggiornamento e garantisce il controllo delle versioni necessario per eseguire un eventuale rollback.

GitOps offre:

  • Un flusso di lavoro standardizzato per lo sviluppo applicativo.
  • Maggiore visibilità, verificabilità e quindi sicurezza.
  • Maggiore affidabilità grazie alla visibilità e al controllo delle versioni forniti da Git.
  • Maggiore coerenza tra cluster, cloud e ambienti on premise.

Scopri di più sull'operatore Red Hat OpenShift GitOps

GitOps e DevOps presentano alcuni principi e obiettivi comuni. La metodologia DevOps promuove il cambiamento culturale e ha lo scopo di favorire la collaborazione fra team operativi e team di sviluppo.

GitOps offre invece gli strumenti e un framework che consentono di applicare le procedure DevOps (ad esempio, collaborazione, CI/CD e controllo delle versioni) all'automazione dell'infrastruttura e al deployment delle applicazioni.

Risorse da Red Hat

L'adozione di GitOps implica un cambiamento nei processi, che richiede tempo per adattarvisi. Richiede inoltre maggiore collaborazione e comunicazione. Instaurare una cultura basata sulla condivisione di feedback può quindi agevolare l'adozione di GitOps, a prescindere dalle difficoltà che potrebbero comunque presentarsi.

Nonostante le possibili problematiche, GitOps offre un framework con cui iniziare a ottenere risultati concreti, avvalendosi degli approcci DevOps.

Grazie all'utilizzo degli stessi flussi di lavoro basati su Git che gli sviluppatori già conoscono, GitOps consente di estendere i processi esistenti relativi a sviluppo e deployment applicativi, gestione del ciclo di vita dell'applicazione e configurazione dell'infrastruttura. Gli sviluppatori possono utilizzare repository di codice familiari e i team operativi possono avvalersi degli stessi strumenti e delle stesse tecniche per gestire l'infrastruttura. Qualunque modifica introdotta durante il ciclo di vita dell'applicazione viene registrata nel repository Git e può essere sottoposta a verifica.

Apportare le modifiche tramite Git offre agli sviluppatori la possibilità di dedicarsi alla scrittura di codice in base ai propri ritmi senza più dover attendere che le risorse vengano assegnate o approvate dai team operativi.

Ai team operativi invece GitOps offre la visibilità sulle modifiche che permette di monitorare e riprodurre i problemi velocemente, contribuendo ad aumentare la sicurezza generale. Un audit trail aggiornato aiuta a ridurre l'inserimento di modifiche indesiderate o comunque permette di correggerle prima che passino in produzione.

La possibilità di modificare il codice dalla fase di sviluppo a quella di produzione consente alle organizzazioni di adattarsi agilmente ai cambiamenti aziendali e del mercato.

Gli strumenti che si possono utilizzare per creare un framework GitOps sono svariati: repository Git, Kubernetes, strumenti di integrazione e distribuzione continue (CI/CD) e strumenti di gestione della configurazione. Per trovare la combinazione di strumenti ottimale, occorre che gli sviluppatori stabiliscano quali sono le loro esigenze e quali funzionalità potrebbero soddisfarle. Di seguito elenchiamo alcuni validi strumenti.  

Strumenti di CI

L'integrazione continua (CI) consiste nell'integrazione frequente e automatica delle modifiche al codice in un repository condiviso del codice sorgente. Durante l'esecuzione di questi aggiornamenti, vengono avviati test automatici per verificare che le modifiche al codice siano affidabili. 

Tekton: è un framework Kubernetes native per la creazione di sistemi CI/CD. Offre agli ingegneri della piattaforma e agli sviluppatori la flessibilità, le procedure consigliate e la standardizzazione necessarie per agevolare le attività di sviluppo, test e deployment su sistemi on premise e nel cloud. 

Jenkins: è un server di automazione open source basato su Java. Semplifica l'applicazione delle modifiche perché offre la possibilità di testare, creare e distribuire i progetti in modo semplice, continuo e senza configurazioni complesse. Jenkins X, un'estensione dell'ecosistema Jenkins, permette di automatizzare le pipeline CI/CD nel cloud. 

Strumenti di CD

La distribuzione continua e/o il deployment continuo (CD) è un processo in due parti durante il quale le modifiche al codice vengono integrate, testate e distribuite. La distribuzione continua automatizza il rilascio del codice convalidato in un repository, in seguito all'automazione delle build e dei test di unità e integrazione nella fase di CI. Il deployment continuo è un ampliamento del concetto di distribuzione continua e può riferirsi al rilascio automatico delle modifiche apportate dallo sviluppatore dal repository alla produzione, dove diventano fruibili ai clienti.

Argo CD: è uno strumento dichiarativo di distribuzione continua per Kubernetes. Permette ai team di sviluppo di distribuire e gestire le applicazioni anche senza competenze avanzate di Kubernetes e fornisce l'accesso completo al sistema Kubernetes. Argo CD monitora le applicazioni in esecuzione per garantire che siano sempre sincronizzate e conformi alla condizione target. 

Scopri Argo CD

Flux: è uno strumento GitOps che automatizza il deployment sui cluster Kubernetes e garantisce la sincronizzazione del cluster con i repository Git. Basato su una serie di estensioni dell'API Kubernetes, Flux supporta la distribuzione delle applicazioni e la gestione dell'infrastruttura.

Per utilizzare GitOps occorre innanzitutto disporre di un'infrastruttura gestibile in modo dichiarativo. Per questo motivo GitOps viene spesso utilizzato come modello operativo per Kubernetes e per lo sviluppo di applicazioni cloud native. Inoltre, consente il deployment continuo per Kubernetes.

La tecnica GitOps non è tuttavia vincolata all'impiego di Kubernetes, ma può essere applicata anche ad altre pipeline di deployment e infrastruttura. GitOps permette di creare pipeline di sviluppo, programmare applicazioni, gestire configurazioni, eseguire il provisioning dei cluster Kubernetes e il deployment in Kubernetes o in registri dei container.

Utilizzare GitOps su Red Hat OpenShift

GitOps può essere considerato un'evoluzione dell'Infrastructure as Code (IaC), che utilizza Git come sistema di controllo delle versioni per le configurazioni dell'infrastruttura e spesso adotta un approccio dichiarativo alla gestione dell'infrastruttura, definendo la condizione target del sistema e monitorandone lo stato effettivo.

Come IaC anche GitOps richiede una descrizione dichiarativa della condizione target del sistema e servendosi di strumenti dichiarativi permette di controllare le versioni di tutti i file di configurazione e del codice sorgente in Git.

In genere le pipeline CI/CD vengono attivate da un evento esterno, come il push del codice in un repository. In un flusso di lavoro GitOps le modifiche vengono eseguite tramite richieste pull che modificano la condizione nel repository Git. 

Per distribuire una nuova versione utilizzando un flusso di lavoro GitOps, è necessario eseguire una richiesta pull in Git allo scopo di modificare la condizione dichiarata del cluster. L'operatore GitOps intercetta il commit ed esegue il pull della nuova condizione dichiarata da Git.  

Una volta approvate e unite, le modifiche vengono automaticamente applicate all'infrastruttura di produzione. Gli sviluppatori possono continuare a utilizzare il normale flusso di lavoro e le pratiche CI/CD, poiché è il motore GitOps a occuparsi del CD, che può operare in maniera indipendente o come parte di una soluzione CI orchestrata.

Solitamente quando si adotta GitOps con Kubernetes, si utilizza un operatore Kubernetes per confrontare la condizione target registrata nel repository con la condizione effettiva dell'infrastruttura installata. Tale operatore aggiorna l'infrastruttura ogni volta che rileva una differenza tra la condizione effettiva e quella registrata nel repository.

L'osservabilità, ovvero la capacità di osservare un sistema, è un concetto chiave per GitOps dato che solo con un buon livello di osservabilità è possibile verificare che la condizione target di un sistema coincida con la condizione effettiva. GitOps garantisce l'osservabilità delle risorse che fornisce ma non è uno strumento di monitoraggio generale. Red Hat® OpenShift® Observability invece è un set di strumenti completo che grazie a metriche, log, tracciamento ed eventi permette di stabilire cicli di feedback tra i sistemi di app e i repository Git. Insieme GitOps e OpenShift Observability possono fornire informazioni approfondite sui sistemi di app attraverso il monitoraggio, l'analisi e la risoluzione dei problemi. 

L'utilizzo di richieste pull e di un sistema di controllo delle versioni come Git garantiscono piena visibilità sul processo di deployment. I team possono verificare e monitorare tutte le modifiche apportate a un sistema, generare un audit trail ed eseguire il rollback delle modifiche in caso di errore.

I flussi di lavoro GitOps consentono di aumentare la produttività e la velocità di sviluppo e deployment, oltre a incrementare i livelli di stabilità e affidabilità dei sistemi.

Scopri di più sui flussi di lavoro GitOps

Red Hat mette a disposizione un'ampia gamma di prodotti che supportano i flussi di lavoro GitOps.Red Hat OpenShift è una piattaforma applicativa unificata che supporta l'implementazione di pratiche GitOps per migliorare la coerenza dei cluster Kubernetes e dei cicli di vita dello sviluppo. Red Hat OpenShift consolida l'amministrazione e la gestione delle applicazioni distribuite fra ambienti on premise e cloud pubblici e permette di:

  • Controllare che tutti i cluster siano in una condizione simile (configurazioni, monitoraggio, storage) rendendo noti i requisiti delle applicazioni fin dall'inizio del ciclo di vita dello sviluppo.
  • Eseguire il rollback delle modifiche al codice su più cluster ripristinando i cluster da una condizione conosciuta.
  • Estendere le modifiche inviate a Git a più cluster Red Hat OpenShift.
  • Collegare le configurazioni basate su modello in tutto il cloud ibrido.

 

GitOps Red Hat OpenShift Kubernetes diagram
 

L'operatore Red Hat OpenShift GitOps offre un flusso di lavoro che integra repository Git, strumenti di integrazione/distribuzione continue (CI/CD) e Kubernetes per uno sviluppo software più rapido, sicuro e scalabile, senza compromettere la qualità. Permette di compilare e integrare flussi di lavoro CD basati su Git in modo dichiarativo direttamente nella propria piattaforma di sviluppo applicativo. Per ottenere uno strumento di CI/CD completo, si possono usare Jenkins o Tekton per l'integrazione continua e GitOps come motore di distribuzione continua. Red Hat collabora all'adozione di un framework per GitOps contribuendo a progetti open source come Argo CD.Installa l'operatore Red Hat OpenShift GitOps e sviluppa strumenti con Argo per la gestione di GitOps nei deployment Red Hat OpenShift esistenti.

OpenShift GitOps è disponibile per servizi cloud, versioni autogestite ed edge computing. I servizi cloud gestiti, come Red Hat OpenShift Service on AWS (ROSA), Microsoft Azure Red Hat OpenShift (ARO) e Red Hat OpenShift Dedicated (OSD), aiutano le aziende a incrementare l'efficienza operativa, a dedicarsi all'innovazione e ad accelerare lo sviluppo, il deployment e la scalabilità delle applicazioni. 

Le versioni autogestite di OpenShift, come Red Hat OpenShift Virtualization Engine, includono la funzionalità di virtualizzazione di Red Hat OpenShift, una piattaforma ideale per semplificare il deployment, la gestione e la scalabilità delle macchine virtuali. OpenShift GitOps supporta il deployment automatizzato delle VM e in combinazione con OpenShift Virtualization Engine contribuisce a snellire i processi di migrazione e gestione delle VM. La versione Red Hat di MicroShift permette di sfruttare l'efficienza e la scalabilità di Kubernetes anche all'edge della rete. Grazie a questa soluzione è possibile scrivere le applicazioni una volta sola e poi eseguirle senza problemi dove serve, anche in prossimità della sorgente dei dati o dell'utente finale.

Red Hat Advanced Cluster Management for Kubernetes offre funzionalità per la gestione di più cluster e del ciclo di vita dei cluster Kubernetes. Red Hat Advanced Cluster Management utilizza un framework di sottoscrizioni e canali, insieme a criteri di posizionamento, per distribuire automaticamente le applicazioni su più cluster in base a una condizione target desiderata. Advanced Cluster Management for Kubernetes utilizza OpenShift GitOps come motore GitOps. Dispone di funzionalità che facilitano la gestione di gruppi di applicazioni, istanze Argo e configurazioni dei cluster GitOps, oltre ad agevolare l'implementazione delle policy. 

Red Hat Ansible® Automation Platform permette ai sistemi di raggiungere la condizione desiderata, indipendentemente da quella attuale.Gli Ansible Playbook, scritti in linguaggio YAML, descrivono la condizione target dei sistemi che sono in genere controllati dal codice sorgente. Ansible può essere un'aggiunta più che valida ai flussi di lavoro GitOps. Dato che Argo e GitOps supportano unicamente Kubernetes, gli utenti possono usare Ansible per l'automazione dei processi esterni a Kubernetes, ad esempio gli interventi imperativi. L'integrazione di Red Hat Advanced Cluster Management, Red Hat OpenShift GitOps e Red Hat Ansible Automation Platform permette ai team DevOps di gestire e aggiornare le configurazioni in maniera scalabile e migliorare così le pipeline CI/CD.

Scopri alcuni degli scenari di utilizzo reali di GitOps su Kubernetes

Hub

Il blog ufficiale di Red Hat

Leggi gli articoli del blog di Red Hat per scoprire novità e consigli utili sulle nostre tecnologie, e avere aggiornamenti sul nostro ecosistema di clienti, partner e community.

Tutte le versioni di prova dei prodotti Red Hat

Grazie alle versioni di prova gratuite dei prodotti Red Hat potrai acquisire esperienza pratica, prepararti per le certificazioni o capire se il prodotto che hai scelto è giusto per le esigenze della tua organizzazione.

Continua a leggere

DevOps: Cos'è la metodologia agile?

La metodologia agile è utilizzata dagli sviluppatori e si basa sulla distribuzione continua di software creati in modo rapido e iterativo. Altri esempi di framework agili sono Kanban e Scrum.

Cos'è una pipeline di CI/CD?

Una pipeline CI/CD è l'insieme dei passaggi stabiliti che gli sviluppatori devono seguire per fornire un nuovo software.

Cos'è GitOps per il multicloud?

GitOps è un insieme di principi che regola il flusso di lavoro aziendale e permette di implementare il deployment continuo (CD) per le applicazioni cloud native. Semplifica la gestione della configurazione dei cluster e i deployment delle applicazioni automatizzando i processi manuali.

DevOps: risorse consigliate