Best practice / domande dello chef


48

Uso e amo Puppet. Mi sono trasferito in una nuova società e stanno adottando Chef. Quindi sto cercando di imparare lo Chef ma sto facendo fatica a mettere tutto insieme perché penso ancora in Puppet =)

Queste sono le mie domande:

  • È meglio impostare i ruoli in Ruby DSL, JSON o dalla console di gestione? Perché ci sono molti modi per fare la stessa cosa?
  • Puoi organizzare i libri di cucina in sottodirectory? es: abbiamo un software personalizzato per il quale mi piacerebbe scrivere un ricettario e inserirlo in: chef-repo / ricettari / ourcompanystuff / customsoftwarecookokbook sarebbe una buona pratica?
  • Creo un libro di cucina per ogni tipo di ruolo che specifica cosa fa? Devo che questi libri di cucina includano altri libri di cucina (cioè il libro di cucina per il mio ruolo di server web include il libro di cucina di Apache). Non sono sicuro di come vengano gestite le interdipendenze e l'ereditarietà del ricettario.
  • Esiste qualcosa come il classificatore di nodi esterno di Puppet in modo che i nodi determinino automaticamente i loro ruoli?
  • Sembra che tu possa configurare le cose con il coltello o all'interno della console di gestione o modificare i file JSON? Questo è molto confuso per me perché ci sono così tanti modi di fare le cose, è paralizzante! C'è un motivo per usare l'uno o l'altro? Provenendo da fantoccio sembra che sarebbe facile confondere accidentalmente qualcosa con questi strumenti (cioè lasciare qualcosa fuori)
  • Come posso effettuare automaticamente il provisioning dei nodi con Chef nel mio cluster di sviluppo? Con Puppet accendo una VM che si collega al burattinaio e dà il via a una corsa di marionette e si imposta (il ruolo è determinato dal classificatore di nodi esterno). Come posso farlo con Chef? Installare chef con file pem / rb che lo legano a un server chef, dire manualmente al nodo i suoi ruoli con il coltello o modificarlo nell'interfaccia di gestione e quindi dare il via a una corsa chef-client per configurarsi?

Ho completato i tutorial introduttivi e vedo che hanno tutorial EC2, ma non ho mai usato EC2 quindi sono difficili da seguire per me. A questo punto ho ospitato Chef in esecuzione e sto iniziando a giocare con la configurazione di un singolo nodo. Dove vado da qui? Devo iniziare a guardare i libri di cucina pubblici?

I documenti su Opscode sono ok, ma non così grandi come quelli di Puppet. Ci sono altre buone risorse di Chef che potrei perdere nelle mie ricerche?


5
Troppe domande in un solo post. Valuta di dividere ognuno nel suo. È migliore per la comunità nel suo insieme e ti darà anche risposte migliori e più dettagliate.
Wesley,

Risposte:


84

Modifica Questa domanda e risposta hanno anni. Le migliori pratiche definitive vengono insegnate tramite i moduli di formazione personalizzati di Learn Chef Rally prodotti da Chef Software, Inc. La maggior parte della risposta originale è di seguito.

In questa risposta, "Chef" o "chef-cliente" di solito si riferisce a Chef Infra, il prodotto. Opscode rinominato Chef Software, Inc nel 2013 . Ad aprile 2019, Chef ha aperto il codice sorgente di tutti i suoi prodotti, oltre a creare una denominazione coerente del marchio.

Non è chiaro se è meglio impostare i ruoli in ruby ​​DSL, JSON o dalla console di gestione? Perché ci sono molti modi per fare la stessa cosa?

Aggiornamento 2019 : i file delle politiche sono il miglior flusso di lavoro da utilizzare. I ruoli sono considerati una pratica inferiore e Chef Software, Inc. consiglia di migrare a Policyfile.

Esistono diversi modi per fare la stessa cosa perché le persone hanno flussi di lavoro diversi. Scegli il flusso di lavoro più adatto al tuo ambiente. Lasciami spiegare quali sono le differenze in modo da poter prendere una decisione informata.

Il Ruby DSL per ruoli esiste per rendere più semplice la scrittura di ruoli senza conoscere la sintassi di JSON. È un modo semplice per iniziare con i ruoli. Dopo aver apportato le modifiche, le carichi su Chef Server con il coltello.

knife role from file myrole.rb

