Perché usare Chef / Puppet su script shell?


81

Novità per gli strumenti Puppet and Chef. Sembra che il lavoro che stanno facendo possa essere fatto con gli script di shell. Forse è stato fatto con gli script della shell fino a quando non sono arrivati.

Concordo sul fatto che sono più leggibili. Ma ci sono altri vantaggi rispetto agli script della shell oltre a essere leggibili?

Risposte:


56

Un linguaggio specifico del dominio fa una grande differenza nella quantità di codice che scrivi. Ad esempio, potresti sostenere che non c'è molta differenza tra:

chmod 640 /my/file

e

file { "/my/file":
    mode => 640,
}

ma c'è una grande differenza tra questi:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

e

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

Cosa succede se la wget fallisce? Come lo gestirà la tua sceneggiatura? E cosa succede se nel tuo script c'è qualcosa che richiede $ FILE per essere lì con i contenuti corretti?

Si potrebbe obiettare che si potrebbe semplicemente inserire echo "Hello world" > $FILElo script, tranne che nel primo esempio lo script deve essere eseguito sul client, mentre il pupazzo compila tutto questo sul server. Quindi, se cambi il contenuto, devi solo cambiarlo sul server e lo cambia per tutti i sistemi su cui vuoi metterlo. E il burattino gestisce le dipendenze e trasferisce automaticamente i problemi.

Non c'è paragone: strumenti di gestione della configurazione adeguati consentono di risparmiare tempo e complessità. Più si tenta di fare, più script di shell sembrano inadeguati e maggiore sarà lo sforzo che si risparmia facendolo con le marionette.


9
@Paul Gear, è una semplificazione eccessiva affermare che gli strumenti di gestione della configurazione sono la strada da percorrere a lungo termine. Ad esempio, utilizzando AWS uno script di shell può creare il server da zero, eseguire alcuni test e, una volta verificato che le installazioni di AWS sono corrette, creare un'immagine. Quindi è possibile distribuire questa immagine in un ambiente di anteprima o di gestione temporanea per ulteriori test, una volta convalidata l'immagine è adatta ai propri scopi, quindi si passa alla produzione. Gli strumenti di gestione della configurazione non aiutano affatto in questo scenario.
Derek Litz,

Ora se vuoi gestire centinaia di server dedicati che le persone usano quotidianamente (e hai poco controllo su ciò che fanno, erroneamente o no), è lì che dovrebbero essere utilizzati gli strumenti di gestione della configurazione.
Derek Litz,

6
Questo non è un esempio molto convincente. Potrei iniziare con wget e poi non finirei in uno stato strano. Il file è come una transazione che verrà ripristinata se uno dei passaggi non riesce?
PSkocik,

33

Questa sarà un'opinione impopolare, ma i sistemi di gestione della configurazione non sono necessariamente migliori. A volte semplice è davvero il migliore.

Esiste una curva di apprendimento definita e un sovraccarico amministrativo associato al sistema di configurazione scelto. Dopotutto stai introducendo una dipendenza. Come con qualsiasi automazione, è necessario anche prestare attenzione al mantenimento della sicurezza nelle configurazioni distribuite.

Ho avuto solo un paio di casi in cui abbiamo implementato la gestione della configurazione e si è bloccato. Fu sempre quando c'erano un gran numero di sistemi con configurazione ripetitiva e necessità di eseguire implementazioni configurabili di cookie cutter.


10
Quando il costo di gestione dell'ambiente è così grande che la gestione dell'automazione è davvero più economica. Se è più semplice scriptare le modifiche gestite in Git o impostare le cose in un multiplexer ssh, lo facciamo. La cosa più importante per me è che monitoro i sistemi e verifico che tutto funzioni come previsto. Finché sono avvisato quando qualcosa è configurato male, non è così importante come viene configurato.
Kenchilada,

10
@ewwhite "quando decidi di automatizzare o no" xkcd.com/1205
MikeyB

3
Strumenti più moderni come Ansible hanno un dispendio di dispiegamento / gestione notevolmente inferiore rispetto a quello di Chef o Puppet, che richiede dipendenze scarse o assenti (Ansible in particolare è senza agenti). Questo abbassa davvero il livello di adozione.
GomoX,

2
@ewwhite Automatizza quando vuoi per la produttività personale. Impari automatizzando, non impari svolgendo compiti banali. Apprendimento = aumento della produttività e miglioramento iterativo. L'automazione si combina con questo per produrre più aspetti positivi. È una palla di neve positiva anziché negativa. Progresso tecnico vs debito tecnico.
Derek Litz,

2
@ABB No, ciò non è implicito. Non menziono nemmeno gli script di shell, cito l'automazione come pratica generale. Puoi automatizzare le cose con gli script di shell e apprendere l'astrazione degli script invece di fare le cose manualmente, il che non solo ti farà risparmiare il tempo di fare di nuovo quell'attività, ma eviterà errori. Inoltre, dovresti essere in grado di scrivere il tuo prossimo script un po 'meglio dell'ultimo. Una palla di neve positiva ... Tuttavia, se sei un esperto nella scrittura di script e non stai scrivendo qualcosa che eseguirai di nuovo, non ti aiuterà a imparare o a risparmiare tempo in alcun modo.
Derek Litz,

23

Hai risposto alla tua domanda ...

L'automazione sta diventando più scalabile e formalizzata . Oggi Puppet e Chef sono considerati standard (controlla gli annunci di lavoro ).

Script di shell di ciottoli-insieme hanno il loro posto, ma sono non scalabile nel contesto del movimento DevOps. La leggibilità è parte di questo.


