GNU/Linux >> LINUX-Kenntnisse >  >> Linux

8 Tipps für eine zuverlässige Linux-Systemautomatisierung

Die Grundlage für diese Liste ist mehrjährige Erfahrung in der Unterstützung der Automatisierung für das Upstream-Container-Runtimes-Team (Podman, Buildah, Skopeo usw.). Ich nehme nicht die volle Anerkennung, da viele dieser Tipps auf einer Mischung aus gewachsener Erfahrung und individuellen Beiträgen einer großen Community von Benutzern und Entwicklern basieren.

Die meisten Punkte unten lassen sich auf ein einziges Prinzip reduzieren:Komplexität beseitigen oder reduzieren . Dieses Konzept basiert auf einer zusammengesetzten Anwendung von Murphy's Law :Je mehr "zerbrechliche Dinge" Sie haben, desto wahrscheinlicher wird Murphy auftauchen. Hier sind acht Möglichkeiten, um diese zufälligen Begegnungen zu vermeiden.

[ Den Lesern gefiel auch: Introducing the new Ansible Automation Hub ]

1. Reduzieren Sie Netzwerkabhängigkeiten

Reduzieren Sie Netzwerkabhängigkeiten, insbesondere von Diensten von Drittanbietern, über die Sie keine Kontrolle haben. Darüber hinaus sollten Netzdienste von Erst- und Zweitanbietern als „nach Möglichkeit zu vermeiden“ angesehen werden. Diese Empfehlung hat eigentlich zwei Aspekte:

  1. Aus jeder Perspektive ist die Vernetzung ein sehr komplexes System zusammenhängender Komponenten und Echtzeitbeziehungen. Im Allgemeinen müssen diese alle von einem Ende zum anderen nahezu fehlerfrei funktionieren, sonst könnten Sie einen schlechten Tag haben.
  2. Ganz allgemein gesprochen sind Netzwerkausfälle oft vorübergehend und zeitabhängig (jeder möchte, dass sie schnell behoben werden). Dies kann das nachträgliche Debuggen unglaublich schwierig machen. Selbst bei umfangreicher Protokollierung können die unbeobachteten Auswirkungen Ihren schlechten Tag beginnen.

2. Reduzieren Sie Softwareabhängigkeiten

Reduzieren Sie nach Möglichkeit Softwareabhängigkeiten, insbesondere von Bibliotheken von Drittanbietern. Dies umfasst sowohl Ihr zentrales Automatisierungsthema als auch jeden gemeinsam genutzten Automatisierungscode. Wenn Sie nicht jede einzelne Komponente auf und ab des Stacks mit einer Versionssperre versehen, riskieren Sie einen Ausfall aufgrund von unerwartetem Verhalten oder API-Änderungen irgendwo. Die Situation ist etwas besser, wenn Sie den enthaltenen Code kontrollieren, aber immer noch ein Risiko darstellen.

Hinweis :Ich gebe zu, dass dieser Tipp ziemlich kontrovers sein kann und in vielen Situationen sicherlich keinen Sinn ergibt. Betrachten Sie es als Mahnung, zweimal nachzudenken, besonders wenn Sie möchten, dass eine Bibliothek eine einfache Funktion enthält.

3. Automatisierungsjobs vereinbaren

Ordnen Sie Automatisierungsjobs in der Reihenfolge absteigender Fehlerfolgen an. Mit anderen Worten, versuchen Sie, die Elemente mit den größten negativen Auswirkungen so früh wie möglich zu fangen. Die Idee hier ist, Ressourcen (einschließlich Zeit) für „Whoopsies“ mit hoher Auswirkung und niedrigen Erkennungskosten zu sparen. Einige Beispiele für VCS Continuous Integration (CI)-Tests:

  1. Sind Ihre Netzwerkdienste von Drittanbietern erreichbar? Können sie beispielsweise angepingt werden und validieren ihre SSL-Zertifikate?
  2. Entspricht Ihr Anbieter oder enthaltener Code tatsächlich der dokumentierten und konfigurierten Anforderungsliste?
  3. Hat jemand versehentlich einen "FIXME"-Kommentar im neu übertragenen Code hinterlassen?
  4. Sind alle neuen Commits signiert?
  5. Stimmen Änderungen mit dem Ausführungskontext überein, z. B. nicht dokumentierte Änderung während des Release-Tests oder fehlende Dokumentations-/Testaktualisierungen bei einer Codeänderung.

Im Laufe der Zeit führt dieser Arbeitsablauf dazu, dass wichtige Kontrollen die größte Aufmerksamkeit und die zuverlässigste Wartung erhalten (da Ausfälle in der Regel den gesamten Zug aufhalten). Im Gegenzug können Entwickler auch schneller radeln. Beispielsweise müssen sie nicht lange warten, nur um herauszufinden, dass sie ihren eigenen Namen falsch geschrieben haben.

4. Arbeitsplätze kurz halten

Halten Sie Jobs so kurz wie möglich und in leicht wiederholbaren "Blöcken". Dies hängt weitgehend von der Orchestrierungssoftware ab, aber die meisten Apps ermöglichen mehrere Ausführungsphasen. Verwenden Sie ein anderes CI-Testbeispiel:Wenn Sie Einheiten-, Integrations- und Systemtests (in dieser Reihenfolge) ausführen müssen, vermeiden Sie es, sie alle zusammen nacheinander in einem einzigen Skript auszuführen. Wenn der Integrationsschritt fehlschlägt, sind Benutzer auf diese Weise nicht gezwungen, die Komponententests erneut auszuführen. Dies verbessert die Zuverlässigkeit, indem redundante Operationen nicht erneut ausgeführt werden und Murphy unnötigerweise wieder in den Automatisierungs-Getriebezug eingeladen wird.

