Per la maggior parte degli utenti è utile comprendere che cos'è Salt e come funziona prima di iniziare il processo di installazione. Salt utilizza un modello master-client in cui un Salt Master invia comandi a un client e il client li esegue.

Nota: Nell'ambito dell'iniziativa di VMware volta a rimuovere la terminologia problematica, il termine Salt Master verrà sostituito con un termine più adatto in SaltStack Config, nonché nei prodotti e nella documentazione correlati. Per il completamento di questo aggiornamento della terminologia possono essere necessari alcuni cicli di rilascio.

Che cos'è Salt?

SaltStack Config utilizza la tecnologia di Salt, un framework di esecuzione remota open source basato su Python utilizzato per:

  • La gestione della configurazione
  • L'automazione
  • Il provisioning
  • L'orchestrazione

Salt è la tecnologia sottostante alle funzionalità di base di SaltStack Config. SaltStack Config ottimizza ed estende Salt, fornendo ulteriori caratteristiche e funzionalità che ne migliorano la facilità d'uso. Per un riepilogo dell'infrastruttura di SaltStack Config, vedere Architettura del sistema SaltStack Config.

Il diagramma seguente mostra i componenti principali dell'architettura Salt di base:


Architettura Salt

Le sezioni seguenti descrivono alcuni dei componenti principali dell'architettura Salt necessari per l'installazione di SaltStack Config.

Salt Master e minion Salt

Salt utilizza il modello master-client in cui un Salt Master invia comandi a un client e il client li esegue. Nell'ecosistema Salt, Salt Master è un server che esegue il servizio Salt Master. Invia comandi a uno o più minion Salt, che sono nodi che eseguono il servizio dei minion e sono registrati in tale Salt Master specifico.

Salt può essere concepito anche come un modello editore-sottoscrittore. Il Salt Master pubblica i processi che devono essere eseguiti e i minion sottoscrivono tali processi. Quando un processo specifico si applica a tale minion, quest'ultimo esegue il processo.

Quando un minion termina l'esecuzione di un processo, invia i dati di restituzione del processo al Salt Master. Salt dispone di due porte utilizzate per impostazione predefinita per consentire ai minion di comunicare con il proprio Salt Master. Queste porte funzionano in sintonia per ricevere e inviare dati al bus di messaggi. Il bus di messaggi di Salt è ZeroMQ, che crea una topologia di rete asincrona per garantire la comunicazione più rapida possibile.

Destinazioni e grani

Il Salt Master indica quali minion devono eseguire il processo definendo una destinazione. Una destinazione è il gruppo di minion, appartenenti a uno o più Salt Master, a cui si applica il comando Salt di un processo.

Nota:

Un Salt Master può anche essere gestito come un minion e può essere una destinazione se esegue il servizio dei minion.

Il seguente è un esempio di uno dei molti tipi di comandi che un Salt Master può inviare a un minion. Questo comando indica che tutti i minion devono installare l'applicazione Vim:

salt -v '*' pkg.install vim

In questo caso, la destinazione è il glob '*', che indica che tutti i minion devono eseguire questo comando. Sono disponibili molte altre opzioni per la definizione della destinazione. È ad esempio possibile definire come destinazione un minion specifico in base al suo ID oppure definire come destinazione più minion in base ai tratti o alle caratteristiche che condividono (denominati "grani" in Salt).

Salt include un'interfaccia che consente di recuperare informazioni sul sistema sottostante, definita "interfaccia dei grani", perché presenta a Salt i grani di informazioni. Vengono raccolti grani relativi a sistema operativo, nome del dominio, indirizzo IP, kernel, tipo di sistema operativo, memoria e molte altre proprietà di sistema. È inoltre possibile creare dati dei grani personalizzati.

I dati dei grani sono relativamente statici. Vengono tuttavia aggiornati quando vengono modificate le informazioni di sistema (ad esempio le impostazioni di rete) o quando viene assegnato un nuovo valore a un grano personalizzato.

Sistema di gestione degli eventi aperto (bus di eventi)

