Introduzione alla gestione della configurazione con Ansible

Introduzione

La gestione della configurazione è il processo di gestione delle modifiche a un sistema in modo da garantire l’integrità nel tempo, tipicamente coinvolgendo strumenti e processi che facilitano l’automazione e l’osservabilità. Anche se questo concetto non ha avuto origine nell’industria IT, il termine è ampiamente utilizzato per riferirsi alla gestione della configurazione dei server.

Nel contesto dei server, la gestione della configurazione è anche comunemente indicata come Automazione IT o Orchestrazione dei Server. Entrambi i termini evidenziano gli aspetti pratici della gestione della configurazione e la capacità di controllare più sistemi da un server centrale.

Questa guida ti accompagnerà attraverso i benefici dell’utilizzo di uno strumento di gestione della configurazione per automatizzare la configurazione della tua infrastruttura server, e come uno strumento come Ansible può aiutarti in questo.

Benefici dell’Uso di uno Strumento di Gestione della Configurazione

Esistono numerosi strumenti di gestione della configurazione disponibili sul mercato, con diversi livelli di complessità e stili architetturali variopinti. Sebbene ciascuno di questi strumenti abbia le sue caratteristiche e funzioni in modo leggermente diverso, tutti forniscono la stessa funzione: assicurare che lo stato di un sistema corrisponda allo stato descritto da un insieme di script di provisioning.

Molti dei benefici della gestione della configurazione per i server derivano dalla capacità di definire l’infrastruttura come codice. Ciò consente di:

  • Utilizzare un sistema di controllo versione per tenere traccia di eventuali modifiche nell’infrastruttura
  • Riutilizzare gli script di provisioning per più ambienti server, come sviluppo, test e produzione
  • Condividere gli script di provisioning tra colleghi per facilitare la collaborazione in un ambiente di sviluppo standardizzato
  • Semplificare il processo di replica dei server, il che facilita il recupero da errori critici

Inoltre, gli strumenti di gestione della configurazione offrono un modo per controllare da una posizione centrale da uno a centinaia di server, il che può migliorare in modo significativo l’efficienza e l’integrità dell’infrastruttura dei server.

Panoramica di Ansible

Ansible è uno strumento moderno di gestione della configurazione che facilita l’attività di configurazione e manutenzione dei server remoti, con un design minimalista inteso a permettere agli utenti di essere operativi rapidamente.

Gli utenti scrivono script di provisioning Ansible in YAML, uno standard di serializzazione dei dati user-friendly che non è legato a nessun linguaggio di programmazione specifico. Ciò consente agli utenti di creare script di provisioning sofisticati in modo più intuitivo rispetto agli strumenti simili nella stessa categoria.

Ansible non richiede l’installazione di software speciale sui nodi che verranno gestiti con questo strumento. Una macchina di controllo è configurata con il software Ansible, che poi comunica con i nodi tramite SSH standard.

Come strumento di gestione della configurazione e framework di automazione, Ansible incapsula tutte le funzionalità comuni presenti negli altri strumenti della stessa categoria, mantenendo comunque un forte focus sulla semplicità e sulle prestazioni:

Comportamento Idempotente

Ansible tiene traccia dello stato delle risorse nei sistemi gestiti per evitare di ripetere compiti già eseguiti. Se un pacchetto è già installato, non cercherà di installarlo di nuovo. L’obiettivo è che dopo ogni esecuzione del provisioning il sistema raggiunga (o mantenga) lo stato desiderato, anche se viene eseguito più volte. Questo è ciò che caratterizza Ansible e altri strumenti di gestione della configurazione come aventi un comportamento idempotente. Quando si esegue un playbook, si vedrà lo stato di ogni task eseguito e se il task ha apportato una modifica al sistema.

Supporto per Variabili, Condizionali e Cicli

Quando si scrivono script di automazione Ansible, è possibile utilizzare variabili, condizionali e cicli per rendere l’automazione più versatile ed efficiente.

Fatti del Sistema

Ansible raccoglie una serie di informazioni dettagliate sui nodi gestiti, come interfacce di rete e sistema operativo, e le fornisce come variabili globali chiamate fatti del sistema. I fatti possono essere utilizzati all’interno dei playbook per rendere l’automazione più versatile e adattiva, comportandosi in modo diverso a seconda del sistema in fase di provisioning.

Sistema di Template

Ansible utilizza il sistema di template Python Jinja2 per consentire espressioni dinamiche e accesso alle variabili. I template possono essere utilizzati per facilitare la configurazione di file di configurazione e servizi. Ad esempio, è possibile utilizzare un template per configurare un nuovo virtual host all’interno di Apache, riutilizzando lo stesso template per più installazioni di server.

Supporto per Estensioni e Moduli