5. Vermeiden Sie unwesentliche Operationen zur Laufzeit

Vermeiden Sie zur Laufzeit unwichtige Vorgänge (wie Installation oder Konfiguration). Bereiten Sie stattdessen Ihre Ausführungsumgebungen mit allen erforderlichen Bits im Voraus vor. Das lässt die Dinge nicht nur effizienter laufen, sondern hilft auch, andere Tipps in diesem Artikel zu beachten. Es ermöglicht auch das Beobachten und Testen der vorgefertigten Umgebung zur Bauzeit. Wenn Ihre Umgebungen von Jobs mit unterschiedlichen Anforderungen gemeinsam genutzt werden, sollten Sie diese Komponenten/Pakete im Image zwischenspeichern. Die Installation zur Laufzeit aus einem lokalen Cache ist weitaus sicherer und zuverlässiger, als auf ein entferntes Repository über das Netzwerk zuzugreifen.

6. Verwenden Sie die richtigen Tools

Verwenden Sie die grundlegendsten Tools, die für die jeweilige Aufgabe verfügbar sind. Wenn Sie beispielsweise binäre Flags nach dem Anwenden einer Bitmaske überprüfen müssen, versuchen Sie nicht, dies in einem Bash-Skript zu tun. Wenn Ihr C++-Programm einfach eine Reihe von Befehlen ausführt, verwenden Sie stattdessen bash. Dies verbessert die Zuverlässigkeit, da der Betrieb keinen Nebeneffekten ausgesetzt wird, die nichts mit dem Hauptzweck des Jobs zu tun haben.

7. Fehler verfolgen

Verfolgen Sie Ausfälle basierend auf der Häufigkeit ihrer Signatur. Meistens (aber nicht immer) führen Automatisierungsfehler dazu, dass irgendwo ein Hinweis protokolliert wird. Identifizieren und klassifizieren Sie diese (z. B. nach Anforderungsnamen), damit Sie eine zentrale Aufzeichnung des Auftretens führen können. Dies erfordert wohl einiges an Arbeit, was möglicherweise erfordert, dass Sie lernen und mit mehreren Diensten und APIs kommunizieren. Anhand der nach Signaturhäufigkeit sortierten Ergebnisse erkennen Sie jedoch schnell, welche Probleme die meisten Menschen betreffen. Diese Elemente sollten die größte Aufmerksamkeit erhalten und die größte Auswirkung auf die Zuverlässigkeit der Automatisierung haben.

8. Kommentare effektiv nutzen

Kommentieren Sie warum nicht wie . Gehen Sie davon aus, dass jeder Leser Ihres Codes feststellen kann, wie er funktioniert. Sie können nicht feststellen, was Sie (der Autor) gedacht haben, als Sie den Code geschrieben haben. Automatisierung umfasst viele bewegliche Teile. Einige der Beziehungen mögen für einen uneingeweihten Leser nicht offensichtlich sein. Kommentare sind besonders nützlich, wenn sie über Komponentenbeziehungen informieren.

Betrachten Sie beispielsweise den folgenden Kommentar:

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

Sie sollten sich den Code, den das schmückt, leicht vorstellen – irgendeine Form der Variablendefinition oder -validierung. Außerdem deutete es auf eine zusätzliche Informationsquelle hin, "CI" (was auch immer das im Kontext des Skripts bedeutet).

Hilfreiche Kommentare wie dieser müssen nicht jede Zeile Ihres Skripts schmücken; Ziel sie. Konzentrieren Sie sich auf Gegenstände, die von externen Dateien oder Kräften (einschließlich Sonneneruptionen) betroffen sind. Diese Details machen die Automatisierung zuverlässiger, indem sichergestellt wird, dass die "geheime Sauce" kontinuierlich an jeden weitergegeben wird, der mit zukünftigen Verbesserungen oder Wartungsarbeiten beauftragt ist.

[ Ein kostenloser Leitfaden von Red Hat:5 Schritte zur Automatisierung Ihres Unternehmens. ] 

Abschluss

In den meisten Situationen wird es unmöglich sein, alle diese Tipps zu befolgen. Sie sollen als Richtlinien für Kompromisse dienen, wenn alternative Implementierungen sinnvoll sind. Andernfalls ist es manchmal notwendig, gegen einige dieser Prinzipien zu verstoßen, um Ihren Stakeholdern bestmöglich zu dienen. Wieder andere (wie das Schreiben guter Kommentare) haben im Laufe der Zeit eine subtile, aber stetige Wirkung. Ich werde der Erste sein, der zugibt, dass es oft viel schwieriger ist, Dinge einfach zu tun, als auf Klebeband zu klatschen. Mit der Zeit wird das meiste Klebeband jedoch trocken und krustig, sodass Sie das Problem erneut beheben müssen. Tun Sie Ihrem zukünftigen Ich einen Gefallen und verbringen Sie die Zeit damit, von Anfang an auf Einfachheit umzugestalten.


Linux
  1. Linux-Tipps zur Verwendung von Cron zum Planen von Aufgaben

  2. 3 Tipps zum Drucken mit Linux

  3. 10 Ansible-Module für die Linux-Systemautomatisierung

  4. Entmystifizierung von Ansible für Linux-Systemadministratoren

  5. 5 erweiterte rsync-Tipps für Linux-Systemadministratoren

Die wichtigsten Linux-Befehle für Systemadministratoren

Einige nützliche Tools für Linux-Systemadministratoren

Die 15 besten Linux-Emulatoren für Windows-Systeme

Die 20 besten Bioinformatik-Tools für Linux-Systeme

Top 10 der besten Geometriesoftware für Linux-Systeme

Top 15 der besten Biologie-Tools für Linux-Systeme