Gestione della configurazione per "amministratori multipli a server singolo"


9

Abbiamo creato un server che esegue l'infrastruttura per una piccola associazione. Finora, abbiamo provato a gestire la configurazione con Ansible, ma non è stato un grande successo. Forse stiamo sbagliando.

In linea di principio, l'idea è che questo server rimarrà solo per la maggior parte del tempo, con le persone che aggiungono o cambiano le cose una volta su una luna blu. Ciò rende cruciale che tutto ciò che è configurato e in esecuzione sul server sia ben documentato e chiaro, poiché le persone che non amministrano frequentemente il sistema sono destinate a perdere la visione d'insieme (per non parlare dei dettagli). Inoltre, nel tempo, la composizione del gruppo di persone che amministrerà questo server cambierà (man mano che le persone escono e si uniscono al "comitato").

Abbiamo iniziato con un'installazione pulita, aggiungendo ruoli in ansible ogni volta che volevamo creare qualcosa (nginx, phpfpm, postfix, firewall, sftp, munin, ..). Forse a causa della nostra inesperienza, ovviamente non siamo mai in grado di scrivere una serie di attività rispondibili esattamente come ne abbiamo bisogno in una sola volta, anche perché la configurazione è un po 'un processo di prova ed errore. Ciò significa che, in pratica, in genere configuriamo prima qualsiasi servizio desideriamo eseguire sul server , quindi traduciamo in attività rispondibili. Puoi vedere dove sta andando. Le persone dimenticano di testare il compito, o hanno paura di farlo a rischio di spezzare le cose, o peggio: dimentichiamo o trascuriamo di aggiungere cose per rispondere.

Oggi abbiamo poca fiducia che la configurazione ansible rifletta effettivamente ciò che è configurato sul server.

Attualmente vedo tre problemi principali:

  • È difficile (leggere: non abbiamo un buon modo per) testare le attività rispondenti senza rischiare di rompere le cose.
  • Aggiunge ulteriore lavoro per capire prima la configurazione desiderata, quindi capire come tradurla in attività rispondibili.
  • (Idealmente) non lo usiamo abbastanza frequentemente per creare familiarità e routine.

Una considerazione importante qui è che per qualsiasi cosa finiamo per fare, dovrebbe essere facile per i nuovi arrivati ​​imparare le corde senza un sacco di pratica.

Esiste un'alternativa praticabile che fornisce ancora alcune garanzie e controlli (paragonabile all'unione dei file Ansible in alcuni master) che "configura le cose e annota ciò che hai fatto" non riesce a fornire?

EDIT: Abbiamo preso in considerazione l'impegno /etca git. Esiste un modo ragionevole per proteggere i segreti (chiavi private, ecc.) In quel modo, ma in qualche modo avere ancora il repository di configurazione esterno al server?

Risposte:


10

È sufficiente creare una VM di prova / gestione temporanea che è possibile utilizzare per convalidare le modifiche. Il tuo attuale metodo per eseguire manualmente le modifiche prima è irrimediabilmente rotto e destinato a fallire. Tu e il tuo team dovete impegnarvi a utilizzare CM in modo corretto e in parte è disponibile un sistema di test. Anche solo una VM vagabonda locale sarebbe sufficiente.

Questo non solo aiuterà a testare le nuove modifiche, ma fungerà anche da banco di prova per i nuovi dipendenti (o per i dipendenti più anziani che non usano il sistema da un po 'di tempo) per familiarizzare con la propria configurazione.

Per quanto riguarda mantenere / etc / in git: no, non farlo. Quella directory è solo una piccola parte di ciò che Ansible sta cambiando e avere git in atto incoraggerà solo le persone a fare cambiamenti locali.

Tieni i tuoi playbook rispondibili in git. Prendi in considerazione la possibilità di limitare le autorizzazioni in modo tale che solo tu puoi applicare le modifiche rispondenti al server live. Altri possono inviare richieste pull con le loro modifiche, che puoi rivedere e unire in master se appropriato.


Bene, questo è lo scenario ideale. Capisco quello. Il fatto è che non siamo un'azienda e non ci sono persone che lavorano a tempo pieno. Forse ho chiarito in modo insufficiente questa scala. Ogni parte aggiuntiva (come un file vagabondo) aggiunge complessità che dovrebbe essere trasmessa, ed eseguendo due configurazioni (ovvero un sistema di test in cui cose come l'automazione di Letencrypt devono essere derise) non aiuta la semplicità.
Joost

