Trade-off tra località e ripetizione

0

Lascia che ti spieghi cosa intendo per località e ripetizione. Il ritaglio corrente di strumenti di gestione della configurazione disgiunge la configurazione da tutto il resto anche quando è un po 'dannoso farlo. Un caso in cui è dannoso è nella configurazione dell'applicazione. Credo che la configurazione dell'applicazione debba risiedere nello stesso repository dell'applicazione stessa anziché in qualche altro repository o in un libro di cucina o in un modulo fantoccio. Meglio ancora l'attuale libro di cucina o il modulo fantoccio dovrebbero essere affiancati all'applicazione e il sistema di compilazione può capire come impacchettare il tutto in modo che il meccanismo di distribuzione possa essere il più semplice possibile.

Un problema con questo set up è che può portare a molte ripetizioni perché molti pacchetti useranno simili o addirittura esattamente gli stessi libri di cucina e burattini degli chef, ma invece di trovarsi in una posizione centrale questi libri di cucina e moduli sono ora duplicato in ogni repository dell'applicazione. La cosa istintiva da fare in questo caso è di scomporre la comunanza e metterla nel proprio repository, ma penso che ciò non sia corretto perché introduce la non-località. Ora per capire come funziona l'applicazione lungo tutto il suo ciclo di vita devi inseguire le dipendenze in qualche altro posto e, a volte, non è chiaro dove questo altro posto sia dovuto alla separazione tra operazioni e sviluppo del prodotto.

Quindi qual è il trade-off corretto qui? Penso che la non località renda le cose più magiche di quanto debbano essere e far rispettare la località porta a ripetizioni inutili.

    
posta davidk01 15.02.2015 - 04:06
fonte

2 risposte

2

Lo chef risolve questo problema utilizzando la gestione delle dipendenze (Berkshelf) e applicando i modelli di libri di cucina . Usando il modello del ricettario Ambiente, sei incoraggiato a conservare il tuo ricettario CON la tua applicazione (e questo NON comporta ricettari duplicati, poiché ogni libreria / base / libri di cucina dipendenti sarà risolta con lo strumento di gestione delle dipendenze.)

Per quanto riguarda la distribuzione delle applicazioni, il tuo ricettario dovrebbe essere in grado di cercare nel tuo repository binario, trovare il pacchetto di installazione, scaricarlo e installarlo. In questo modo puoi separare correttamente le build della tua applicazione e dell'automazione della configurazione.

Ancora più importante, ecco cosa non fare:

  1. Costruisci a mano un'immagine docker e chiamala buona "perché Docker". Fare ciò è tanto pessimo quanto avere dei modelli di VM magici (e, naturalmente, nessuno della tua organizzazione capirà come sono stati costruiti e questo li rende difficili da aggiornare, ecc.). Se utilizzi la containerizzazione, crea le immagini con l'automazione.
  2. Archivia tutto in git-submodules o crea l'intero repository. Assicurati invece di utilizzare la gestione delle dipendenze e di rilasciare versioni con versioni corrette di tutti i tuoi software, inclusa l'automazione della configurazione.
  3. Abuso degli strumenti di gestione delle dipendenze e suddivide il tuo codice in un milione di livelli di astrazione. veramente non ha bisogno di un libro di cucina di base, di base e di base. Basta mantenerlo semplice con pochi strati, se necessario, refactoring come si fa.
  4. Fai finta che la tua soluzione di gestione della configurazione sia uno "script di installazione". Non lo è, è un modo tutto incluso per descrivere lo stato dei tuoi server.
  5. Costruisci il tuo ricettario con la tua applicazione nello stesso processo di creazione. Non si desidera creare nuove build di un'applicazione di grandi dimensioni quando tutto ciò che serve è solo per impacchettare il ricettario. Invece, le build dovrebbero essere in grado di accadere in parallelo, specialmente se hai un team numeroso e distribuito.
risposta data 15.02.2015 - 21:38
fonte
1

Almeno nel caso di Puppet, dovresti Google quanto segue:

  • Puppetfile (come Gemfile ma per Puppet)
  • R10K
  • "repo di controllo"
  • Hiera

La corretta composizione di un repository di controllo che verrà utilizzato da r10k risolverà il 90% o meglio dei problemi che hai menzionato sopra. La tua applicazione personalizzata può quindi essere implementata con un altro modulo Puppet a livello di componenti e essere istanziata con tutti i dati / configurazione appropriati.

Altri strumenti di configurazione hanno strumenti e concetti più o meno simili ma non posso fingere di essere un esperto su di essi.

Per quanto riguarda Docker, potresti rendere la tua implementazione artefatta un'immagine costruita con Puppet piuttosto che un pacchetto distribuito da Puppet, ma alla fine ti imbatterai in problemi simili di fornire impostazioni corrette per il tuo ambiente e poi vedrai che devi aggiungi qualcosa come etcd o Consul o ZooKeeper al mix e ... sì ... è anche complicato.

Spiacente, non posso fornire esempi più dettagliati. Mobile. :)

    
risposta data 15.02.2015 - 18:56
fonte

Leggi altre domande sui tag