GNU/Linux >> Linux Esercitazione >  >> Linux

8 suggerimenti per un'automazione affidabile del sistema Linux

La base di questo elenco sono molteplici anni di esperienza nel supporto dell'automazione per il team di runtime dei container a monte (podman, buildah, skopeo e così via). Non mi prendo il pieno merito, poiché molti di questi suggerimenti si basano su un amalgama di esperienze evolute e contributi individuali di una vasta comunità di utenti e sviluppatori.

La maggior parte degli elementi seguenti può essere ricondotta a un unico principio:elimina o riduci la complessità . Questo concetto si basa su un'applicazione composta della Legge di Murphy :Più "cose ​​fragili" hai, più è probabile che si presenti Murphy. Ecco otto modi per evitare questi incontri casuali.

[ Ai lettori è piaciuto anche: Presentazione del nuovo Ansible Automation Hub ]

1. Riduci le dipendenze di rete

Riduci le dipendenze di rete, in particolare su servizi di terze parti su cui non hai il controllo. Inoltre, i servizi di rete di prima e seconda parte dovrebbero essere considerati "se possibile da evitare". In realtà ci sono due aspetti di questa raccomandazione:

  1. Da tutti i punti di vista, il networking è un sistema molto complesso di componenti correlati e relazioni in tempo reale. In generale, tutti questi devono funzionare in modo quasi impeccabile da un'estremità all'altra, altrimenti potresti avere una brutta giornata.
  2. Ancora una volta, in generale, i guasti di rete sono spesso temporanei e dipendono dal tempo (tutti vogliono che vengano risolti rapidamente). Ciò può rendere incredibilmente difficile il debug a posteriori. Anche con una registrazione estesa, gli effetti inosservati potrebbero iniziare la tua brutta giornata.

2. Riduci le dipendenze software

Ove possibile, riduci le dipendenze software, in particolare su librerie di terze parti. Ciò include sia l'argomento principale dell'automazione che qualsiasi codice di automazione condiviso. A meno che non blocchi la versione di ogni singolo componente su e giù per lo stack, rischi di rompersi a causa di comportamenti imprevisti o modifiche dell'API da qualche parte. La situazione è leggermente migliore quando controlli il codice incluso ma presenta comunque un rischio.

Nota :Riconosco che questo suggerimento può essere abbastanza controverso e di certo non ha senso in molte situazioni. Consideralo un promemoria "pensaci due volte", soprattutto quando ti ritrovi a volere una libreria per inserire una semplice funzione.

3. Organizza i lavori di automazione

Disporre i lavori di automazione in ordine decrescente di conseguenza dell'errore. In altre parole, cerca di catturare gli oggetti con il maggiore impatto negativo il prima possibile. L'idea qui è di risparmiare risorse (compreso il tempo) per "Whoopsie" ad alto impatto e basso costo di rilevamento. Alcuni esempi di test di integrazione continua (CI) VCS:

  1. I tuoi servizi di rete di terze parti sono raggiungibili? Ad esempio, possono essere sottoposti a ping e i loro certificati SSL vengono convalidati?
  2. Il tuo fornitore o il codice incluso corrispondono effettivamente all'elenco di requisiti documentato e configurato?
  3. Qualcuno ha accidentalmente lasciato un commento "FIXME" nel codice appena impegnato?
  4. Sono stati firmati tutti i nuovi commit?
  5. Le modifiche corrispondono al contesto di esecuzione, ad esempio, modifiche non documentate durante il test di rilascio o documentazione/aggiornamenti di test mancanti con una modifica del codice.

Nel tempo, l'effetto di questo flusso di lavoro è che i controlli importanti riceveranno la massima attenzione e la manutenzione più affidabile (poiché i guasti tendono a trattenere l'intero treno). A loro volta, gli sviluppatori saranno anche in grado di pedalare più velocemente. Ad esempio, non aspetteranno molto solo per scoprire di aver sbagliato a scrivere il proprio nome.

4. Mantieni i lavori brevi