Il sistema di gestione degli eventi viene utilizzato per la comunicazione tra processi tra il Salt Master e i minion. Nel sistema di gestione degli eventi:

  • Gli eventi vengono visualizzati dal Salt Master e dai minion.
  • Gli eventi possono essere monitorati e valutati da entrambi.

Il bus di eventi definisce le basi per l'orchestrazione e il monitoraggio in tempo reale.

Tutti i minion visualizzano i processi e i risultati sottoscrivendo gli eventi pubblicati nel sistema di gestione degli eventi. Salt utilizza un sistema di gestione degli eventi collegabile con due livelli:

  • ZeroMQ (0MQ) : la libreria a livello di socket predefinita corrente che fornisce un livello di trasporto flessibile.
  • Tornado: sistema completo di gestione degli eventi del livello trasporto basato su TCP.

Uno dei maggiori punti di forza di Salt è la velocità di esecuzione. Il bus di comunicazione del sistema di gestione degli eventi è più efficiente rispetto all'esecuzione di un servizio Web di livello superiore (http). Il sistema di esecuzione remota è il componente su cui sono basati tutti i componenti, che consente l'esecuzione remota decentrata per distribuire il carico tra le risorse.

Stati di Salt

Oltre all'esecuzione remota, Salt fornisce un altro metodo per configurare i minion dichiarando quale stato deve avere un minion. Si tratta del metodo degli stati di Salt. Gli stati di Salt consentono la gestione della configurazione. È possibile utilizzare gli stati di Salt per distribuire e gestire l'infrastruttura con semplici file YAML. Utilizzando gli stati, è possibile automatizzare le attività ricorsive e prevedibili accodando i processi che Salt può implementare senza richiedere l'input dell'utente. È inoltre possibile aggiungere una logica condizionale più complessa per dichiarare i file con Jinja.

Per illustrare le lievi differenze tra l'esecuzione remota e la gestione della configurazione, prendere come esempio il comando utilizzato nella sezione precedente relativa alle destinazioni e ai grani in cui Salt installava l'applicazione Vim in tutti i minion:

Metodologia

Implementazione

Risultato

Esecuzione remota

  • Eseguire salt-v'*'pkg.installvim dal terminale
  • Installa Vim da remoto nei minion di destinazione

Gestione della configurazione

  • Scrivere un file di stato YAML che verifichi se l'applicazione Vim è installata
  • Questo file di stato viene quindi applicato ai minion di destinazione
  • Garantisce che l'applicazione Vim sia sempre installata nei minion di destinazione
  • Salt analizza il file di stato e determina le azioni da eseguire per assicurarsi che il minion sia conforme alle dichiarazioni dello stato
  • Se l'applicazione Vim non è installata, automatizza i processi di installazione di Vim nei minion di destinazione

Il file di stato che verifica l'installazione di Vim potrebbe essere simile all'esempio seguente:

# File:/srv/salt/vim_install.sls
install_vim_now:
  pkg.installed:
     -pkgs:
         -vim

Per applicare questo stato a un minion, è necessario utilizzare il modulo state.apply, come nell'esempio seguente:

salt '*' state.apply vim_install

Questo comando applica lo stato vim_install a tutti i minion.

Le formule sono raccolte di stati che vengono eseguite in armonia per configurare un minion o un'applicazione. Ad esempio, uno stato potrebbe attivare un altro stato.

File top

Non è pratico eseguire manualmente ogni singolo stato definendo ogni volta come destinazione minion specifici. Alcuni ambienti includono centinaia di file di stato che hanno come destinazione migliaia di minion.

Salt offre due funzionalità per contribuire a risolvere questo problema di scalabilità:

  • File top.sls: mappa gli stati di Salt ai rispettivi minion applicabili.
  • Esecuzione highstate: esegue tutti gli stati di Salt descritti in top.sls in una singola esecuzione.

Il file top mappa gli stati che devono essere applicati ai diversi minion in determinati ambienti. Di seguito viene illustrato un esempio di file top semplice:

# File: /srv/salt/top.sls
base:
  '*':
    - all_server_setup
  
  '01webserver':
    - web_server_setup

In questo esempio, base fa riferimento all'ambiente Salt, che è quello predefinito. È possibile specificare più ambienti in base alle proprie esigenze, ad esempio produzione, sviluppo, controllo di qualità e così via.