7
Gli script di shell sono in qualche modo meno formalizzati? La citazione di annunci di lavoro rende un argomento convincente? E un devops è un vero peccato, perché non è sfruttato come sviluppatore. Il collegamento non dice nulla sulla scalabilità. L'affermazione che gli script di shell non sono scalabili? Penso che Puppet sia interessante, ma non necessariamente per i motivi della risposta.
Acumenus,

Le offerte di lavoro riflettono il mercato reale per competenze specifiche. Sì, l'utilizzo della gestione della configurazione per lo scopo previsto è più scalabile, più robusto e più facile da documentare rispetto agli script di shell. Sono stato in molti ambienti e la maggior parte degli script che vedo non sono costruiti in un modo che si consideri "qualità di produzione" e organizzato per gestire le eccezioni. Vedi la risposta accettata per capire il perché.
ewwhite,

1
"E uno sviluppatore è un vero peccato, perché non è sfruttato come sviluppatore." Questo semplicemente non è vero. DevOps è una specializzazione di sviluppo, proprio come lo sviluppo Web. Si applicano ancora i modelli e le pratiche di sviluppo del software. Dovresti leggere su DevOps.
Chaim Eliyah,

13

Chef rende molto più semplice la gestione e la versione della configurazione di un'infrastruttura complessa, in particolare in qualsiasi tipo di ambiente cloud, anziché dover eseguire manualmente ftp o scp di un sacco di script di shell organizzati in modo non standardizzato. A seconda di quante dipendenze devi gestire, le dimensioni di questa vincita possono variare notevolmente, rendendo la decisione di passare a una soluzione CM non ovvia per molte persone.

Il vero vantaggio (spesso non celebrato) dello Chef è l' idempotenza . Essere in grado di essere certi dello stato di una risorsa indipendentemente dalla combinazione di ricette eseguite con interessi sovrapposti è un enorme vantaggio rispetto alla configurazione degli script della shell. Se disponi ora di script di shell per la configurazione, chiediti quanti di essi possono essere eseguiti più volte senza conseguenze indesiderate / indesiderate?

Una soluzione CM adeguata aiuta a garantire il successo su vasta scala semplificando l'automazione multipiattaforma e la collaborazione in team. Mentre è possibile realizzare tutto ciò con un gruppo ben organizzato, adeguatamente gestito, con versione di script di shell; devi chiederti "perché". Chef / Puppet e tecnologie simili sono nate perché un gruppo di talentuosi SysOps erano stanchi di dover risolvere questi stessi problemi più e più volte e hanno deciso di darci un'opzione migliore.

Pezzi chiave:

  • idempotence
  • Facilità di gestione delle dipendenze (versioning)
  • Organizzazione standardizzata (accettata a livello di settore)
  • Astrazione per separare le attività di configurazione del server dai dettagli a livello di sistema
  • Capacità di sfruttare la conoscenza della comunità (che è garantito per abbracciare tutti i principi di cui sopra)

3
L'idempotenza è quasi impossibile con ss. Le dipendenze sono gestite bene da yum / apt, ecc. L'accettazione è irrilevante. La conoscenza della comunità esiste per ss. Accetto, tuttavia, che non sia necessario copiare su un mucchio di script, e anche configurare i sistemi centralmente, sono entrambi utili. Ho sentito che le marionette richiedono un agente lato client.
Acumenus,

10

I moderni strumenti di gestione della configurazione come Puppet e Chef consentono di definire lo stato di un sistema invece di preoccuparsi delle attività necessarie per ottenere un server configurato.

Ad esempio, il comando chmod presuppone che il file esista, l'utente che possiede il file esiste, che le directory siano state create e così via. Pertanto, la tua sceneggiatura deve considerare tutti questi prerequisiti.

Gli strumenti di gestione della configurazione basati sullo stato sono più semplici: ti importa solo che il file abbia le autorizzazioni corrette. Come ciò è ottenuto è il problema dello strumento.


1
In realtà il mio chmodnon presuppone che il file esista perché il file è stato creato o testato per l'esistenza dallo script.
Acumenus,

9

Se i server sono usa e getta per te o se hai motivo di resistere più di un paio alla volta, un sistema CM completo soddisferà molto meglio le tue esigenze rispetto a una serie di script di shell.

Se le tue esigenze di costruzione sono modeste (o ti piace creare artigianalmente artigianalmente server per il commercio equo e solidale biologici), allora mantienilo semplice.

Personalmente, dopo aver ampiamente utilizzato Chef in un concerto passato, ho provato a "mantenerlo semplice" in questo concerto, ma mi mancavano davvero le primitive, le astrazioni e il potere che lo Chef forniva. Anche se arrivi a una situazione in cui potresti ottenere ciò di cui hai bisogno da un paio di comandi shell, puoi semplicemente eseguirli con un blocco 'command', inserendo i tuoi comandi shell esattamente come li scriveresti nella shell.

Detto questo, puoi eseguire Chef senza un server (chef-solo) e sono abbastanza sicuro che Puppet abbia un analogo, in cui puoi ancora sfruttare i libri di cucina e le ricette degli altri senza eseguire un server centrale.

Un altro vantaggio è la comunità: ci sono molte persone (molte delle quali saranno più intelligenti e / o più esperte di te). Personalmente lo adoro quando qualcun altro ha svolto il mio lavoro per me, spesso più ampiamente di quanto avrei fatto.


1

Ho creato un framework di automazione dei server basato su script shell: https://github.com/myplaceonline/posixcube

Sono sicuro di non essere il primo a realizzare questo tipo di progetto, ma non sono riuscito a trovare qualcosa del genere adatto alle mie esigenze, quindi ho pensato che altri lo avrebbero trovato utile. Ho avuto solo esperienza con Chef, ma quando ho iniziato a dare un'occhiata a Ansible e ad altri, volevo dare un'occhiata agli script di shell e mi piace il risultato finora.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.