Wir haben einen Server eingerichtet, auf dem die Infrastruktur für eine kleine Vereinigung ausgeführt wird. Bisher haben wir versucht, die Konfiguration mit Ansible zu verwalten, aber das war kein großer Erfolg. Vielleicht machen wir es falsch.
Im Prinzip besteht die Idee darin, dass dieser Server die meiste Zeit in Ruhe gelassen wird und die Leute einmal in einem blauen Mond Dinge hinzufügen oder ändern. Aus diesem Grund ist es wichtig, dass alles, was auf dem Server konfiguriert ist und ausgeführt wird, gut dokumentiert und klar ist, da Personen, die das System nicht häufig verwalten, den Überblick verlieren müssen (geschweige denn die Details merken). Darüber hinaus ändert sich im Laufe der Zeit die Zusammensetzung der Gruppe von Personen, die diesen Server verwalten (wenn Personen das "Komitee" verlassen und diesem beitreten).
Wir begannen mit einer Neuinstallation und fügten Rollen in ansible hinzu, wann immer wir etwas einrichten wollten (nginx, phpfpm, postfix, firewall, sftp, munin, ..). Vielleicht können wir aufgrund unserer Unerfahrenheit eine Reihe von ansiblen Aufgaben natürlich nie genau so eingeben, wie wir es auf einmal brauchen, auch weil die Konfiguration ein Versuch und Irrtum ist. Das bedeutet, dass wir in der Praxis normalerweise zuerst den Dienst konfigurieren, den wir auf dem Server ausführen möchten, und dann in ansible Aufgaben übersetzen. Sie können sehen, wohin das führt. Die Leute vergessen, die Aufgabe dann zu testen, oder haben Angst, dies zu tun, wenn die Gefahr besteht, dass Dinge kaputt gehen, oder schlimmer noch: Wir vergessen oder vernachlässigen es, Dinge zu Ansible hinzuzufügen.
Heute haben wir sehr wenig Vertrauen, dass die ansible Konfiguration tatsächlich die Konfiguration auf dem Server widerspiegelt.
Derzeit sehe ich drei Hauptprobleme:
- Es ist schwierig (sprich: wir haben keine gute Möglichkeit), ansible Aufgaben zu testen, ohne das Risiko einzugehen, Dinge zu zerbrechen.
- Es fügt zusätzliche Arbeit hinzu, um zuerst die gewünschte Konfiguration herauszufinden und dann herauszufinden, wie dies in ansible Aufgaben übersetzt werden kann.
- (Idealerweise) verwenden wir es nicht häufig genug, um Vertrautheit und Routine aufzubauen.
Eine wichtige Überlegung dabei ist, dass es für Neulinge für alles, was wir am Ende tun, leicht sein sollte , die Seile ohne viel Übung zu lernen.
Gibt es eine praktikable Alternative, die noch einige Garantien und Überprüfungen bietet (vergleichbar mit dem Zusammenführen von Ansible-Dateien mit einigen master
), die "Dinge konfigurieren und aufschreiben, was Sie getan haben" nicht bieten?
EDIT: Wir haben darüber nachgedacht, uns /etc
zu git zu verpflichten. Gibt es eine vernünftige Möglichkeit, Geheimnisse (private Schlüssel usw.) auf diese Weise zu schützen, aber das Konfigurations-Repository irgendwie außerhalb des Servers verfügbar zu haben?
Zwar gibt es andere Probleme gibt (wie nicht eine Testumgebung haben), können Sie eine große Verbesserung haben durch nicht tun dies .
Eines der wichtigsten Designziele von Ansible ist es, idempotent zu sein . Das bedeutet, dass das mehrmalige Ausführen Ihres Playbooks nichts ändern sollte (es sei denn, Sie haben die Spiele geändert). Wenn ich also eine neue Software konfiguriere, sind meine Schritte:
Wenn Sie nicht glauben, dass Sie beim ersten Mal in Ansible das Richtige schreiben , schreiben Sie es trotzdem und wiederholen Sie es, bis es richtig ist, genau wie bei jedem anderen Code. Dies verringert die Wahrscheinlichkeit, dass Sie einige von Ihnen vorgenommene Änderungen vergessen haben, erheblich, da jede von Ihnen vorgenommene Änderung zu einem bestimmten Zeitpunkt während Ihres Entwicklungsprozesses bereits in Ansible enthalten war.
quelle
Ansible hat eine Hochlaufzeit, bevor Sie Ihr bisheriges Produktivitätsniveau überschreiten. Sobald Sie dies tun, ist Ihr Systemstatus jedoch leicht sicherzustellen. Ihre Praktiken scheinen nicht mit Ihren Endzielen übereinzustimmen. Mit einem CM-Toolset können Sie produktiv sein, während Sie solide Konstruktionspraktiken beibehalten. Die korrekte Strukturierung dauert jedoch einige Zeit. Sie handeln im Wesentlichen effizient und einfach zu implementieren, um Stabilität und Skalierbarkeit des Unternehmens zu gewährleisten. Genauso wie ein erfahrener professioneller Programmierer keine hässlichen Hacks schreibt, überwiegen die Konsequenzen immer die Vorteile.
Für den Anfang haben Sie vielleicht zu viele Köche ohne eindeutigen Besitz, wenn Sie eine Tragödie der Allgemeinheit erwarten. Jede Geschäftspriorität übertrifft jedes Mal die Bedenken der Systemtechnik, es sei denn, sie ist weitgehend entschärft und was übrig bleibt, wirkt sich direkt auf den verantwortlichen Techniker aus.
Ein CM-Toolset kann nicht von Administratoren entwickelt werden. Dies ist mir gerade klar geworden. Sie können vorhandene Arbeiten wiederverwenden oder möglicherweise auf einer soliden Basis aufbauen, aber selbst dann würde dies eine aufwändige Durchsetzung der Praktiken erfordern. Was ein Ingenieur tun kann, ist einfach NICHT das, was ein Administrator tun kann. Viele Konzepte in Ansible sind fast dieselben wie in einer Codebasis. Können Sie eine Admin-Python unterrichten und kompetente Ergebnisse erwarten? Nein, ganz sicher nicht, ich würde einen Hack-Job erwarten, also müssen Sie die Aufgabe so strukturieren, dass ein Hack-Job erträglich ist.
Sie müssen also die Voraussetzungen für den Erfolg schaffen und Lösungen für unnötige Verwaltungspunkte entwickeln. Tauschen Sie die Komplexität von Systemen auf niedriger Ebene gegen Dinge, die ein Administrator tatsächlich erfolgreich ausführen könnte. Ein CM-Toolset schützt Sie NICHT vor Architektur- oder Designfehlanpassungen.
Die Reihenfolge unterliegt also einer Modifikation, offensichtlich, weil die Implementierung davon abhängt, welcher Pfad für Ihren gegenwärtigen Zustand am wenigsten störend ist.
Verschieben Sie alle geschäftsbezogenen Workflow-bezogenen Systemarbeiten auf ein dediziertes Rundeck.
Wenn Sie Aufgaben auf der Box aufteilen, haben Sie möglicherweise zwei oder mehr Boxen in einer.
Implementieren Sie Ihr CM strukturierter neu und befolgen Sie bessere Ansible-Praktiken, Spielbücher, die Objekte darstellen, die KEINE Funktionen oder Rollen sind. Jedes System sollte in einem Spiel beschrieben werden.
quelle