Nell'ambiente vengono specificati i gruppi di minion e gli stati per ciascun set di minion. Questo file top indica che uno stato denominato all_server_setup deve essere applicato a tutti i minion '*' e lo stato denominato web_server_setup deve essere applicato al minion 01webserver.

Per eseguire il comando Salt, utilizzare la funzione state.highstate:

salt \* state.highstate

Questo comando applica il file top ai minion di destinazione.

Pillar di Salt

La funzionalità pillar di Salt recupera i dati definiti nel Salt Master e li distribuisce ai minion in base alle necessità. Il pillar viene utilizzato principalmente per archiviare i segreti o altri dati estremamente sensibili, come le credenziali dell'account, le chiavi crittografiche o le password. È inoltre utile per archiviare dati non segreti che non si desidera inserire direttamente nei file di stato, ad esempio i dati di configurazione.

Il pillar di Salt porta i dati nel cluster dalla direzione opposta come i grani. Mentre i dati dei grani vengono generati dal minion, i dati del pillar vengono generati dal Salt Master.

I pillar vengono organizzati in modo simile agli stati in un albero degli stati del pillar, in cui il file top.sls coordina i dati del pillar negli ambienti e nei minion che sono al corrente dei dati. Le informazioni trasferite utilizzando il pillar hanno un dizionario generato per il minion di destinazione e sono crittografate con la chiave di tale minion per il trasferimento sicuro dei dati. Poiché i dati del pillar vengono crittografati in base a ogni singolo minion, risultano utili per l'archiviazione di dati sensibili specifici di un determinato minion.

Beacon e reattori

Il sistema di beacon è uno strumento di monitoraggio in grado di ascoltare una vasta gamma di processi di sistema nei minion. I beacon possono attivare reattori che possono contribuire a implementare una modifica o risolvere un problema. Ad esempio, se si verifica il timeout della risposta di un servizio, il sistema del reattore può riavviare il servizio.

I beacon vengono utilizzati per diversi scopi, tra cui:

  • Creazione di report automatizzata
  • Distribuzione dei registri degli errori
  • Monitoraggio dei microservizi
  • Attività delle shell utente
  • Monitoraggio delle risorse

Quando vengono abbinati ai reattori, i beacon possono creare risposte precompilate automatizzate ai problemi relativi all'infrastruttura e all'applicazione. I reattori ampliano Salt con risposte automatiche utilizzando gli stati di correzione precompilati.

I reattori possono essere applicati in diversi scenari:

  • Scalabilità dell'infrastruttura
  • Notifiche agli amministratori
  • Riavvio delle applicazioni non riuscite
  • Rollback automatico

Quando i beacon e i reattori vengono utilizzati insieme, è possibile creare stati univoci personalizzati in base alle proprie esigenze specifiche.

Strumenti di esecuzione e orchestrazione di Salt

Gli strumenti di esecuzione di Salt sono applicazioni utili eseguite con il comando salt-run. Gli strumenti di esecuzione di Salt funzionano in modo simile ai moduli di esecuzione di Salt. Tuttavia, vengono eseguiti nel Salt Master anziché nei minion. Uno strumento di esecuzione di Salt può essere una semplice chiamata al client o un'applicazione complessa.

Salt consente di orchestrare le attività amministrative del sistema in tutta l'azienda. L'orchestrazione consente di coordinare le attività di più macchine da una posizione centrale. Consente inoltre di controllare la sequenza temporale di determinati eventi di configurazione. Gli stati di orchestrazione vengono eseguiti nel Salt Master utilizzando il modulo dello strumento di esecuzione degli stati.

Quando si esegue un'installazione con più nodi, si esegue effettivamente un'orchestrazione per l'installazione di SaltStack Config. Nello scenario di installazione con più nodi, è possibile eseguire un highstate dell'orchestrazione progettato da VMware. L'highstate viene eseguito nel Salt Master e configura l'ambiente con più nodi. Installa l'architettura principale di SaltStack Config negli altri tre nodi che ospiteranno PostgreSQL, Redis e RaaS.