1
Bene, hai chiesto come risolvere i tuoi problemi e ho dato la mia risposta. Quanto sopra è esattamente come facciamo le cose nella mia azienda e funziona molto bene. Sì, ci sono costi aggiuntivi in ​​termini di spazio del server e tempo richiesto per il test, ma ne valgono la pena perché abbiamo un livello molto elevato di garanzia che in pochi minuti potremmo ricostruire uno qualsiasi dei nostri server, se necessario.
SEE

3
Fondamentalmente, questo è davvero un problema culturale e di risorse, non un problema tecnico. Non ti sei impegnato ad utilizzare la gestione della configurazione. Non importa se sei un'azienda. Stai chiedendo aiuto su come fare le cose correttamente, e avere un ambiente di stadiazione è parte di questo.
SEE

3
IMHO, sì, dovresti impegnarti. Tuttavia, se riesci a convincere o meno i tuoi colleghi è un'altra domanda. Non esiste un modo leggero per farlo che non richiede un certo livello di intenzionalità da parte di chi gestisce il server. Dei moderni sistemi CM, Ansible è di gran lunga il più facile da accelerare. È cosa vuole tenere traccia delle modifiche del server nel corso del tempo. L'unico modo per farlo in modo affidabile è usare CM.
SEE

4
@ThomWiggers Presumo che voi due siete nella stessa squadra da quando avete usato "noi". OK, hai chiesto come farlo correttamente. Ho dato una risposta. O vuoi farlo correttamente o no. Fare CM correttamente richiede tempo, denaro e intenzionalità. Se hai requisiti come procurarti e distribuire certificati tramite LE, allora alzati in piedi una macchina virtuale da $ 5US / mese con Digital Ocean e usala per i test. Diamine, potresti anche semplicemente distribuirlo su richiesta quando vuoi testare le modifiche e poi ucciderlo.
SEE

6

Forse a causa della nostra inesperienza, ovviamente non siamo mai in grado di scrivere una serie di attività rispondibili esattamente come ne abbiamo bisogno in una sola volta, anche perché la configurazione è un po 'un processo di prova ed errore. Ciò significa che, in pratica, in genere configuriamo prima qualsiasi servizio desideriamo eseguire sul server, quindi traduciamo in attività rispondibili.

Mentre ci sono altri problemi (come non avere un ambiente di test), puoi fare un grande miglioramento non facendo questo .

Uno degli obiettivi principali di Ansible è quello di essere idempotente , il che significa che eseguire il tuo playbook più volte non dovrebbe cambiare nulla (a meno che tu non abbia cambiato i giochi). Pertanto, quando sto configurando un nuovo software, i miei passi sono:

  1. Apporta modifiche alle attività Ansible.
  2. Esegui il playbook.
  3. Esaminare il sistema e, se non è corretto, tornare al passaggio 1.
  4. Commetti le mie modifiche.

Se non pensi di scrivere la cosa corretta la prima volta in Ansible, scrivila comunque e itera su di essa fino a quando è corretta, proprio come qualsiasi altro codice. Ciò riduce notevolmente la possibilità di dimenticare di Ansiblize alcune modifiche apportate, poiché tutte le modifiche apportate erano già in Ansible ad un certo punto durante il processo di sviluppo.


Sì, questo è un ottimo consiglio. In questo modo, e garantire che sia sempre possibile riportare il server in uno stato noto è molto liberatorio - se le cose vanno a sud, basta annotare il server e ridistribuire.
SEE

Bene, sono d'accordo che questa è una via di mezzo molto solida tra dove siamo ora e dove dovremmo essere. Certo, è così che abbiamo iniziato. Suppongo che il motivo principale per cui ci siamo spostati dove siamo ora è che il passaggio 2 stava facendo sì che l'intero ciclo impiegasse troppo tempo. È possibile che stessimo sbagliando i playbook. Ora che siamo diventati un po 'più esperti nello scrivere attività Ansible, forse vale la pena riprovare, però. Nella tua esperienza, quanto tempo richiederebbe un ciclo completo e con quale frequenza si ripeterebbe? Mi rendo conto che qualsiasi numero si baserà su tutti i tipi di ipotesi ..
Joost

