Gestione della configurazione
In che modo la gestione della configurazione aiuta i team di ingegneri a compilare sistemi solidi e stabili
Ian Buchanan
Principal Solutions Engineer
Durante gli anni '50 il Dipartimento della Difesa degli Stati Uniti ha sviluppato una disciplina di gestione tecnica per tenere traccia dei cambiamenti nello sviluppo di sistemi complessi. Ha dato a questo sistema e a varie iterazioni nomi molto tecnici, fino a quando nel 2001 ha pubblicato una guida consolidata che istituiva il sistema di gestione tecnica ora chiamato gestione della configurazione. Oggi, la gestione della configurazione non viene utilizzata solo dal dipartimento della Difesa, ma anche nello sviluppo di software, nella gestione dei servizi IT, nell'ingegneria civile, nell'ingegneria industriale e altro ancora.
Prova Compass gratis
Migliora la tua esperienza di sviluppatore, cataloga tutti i servizi e aumenta l'integrità del software.
Che cos'è la gestione della configurazione?
La gestione della configurazione è un processo di ingegneria dei sistemi per stabilire la coerenza degli attributi di un prodotto per tutto il suo ciclo di vita. Nel mondo della tecnologia, la gestione della configurazione è un processo di gestione IT che tiene traccia dei singoli elementi di configurazione di un sistema IT. I sistemi IT sono composti da risorse IT che variano di granularità. Una risorsa IT può rappresentare un software, un server o un cluster di server. Quanto segue si concentra sulla gestione della configurazione in quanto si applica direttamente agli asset software IT e agli asset software CI/CD.
La gestione della configurazione software è un processo di ingegneria dei sistemi che tiene traccia e monitora le modifiche ai metadati di configurazione di un sistema software. Nello sviluppo software, la gestione della configurazione viene comunemente utilizzata insieme al controllo delle versioni e all'infrastruttura CI/CD. Questo post si concentra sulla sua applicazione moderna e sull'uso in ambienti software CI/CD agili.
Perché è importante la gestione della configurazione?
materiale correlato
Microservizi e architettura monolitica a confronto
Scopri la soluzione
Migliora l'esperienza di sviluppo con Compass
La gestione della configurazione consente ai team di ingegneri di realizzare sistemi robusti e stabili attraverso l'uso di strumenti che gestiscono e monitorano automaticamente gli aggiornamenti ai dati della configurazione. I sistemi software complessi sono composti da componenti che differiscono per granularità di dimensioni e complessità. Per un esempio più concreto, considera un'architettura a microservizi. Ogni servizio in un'architettura a microservizi utilizza i metadati di configurazione per registrarsi ed eseguire l'inizializzazione. Alcuni esempi di metadati di configurazione software sono:
- Specifiche delle allocazioni di risorse hardware computazionali per CPU, RAM, ecc.
- Endpoint che specificano connessioni esterne ad altri servizi, database o domini
- Segreti come password e chiavi di crittografia
È facile che questi valori di configurazione non vengano considerati con la dovuta importanza, portando alla disorganizzazione e alla dispersione della configurazione. Immagina numerosi post-it con password e URL in giro per un ufficio. La gestione della configurazione risolve questa sfida creando una "fonte di verità" con una posizione centrale per la configurazione.
Git è una piattaforma fantastica per la gestione dei dati di configurazione. Lo spostamento dei dati di configurazione in un repository Git consente al controllo delle versioni e al repository di fungere da fonte di verità. Il controllo della versione risolve anche un altro problema di configurazione: le modifiche impreviste. La gestione delle modifiche impreviste attraverso l'uso della revisione del codice e del controllo della versione aiuta a ridurre al minimo i tempo di inattività.
I valori di configurazione vengono spesso aggiunti, rimossi o modificati. Senza il controllo della versione ciò può causare problemi. Un membro del team può modificare il valore di allocazione dell'hardware in modo che il software funzioni in modo più efficiente sul proprio laptop personale. Quando il software viene successivamente distribuito in un ambiente di produzione, questa nuova configurazione potrebbe avere un effetto non ottimale o potrebbe non funzionare.
Il controllo della versione e la gestione della configurazione risolvono questo problema aggiungendo visibilità alle modifiche alla configurazione. Quando viene apportata una modifica ai dati di configurazione, il sistema di controllo della versione ne tiene traccia, il che consente ai membri del team di rivedere una traccia di controllo delle modifiche.
Il controllo della versione della configurazione abilita la funzionalità di rollback o "annullamento" alla configurazione, il che aiuta a evitare guasti imprevisti. Il controllo della versione applicato alla configurazione può essere ripristinato rapidamente all'ultimo stato stabile conosciuto.
In che modo la gestione della configurazione si adatta a DevOps, CI/CD e Agile
I dati di configurazione sono da sempre difficili da gestire e possono non ricevere la giusta importanza. Non è proprio codice, quindi non vengono immediatamente inseriti nel controllo della versione e non si tratta di dati di prima classe, quindi non vengono archiviati in un database primario. L'amministrazione di sistema tradizionale e su piccola scala viene solitamente eseguita con una raccolta di script e processi ad hoc. A volte i dati di configurazione possono essere trascurati, ma sono fondamentali per il funzionamento del sistema.
L'ascesa delle infrastrutture cloud ha portato allo sviluppo e all'adozione di nuovi modelli di gestione dell'infrastruttura. Architetture di sistema complesse e basate su cloud vengono gestite e distribuite tramite l'uso di file di dati di configurazione. Queste nuove piattaforme cloud consentono ai team di specificare le risorse hardware e le connessioni di rete di cui hanno bisogno per il provisioning tramite file di dati leggibili dall'uomo e dalla macchina come YAML. I file di dati vengono quindi letti e l'infrastruttura viene predisposta nel cloud. Questo modello si chiama Infrastructure as Code (IaC).
Gestione della configurazione DevOps
Nei primi anni dello sviluppo di applicazioni Internet, l'amministrazione dei sistemi e delle risorse hardware veniva eseguita principalmente manualmente. Gli amministratori di sistema organizzavano i dati di configurazione e al contempo effettuavano il provisioning e la gestione manuale delle risorse hardware in base ai dati di configurazione.
La gestione della configurazione è una parte fondamentale di un ciclo di vita DevOps. La configurazione DevOps è l'evoluzione e l'automazione del ruolo di amministrazione dei sistemi, che porta l'automazione nella gestione e nella distribuzione dell'infrastruttura.
La configurazione DevOps porta anche la responsabilità dell'amministrazione del sistema sotto l'egida dell'ingegneria del software. Le aziende oggi la utilizzano per consentire agli ingegneri del software di richiedere e fornire le risorse necessarie su richiesta. Ciò rimuove il potenziale blocco derivante dalle dipendenze organizzative di un team di sviluppo software in attesa di risorse da un team di amministrazione di sistema separato.
Gestione della configurazione CI/CD
La gestione della configurazione CI/CD utilizza flussi di lavoro di revisione del codice basati su richieste pull per automatizzare la distribuzione delle modifiche al codice in un sistema software live. Lo stesso flusso può essere applicato alle modifiche alla configurazione. CI/CD può essere impostato in modo che le richieste di modifica della configurazione approvate possano essere immediatamente distribuite su un sistema in esecuzione. Un perfetto esempio di questo processo è un flusso di lavoro GitOps.
Gestione agile della configurazione
La gestione della configurazione consente ai team agili di classificare e assegnare chiaramente le priorità al lavoro di configurazione. Esempi di lavoro di configurazione sono i compiti e le attività come:
- Aggiornare i certificati SSL di produzione
- Aggiungere un nuovo endpoint di database
- Cambiare la password per i servizi di posta elettronica di sviluppo, staging e produzione.
- Aggiungere chiavi API per una nuova integrazione di terze parti
Una volta installata una piattaforma di gestione della configurazione, i team hanno visibilità sul lavoro necessario per le attività di configurazione. Il lavoro di gestione della configurazione può essere identificato come dipendenze per altri lavori e affrontato correttamente come parte degli sprint agili.
Strumenti di gestione della configurazione
Git
Git è il sistema di controllo delle versioni leader del settore per tenere traccia delle modifiche al codice. L'aggiunta di dati di gestione della configurazione insieme al codice in un repository Git fornisce una visione olistica del controllo delle versioni di un intero progetto. Git è uno strumento fondamentale per la gestione della configurazione di livello superiore. Il seguente elenco di altri strumenti di gestione della configurazione è pensato per essere archiviato in un repository Git e sfruttare il monitoraggio del controllo della versione di Git.
Docker
Docker ha introdotto la containerizzazione che è una forma avanzata di gestione della configurazione, come un blocco della configurazione. Docker si basa su file di configurazione denominati Dockerfiles, che contengono un elenco di comandi valutati per ricostruire l'istantanea prevista dello stato del sistema operativo. Docker crea container da questi Dockerfile che sono istantanee di un'applicazione preconfigurata. I Dockerfile sono impegnati in un repository Git per il monitoraggio delle versioni e necessitano di una gestione aggiuntiva della configurazione per essere distribuiti nell'infrastruttura.
Terraform
Terraform è una piattaforma di gestione della configurazione open source di HasiCorp. Terraform utilizza IaC per il provisioning e la gestione di cluster, infrastruttura cloud o servizi. Terraform supporta Amazon Web Services (AWS), Microsoft Azure e altre piattaforme cloud. Ogni piattaforma cloud ha la propria rappresentazione e interfaccia per i componenti dell'infrastruttura comuni come server, database e code. Terraform ha creato un livello di astrazione di strumenti di configurazione per piattaforme cloud che consentono ai team di scrivere file che sono definizioni riproducibili della loro infrastruttura.
Ansible, Salt Stack, Chef, Puppet
Ansible, Salt Stack, Chef e Puppet sono framework di automazione IT. Questi framework automatizzano i processi di molti amministratori di sistema tradizionali. Ogni framework utilizza una serie di file di dati di configurazione, generalmente YAML o XML, che vengono valutati da un eseguibile.
I file di dati di configurazione specificano una sequenza di azioni da intraprendere per configurare un sistema. Le azioni vengono quindi eseguite dall'eseguibile. L'eseguibile differisce nel linguaggio tra i sistemi: Ansible e Salt Stack sono basati su Python e Chef su Ruby. Questo flusso di lavoro è simile all'esecuzione di script di shell ad hoc, ma offre un'esperienza più strutturata e raffinata attraverso i rispettivi ecosistemi di piattaforme. Questi strumenti sono ciò che consentirà l'automazione necessaria per ottenere l'integrazione integrata e le operazioni di CI/CD.
Come implementare la gestione della configurazione
Identificazione
La prima azione per ottenere la gestione della configurazione è la raccolta di informazioni. I dati di configurazione devono essere aggregati e compilati da diversi ambienti applicativi, di sviluppo, staging e produzione per tutti i componenti e i servizi in uso. Tutti i dati segreti come password e chiavi dovrebbero essere identificati e crittografati e archiviati in modo sicuro. A questo punto i dati di configurazione dovrebbero essere organizzati in file di dati che possono essere indicati come una fonte centrale di informazioni.
Standard
Dopo che i dati di configurazione sono stati aggregati e organizzati, è possibile stabilire una base di riferimento. Una configurazione di base è uno stato noto della configurazione che farà funzionare correttamente il software dipendente senza errori. Questa base viene in genere creata esaminando la configurazione di un ambiente di produzione funzionante e confermando tali impostazioni di configurazione.
Controllo della versione
Il tuo progetto di sviluppo dovrebbe utilizzare un sistema di controllo delle versioni. Se non è così, installa Git, inizializza un repository per il progetto e aggiungi i file di dati di configurazione al repository. Un avvertimento prima di aggiungere dati di configurazione a un repository: assicurati che tutti i dati segreti come password o chiavi siano crittografati con una chiave esterna. I dati segreti trasferiti accidentalmente in un repository sono un rischio enorme. Devono essere cancellati dalla cronologia dei repository o rischieranno di essere sfruttati.
controllo
Avere i dati di configurazione organizzati e aggiunti a un repository consente la collaborazione e la visibilità sulla configurazione del sistema. Il popolare flusso di lavoro di pull request utilizzato dai team software per rivedere e modificare il codice può quindi essere applicato ai file di dati di configurazione. Questo aiuta a costituire un sistema di revisione e contabilità. Qualsiasi modifica applicata alla configurazione deve essere esaminata e accettata dal team. Ciò aggiunge responsabilità e visibilità nelle modifiche alla configurazione.
Operazioni IT e CMDB
Finora abbiamo discusso della gestione della configurazione, poiché questa si applica agli asset software in ambienti Agile e CI/CD. I team delle operazioni IT gestiscono inoltre attivamente la configurazione in un database di gestione della configurazione, o CMBD. Un CMDB archivia le informazioni relative ai componenti hardware, software e di rete e alle relazioni tra di essi. I team delle operazioni IT si occupano delle interdipendenze, delle licenze, dei contratti e dei servizi e del budget necessari per far funzionare tutto. Grazie ai team delle operazioni IT che gestiscono le interdipendenze e ai team software che gestiscono la Configuration as Code, le organizzazioni possono usufruire di sistemi stabili e di un tempo di attività eccezionale.
In conclusione...
La gestione della configurazione è uno strumento necessario per la gestione di sistemi software complessi. La mancanza di gestione della configurazione può causare seri problemi ad affidabilità, tempi di attività e capacità di scalare un sistema. Molti attuali strumenti di sviluppo software dispongono di funzionalità di gestione della configurazione integrate. Bitbucket offre un potente sistema per la gestione della configurazione basato sui flussi di lavoro delle richieste pull Git e sulle pipeline CI/CD.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.