Ansible viene fornito con centinaia di moduli integrati per facilitare la scrittura di automazioni per attività comuni di amministrazione di sistemi, come l’installazione di pacchetti con apt e la sincronizzazione di file con rsync, e anche per gestire software popolari come sistemi di database (come MySQL, PostgreSQL, MongoDB e altri) e strumenti di gestione delle dipendenze (come composer di PHP, gem di Ruby, npm di Node e altri). Oltre a questo, ci sono vari modi per estendere Ansible: i plugin e i moduli sono buone opzioni quando hai bisogno di una funzionalità personalizzata che non è presente di default.

Puoi anche trovare moduli e plugin di terze parti nel portale Ansible Galaxy.

Conoscere i Concetti di Ansible

Ora daremo un’occhiata alla terminologia e ai concetti di Ansible per aiutarti a familiarizzare con questi termini man mano che compaiono in tutta questa serie.

Nodo di Controllo

Un nodo di controllo è un sistema in cui Ansible è installato e configurato per connettersi ai tuoi server. Puoi avere più nodi di controllo e qualsiasi sistema in grado di eseguire Ansible può essere impostato come nodo di controllo, incluse le personal computer o i laptop che eseguono un sistema operativo basato su Linux o Unix. Per il momento, Ansible non può essere installato su host Windows, ma puoi aggirare questa limitazione impostando una macchina virtuale che esegue Linux ed eseguendo Ansible da lì.

Nodi Gestiti

I sistemi che controlli utilizzando Ansible sono chiamati nodi gestiti. Ansible richiede che i nodi gestiti siano raggiungibili tramite SSH e abbiano Python 2 (versione 2.6 o superiore) o Python 3 (versione 3.5 o superiore) installato.

Ansible supporta una varietà di sistemi operativi, inclusi i server Windows, come nodi gestiti.

Inventario

Un file inventario contiene un elenco degli host che gestirai utilizzando Ansible. Sebbene Ansible crei tipicamente un file di inventario predefinito al momento dell’installazione, puoi utilizzare inventari per progetto per avere una migliore separazione della tua infrastruttura e evitare di eseguire comandi o playbook sul server sbagliato per errore. Gli inventari statici sono solitamente creati come file .ini, ma puoi anche utilizzare inventari generati dinamicamente scritti in qualsiasi linguaggio di programmazione in grado di restituire JSON.

Compiti

In Ansible, un compito è un’unità individuale di lavoro da eseguire su un nodo gestito. Ogni azione da eseguire è definita come un compito. I compiti possono essere eseguiti come azione occasionale tramite comandi ad-hoc, o inclusi in una playbook come parte di uno script di automazione.

Playbook

Una playbook contiene un elenco ordinato di compiti e alcune altre direttive per indicare a quali host è destinata quell’automazione, se utilizzare o meno un sistema di escalation dei privilegi per eseguire quei compiti e sezioni opzionali per definire variabili o includere file. Ansible esegue i compiti in sequenza e un’esecuzione completa di una playbook è chiamata play. Le playbook sono scritte in formato YAML.

Gestori

Gestori vengono utilizzati per eseguire azioni su un servizio, come il riavvio o l’arresto di un servizio attivamente in esecuzione sul sistema del nodo gestito. I gestori sono tipicamente attivati da compiti e la loro esecuzione avviene alla fine di un play, dopo che tutti i compiti sono stati completati. In questo modo, se più di un compito attiva un riavvio di un servizio, ad esempio, il servizio verrà riavviato una sola volta e dopo che tutti i compiti sono stati eseguiti. Sebbene il comportamento predefinito del gestore sia più efficiente e complessivamente una pratica migliore, è anche possibile forzare l’esecuzione immediata del gestore se richiesto da un compito.

Ruoli

Un ruolo è un insieme di playbook e file correlati organizzati in una struttura predefinita che è riconosciuta da Ansible. I ruoli facilitano il riutilizzo e la rielaborazione di playbook in pacchetti condivisibili di automazione granulare per obiettivi specifici, come l’installazione di un server web, l’installazione di un ambiente PHP o la configurazione di un server MySQL.

Conclusione

Ansible è uno strumento di automazione IT minimalista che ha una curva di apprendimento dolce, in parte grazie all’uso di YAML per i suoi script di provisioning. Ha un gran numero di moduli integrati che possono essere utilizzati per astrarre attività come l’installazione di pacchetti e l’uso di modelli. I suoi requisiti di infrastruttura semplificati e la sintassi accessibile possono essere una buona scelta per chi si sta avviando alla gestione della configurazione.

Nella prossima parte di questa serie, vedremo come installare e iniziare a usare Ansible su un server Ubuntu 20.04.

Source:
https://www.digitalocean.com/community/conceptual_articles/an-introduction-to-configuration-management-with-ansible