2
Un problema diverso che ho riscontrato con questo processo iterativo si verifica quando si scrive un'attività che apporta modifiche, apporta le modifiche al server, scopre che le modifiche sono errate, aggiorna l'attività e riapplica il playbook. Ora il server contiene una combinazione di due serie di modifiche: quelle della prima iterazione dell'attività e quelle della seconda. Di solito la seconda iterazione sovrascriverà la prima, ma non necessariamente sempre. Esiste un modo ragionevole per "ripulire" piuttosto che 1) SSH manualmente per annullare l'operazione, o 2) a partire da un'installazione pulita ogni volta?
Joost

Inoltre, il controllo del server spesso non è banale se ne hai solo uno
Thom Wiggers il

"Nella tua esperienza, quanto tempo richiederebbe un ciclo completo e con quale frequenza si ripeterebbe?" - Ho iniziato a utilizzare Ansible a gennaio; verso giugno sono arrivato al punto in cui sto eseguendo più rapidamente l'intero processo in Ansible che a mano, per la maggior parte delle attività. Il tempo specifico ovviamente dipende dal progetto, da pochi minuti a qualche settimana (per alcuni software particolarmente scontrosi). Se scopri che l'esecuzione del playbook stesso ti sta rallentando, potresti voler esaminare l'uso dei tag per eseguire solo un sottoinsieme durante i cicli di iterazione.
Boicottaggio SE per Monica Cellio,

0

Ansible ha un tempo di accelerazione prima di superare il precedente livello di produttività, ma una volta fatto lo stato del sistema è facile da assicurare. Le tue pratiche sembrano fuori sincrono con i tuoi obiettivi finali. Puoi essere produttivo con un set di strumenti CM, pur mantenendo solide pratiche ingegneristiche, ma ci vuole tempo per strutturarlo correttamente. Stai essenzialmente scambiando efficienza e facilità di implementazione, per stabilità e scalabilità aziendale. Allo stesso modo in cui un programmatore professionista esperto non scrive brutti hack, le conseguenze superano sempre i benefici.

Per i principianti potresti avere troppi cuochi, senza una chiara proprietà, se così si aspetta una tragedia dei beni comuni. Ogni priorità aziendale supererà ogni volta i problemi di ingegneria del sistema, a meno che non sia ampiamente disinnescata e ciò che rimane lasciato si riflette direttamente sull'ingegnere responsabile.

Un set di strumenti CM non è in grado di essere progettato dagli amministratori, questo è ciò che ho appena realizzato. Possono riutilizzare il lavoro esistente o POSSIBILMENTE estendere su una base solida, ma anche in questo caso richiederebbe un oneroso carico di applicazione delle pratiche. Ciò che un ingegnere può fare, semplicemente NON è ciò che un amministratore può fare. Molti concetti in Ansible sono quasi gli stessi di quelli in una base di codice, puoi insegnare ad un pitone Admin e aspettarti risultati competenti? No, sicuramente no, mi aspetterei un lavoro di hacking, quindi è necessario rendere l'attività abbastanza strutturata in modo che un lavoro di hacking sia sopportabile.

Quindi è necessario impostare le cose per il successo, progettare soluzioni per punti di amministrazione non necessaria. Scambia la complessità dei sistemi di basso livello per cose che un amministratore potrebbe effettivamente fare con successo. Un set di strumenti CM NON ti salverà da disallineamenti architettonici o di progettazione.

Quindi l'ordine è soggetto a modifiche, ovviamente perché l'implementazione dipende da quale percorso è meno dirompente per il tuo stato attuale.

  1. Spostare qualsiasi lavoro di sistema relativo al flusso di lavoro correlato al business in un rundeck dedicato.

  2. Suddividere le attività sulla scatola, potresti avere due o più scatole in una in questo momento.

  3. Reimplementa il tuo CM in un modo più strutturato e segui le migliori pratiche rispondibili, i libri di gioco che rappresentano oggetti NON funzioni o ruoli. Ogni sistema dovrebbe essere descritto in un gioco.

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.