Mantieni i lavori il più brevi possibile e in "blocchi" facilmente ripetibili. Ciò dipenderà in gran parte dal software di orchestrazione, ma la maggior parte delle app consente più fasi di esecuzione. Utilizzando un altro esempio di test CI, se devi eseguire test di unità, integrazione e sistema (in quest'ordine), evita di eseguirli tutti insieme, uno dopo l'altro, in un unico script. In questo modo, se il passaggio di integrazione ha esito negativo, gli utenti non sono obbligati a eseguire nuovamente gli unit test. Ciò migliora l'affidabilità non rieseguendo operazioni ridondanti, invitando inutilmente Murphy a rientrare nella trasmissione dell'automazione.

5. Evita le operazioni non essenziali in fase di esecuzione

Evita le operazioni non essenziali (come l'installazione o la configurazione) in fase di esecuzione. Prepara invece i tuoi ambienti di esecuzione con tutti i bit necessari in anticipo. Questo non solo rende le cose più efficienti, ma aiuta anche ad aderire ad altri suggerimenti in questo articolo. Consente inoltre l'osservazione e il test dell'ambiente pre-costruito in fase di compilazione. Se i tuoi ambienti sono condivisi tra lavori con requisiti diversi, prendi in considerazione la possibilità di memorizzare nella cache quei componenti/pacchetti all'interno dell'immagine. L'installazione in fase di esecuzione da una cache locale è molto più sicura e affidabile rispetto a un repository remoto in rete.

6. Usa gli strumenti giusti

Utilizzare gli strumenti di base disponibili per l'attività in questione. Ad esempio, se è necessario verificare i flag binari dopo aver applicato una maschera di bit, non tentare di farlo in uno script bash. Allo stesso modo, se il tuo programma C++ esegue semplicemente una serie di comandi, usa invece bash. Ciò migliora l'affidabilità non esponendo le operazioni a effetti collaterali estranei allo scopo principale del lavoro.

7. Tieni traccia degli errori

Tieni traccia degli errori in base alla frequenza della loro firma. La maggior parte (ma non sempre) delle volte, gli errori di automazione comporteranno la registrazione di alcune indicazioni da qualche parte. Identificare e classificare (ad es. per nome della richiesta) questi in modo da poter mantenere un registro centralizzato dell'occorrenza. Probabilmente questo richiede un bel po' di lavoro per essere portato a termine, probabilmente richiedendo di apprendere e interfacciarsi con più servizi e API. Tuttavia, con i risultati ordinati in base alla frequenza delle firme, individuerai rapidamente quali problemi interessano il maggior numero di persone. Questi elementi dovrebbero ricevere la massima attenzione e avranno il maggiore impatto sull'affidabilità dell'automazione.

8. Usa i commenti in modo efficace

Commenta perché non come . Supponiamo che qualsiasi lettore del tuo codice possa determinare il modo in cui funziona. Non possono determinare cosa stavi pensando tu (l'autore) quando hai scritto il codice. L'automazione coinvolge molte parti mobili. Alcune delle relazioni potrebbero non essere ovvie per un lettore non iniziato. I commenti sono particolarmente utili quando informano sulle relazioni dei componenti.

Ad esempio, considera il seguente commento:

# Default variable value comes from CI unless executed manually.
# Detect this (`$CI == false`) to ensure the user did not leave
# the value blank.

Dovresti facilmente immaginare il codice che adorna, una qualche forma di definizione o convalida di variabili. Inoltre, alludeva a una fonte di informazioni aggiuntiva, "CI" (qualunque cosa significhi nel contesto della sceneggiatura).

Commenti utili come questo non hanno bisogno di adornare ogni riga del tuo script; prenderli di mira. Concentrati sugli oggetti interessati da file o forze esterne (inclusi i bagliori solari). Questi dettagli rendono l'automazione più affidabile assicurando che la "salsa segreta" venga continuamente trasmessa a chiunque sia incaricato di futuri miglioramenti o manutenzioni.

[ Una guida gratuita di Red Hat:5 passaggi per automatizzare il tuo business. ] 

Concludi

Nella maggior parte delle situazioni, sarà impossibile seguire tutti questi suggerimenti. Hanno lo scopo di servire come linee guida per il compromesso quando implementazioni alternative sono ragionevoli. In caso contrario, per servire al meglio le parti interessate, a volte sarà necessario violare alcuni di questi principi. Tuttavia, altri (come scrivere buoni commenti) tenderanno ad avere un effetto sottile ma costante nel tempo. Sarò il primo ad ammettere che fare le cose semplicemente è spesso molto più difficile che schiaffeggiare il nastro adesivo. Tuttavia, con il tempo, la maggior parte del nastro adesivo diventa secca e croccante, richiedendo di risolvere nuovamente il problema. Fai un favore a te stesso del futuro, trascorri il tempo a riformulare la semplicità fin dall'inizio.


Linux
  1. 3 consigli per la stampa con Linux

  2. 8 suggerimenti per la riga di comando di Linux

  3. 10 moduli Ansible per l'automazione del sistema Linux

  4. Demistificare Ansible per gli amministratori di sistema Linux

  5. 5 suggerimenti avanzati di rsync per gli amministratori di sistema Linux

I migliori comandi Linux per gli amministratori di sistema

Alcuni strumenti utili per gli amministratori di sistema Linux

I 15 migliori emulatori Linux per sistemi Windows

I 20 migliori strumenti di bioinformatica per il sistema Linux

I 10 migliori software di geometria per sistemi Linux

I 15 migliori strumenti di biologia per il sistema Linux