Ciò converte il ruolo in JSON e lo memorizza sul server. Se hai un ambiente che impone il repository Chef in cui i tuoi ruoli vivono come fonte di verità, questo funziona abbastanza bene.

JSON è ciò che memorizza Chef Server, quindi puoi anche modificare JSON direttamente nella console di gestione. Richiede più campi rispetto al Ruby DSL affinché Knife lo riconosca correttamente per il caricamento. Tali dettagli sono nascosti in una certa misura tramite l'interfaccia utente Web.

Lo svantaggio dell'utilizzo della console Webui / di gestione per la modifica dei ruoli è che non si trovano nel sistema di controllo della versione locale a meno che non vengano scaricati dal server. Puoi farlo con il coltello:

knife role show myrole -Fj

Il -Fjcoltello dice a "visualizzare in formato JSON". Puoi reindirizzare l'output su un file .json, se lo desideri.

Aggiornamento di anni fa : ci sono ulteriori comandi di coltello per lavorare con i file nel repository chef locale. Attualmente questi comandi supportano solo file in formato JSON. È aperta una community RFC che affronterà l'aggiunta del supporto per Ruby DSL per questi plugin. Ecco un breve riepilogo del flusso di lavoro.

Controlla le differenze di contenuto tra il server e il file locale.

knife diff roles/myrole.json

Carica un file di ruolo in formato JSON. Il roles/percorso è obbligatorio Questo viene mappato allo stesso endpoint API sul server.

knife upload roles/myrole.json

Scarica il contenuto dal server sovrascrivendo il contenuto del file nel repository.

knife download roles/myrole.json

Questi comandi provengono da knife-essentials, che è integrato nel pacchetto client chef.

Puoi organizzare i libri di cucina in sottodirectory? Ad esempio, abbiamo un software personalizzato per il quale mi piacerebbe scrivere un ricettario e inserirlo in: chef-repo / ricettari / ourcompanystuff / customsoftwarecookokbook sarebbe una buona pratica?

No. Knife si aspetta dove dovrebbero vivere i libri di cucina perché utilizza un'API per caricare libri di cucina sul server. Questo è impostato knife.rbcon cookbook_path. Nelle versioni precedenti di Chef Infra, è possibile specificare una serie di percorsi per i libri di cucina, ma questo è obsoleto perché richiedeva maggiore manutenzione e creava confusione per gli utenti.

Per convenzione nominiamo i libri di cucina specifici per cliente o per sito con il nome prefissato nella directory dei libri di cucina. Per il tuo esempio, sarebbe:

chef-repo/cookbooks/ourcompany_customsoftware

Potrebbero esserci più libri di cucina diversi per "la nostra azienda" a seconda di ciò che stai facendo.

Ulteriore riferimento:

Creo un libro di cucina per ogni tipo di ruolo che specifica cosa fa? Devo che questi libri di cucina includano altri libri di cucina (cioè il libro di cucina per il mio ruolo di server web include il libro di cucina di Apache). Non sono sicuro di come vengano gestite le interdipendenze e l'ereditarietà del ricettario.

Non esiste una relazione diretta o dipendenza tra ruoli e libri di cucina.

I ruoli hanno un elenco di esecuzione, che specifica le ricette e altri ruoli che dovrebbero essere applicati a qualsiasi nodo che ha quel ruolo. I nodi dispongono di un elenco esecuzioni che può contenere ruoli o ricette. Quando Chef viene eseguito sul nodo, espanderà l'elenco delle esecuzioni per tutti i ruoli e le ricette che include, quindi scaricherà i libri di cucina richiesti. In un elenco esecuzioni nodo:

recipe[apache2]

Lo chef scaricherà il apache2ricettario per il nodo in modo che possa applicare questa ricetta.

Potresti avere un libro di cucina specifico per un ruolo nella tua infrastruttura. Più comunemente avrai libri di cucina che servono per impostare determinati tipi di servizi come apache2, mysql, redis, haproxy, ecc. Quindi li inseriresti in ruoli appropriati. Se si dispone di elementi specifici dell'applicazione personalizzati che devono accadere per svolgere un ruolo, è possibile scrivere questo in un libro di cucina personalizzato (come ho fatto riferimento sopra).

Ulteriore riferimento:

Esiste qualcosa come il classificatore di nodi esterno dei pupazzi in modo che i nodi determinino automaticamente i loro ruoli?

"Sì." Chef Infra Server esegue automaticamente la memorizzazione dei dati del nodo (in JSON) e il server indicizza automaticamente tutti i dati del nodo per la ricerca.

Ulteriore riferimento:

Sembra che tu possa configurare le cose con il coltello o all'interno della console di gestione o modificare i file JSON? Questo è molto confuso per me perché ci sono così tanti modi di fare le cose, è paralizzante! C'è un motivo per usare l'uno o l'altro?

Chef Infra Server ha un'API RESTful che invia e riceve risposte JSON. Knife e la console di gestione sono interfacce utente per l'interazione con l'API da un punto di vista amministrativo.

Puoi utilizzare lo strumento che preferisci, sebbene la console di gestione non abbia tutte le funzionalità di Knife. La maggior parte delle persone che usano Chef Infra preferiscono l'interfaccia della riga di comando per la potenza e la flessibilità che fornisce, anche le persone che usano Chef Infra su Windows. Inoltre, knifeè uno strumento basato su plug-in che è possibile creare nuovi plug-in per interagire con Chef Infra Server o con altre parti della propria infrastruttura.

Chef Infra è un insieme di librerie, primitive e un'API. Ti dà la flessibilità di creare il sistema di gestione della configurazione che funziona meglio per la tua infrastruttura.

Ulteriori letture:

Come posso effettuare automaticamente il provisioning dei nodi con chef nel mio cluster di sviluppo? Con Puppet accendo una VM che si collega al Puppermatser e dà il via a una sequenza di marionette e si imposta (il ruolo è determinato dal classificatore di nodi esterno). Come posso farlo con lo chef? - Installare chef con file pem / rb che lo legano a un server chef, dire manualmente al nodo i suoi ruoli con il coltello o modificarlo nell'interfaccia di gestione e quindi dare il via a una corsa chef-client per configurarsi?

Ti consigliamo di utilizzare il plug-in coltello bootstrap. Questo è un plugin integrato che viene fornito con il coltello. Lo invochi così:

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

Questo sarà:

  • SSH sul sistema di destinazione (10.1.1.112) come rootutente utilizzando una chiave SSH (è possibile utilizzare SSH come altro utente e quindi utilizzare --sudo).
  • Installa Ruby
  • Installa Chef
  • Crea il file di configurazione Chef per il tuo Chef Server, leggendo la configurazione di knife (.chef / knife.rb).
  • Copia la chiave privata RSA di "convalida", che il nodo utilizzerà per registrarsi automaticamente con Chef Server.
  • Eseguire chef-clientutilizzando la corsa separata da virgola elencata specificata. In questo esempio webserverviene applicato solo il ruolo.

Ciò presuppone che il sistema di destinazione sia stato sottoposto a provisioning, abbia un indirizzo IP e sia possibile SSH come root. A seconda delle politiche locali e del processo di provisioning, potrebbe essere necessario modificare il funzionamento. La pagina bootstrap del coltello sul wiki descrive di più su come funziona.

Knife ha anche plugin per numerosi provider di cloud computing pubblici come Amazon EC2 e Rackspace Cloud. Sono disponibili plug-in per ambienti cloud privati ​​come Eucalyptus e OpenStack. Ci sono anche plugin per VMware, Vsphere e altri. Puoi vedere ulteriori informazioni nella documentazione.

Ulteriori letture:

Ci sono altre buone risorse da chef che potrei perdere nelle mie ricerche?

The Chef Documentation è la principale fonte di documentazione.

Il Imparare Chef Rally è una serie di moduli autoguidati che si può imparare tutto su vari aspetti della Chef Infra, e altri prodotti Chef.

In passato gestivo un blog in cui pubblicavo suggerimenti, trucchi e guide su Chef Infra: http://jtimberman.housepub.org/ . Ho avuto una serie chiamata " suggerimenti rapidi ". A causa delle circostanze della vita reale e di altri impegni, non ho più tempo per mantenere il sito, ma potrei tornare in futuro.

I clienti dello chef possono ottenere aiuto e supporto sul sito di supporto:

La community di utenti Chef è un'ottima fonte di ulteriore aiuto:

Risorse aggiuntive sono disponibili su Chef Software, Inc. sito web di .

Spero che questo possa essere d'aiuto.


2
Questa è una risorsa preziosa, ti preghiamo di collegarti più spesso ad essa.
Pooyan Khosravi,

Qualcosa da aggiungere / aggiornare 7 anni dopo? ;)
Spechal,
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.