Konfigurationsmanagement für "Single Server Multiple Admins"

9

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 /etczu 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?

Joost
quelle

Antworten:

10

Starten Sie einfach eine Test- / Staging-VM, mit der Sie Ihre Änderungen überprüfen können. Ihre derzeitige Methode, Änderungen zuerst manuell durchzuführen, ist hoffnungslos fehlerhaft und zum Scheitern verurteilt. Sie und Ihr Team müssen sich dazu verpflichten, CM ordnungsgemäß zu verwenden. Dazu gehört auch, dass ein Testsystem verfügbar ist. Schon eine lokale Vagabund-VM würde ausreichen.

Dies hilft nicht nur beim Testen neuer Änderungen, sondern dient auch als Prüfstand für neue Mitarbeiter (oder ältere Mitarbeiter, die das System seit einiger Zeit nicht mehr verwendet haben), um sich mit Ihrem ansiblen Setup vertraut zu machen.

In Bezug auf das Halten von / etc / in git: Nein, tu das nicht. Dieses Verzeichnis ist nur ein winziger Teil dessen, was sich ansible ändert, und wenn Git dort installiert ist, werden die Leute nur dazu ermutigt, lokale Änderungen vorzunehmen.

Halten Sie Ihre ansible Spielbücher in git. Ziehen Sie in Betracht, die Berechtigungen so einzuschränken, dass nur Sie ansible Änderungen auf den Live-Server anwenden können. Andere können Pull-Anforderungen mit ihren Änderungen senden, die Sie überprüfen und gegebenenfalls in den Master einfügen können.

EEAA
quelle
Richtig, das ist das ideale Szenario. Ich verstehe das. Die Sache ist, wir sind kein Unternehmen und wir haben keine Leute, die Vollzeit daran arbeiten. Vielleicht habe ich das Ausmaß dieses Problems nicht klar genug gemacht. Jeder zusätzliche Teil (wie eine Vagrant-Datei) erhöht die Komplexität, die weitergegeben werden müsste, und führt zwei Konfigurationen aus (dh ein Testsystem, bei dem Dinge wie die Automatisierung von Letsencrypt verspottet werden müssen) Einfachheit nicht helfen.
Joost
1
Nun, Sie haben gefragt, wie Sie Ihre Probleme lösen können, und ich habe meine Antwort gegeben. Das oben Genannte ist genau das, was wir in meinem Unternehmen tun, und es funktioniert sehr gut. Ja, es sind zusätzliche Kosten in Bezug auf Serverplatz und Testzeit erforderlich, aber diese sind es wert, da wir sehr sicher sind, dass wir bei Bedarf jeden unserer Server innerhalb von Minuten neu erstellen können.
EEAA
3
Im Kern ist dies wirklich ein Kultur- und Ressourcenproblem, kein technisches Problem. Sie haben sich nicht zur Verwendung des Konfigurationsmanagements verpflichtet. Ob Sie ein Unternehmen sind oder nicht, spielt keine Rolle. Sie bitten um Hilfe bei der richtigen Vorgehensweise, und eine Staging-Umgebung gehört dazu.
EEAA
3
IMHO, ja, du solltest dich dazu verpflichten. Ob Sie Ihre Kollegen überzeugen können oder nicht, ist jedoch eine andere Frage. Es gibt keine einfache Möglichkeit, dies zu tun, die von den Verwaltern des Servers kein gewisses Maß an Intentionalität erfordert. Von den modernen CM-Systemen ist ansible bei weitem am einfachsten zu erreichen. Sie haben möchten Serveränderungen im Laufe der Zeit verfolgen. Die einzige Möglichkeit, dies zuverlässig zu tun, ist die Verwendung von CM.
EEAA
4
@ThomWiggers Ich gehe davon aus, dass Sie beide im selben Team sind, seit Sie "wir" verwendet haben. OK, Sie haben gefragt, wie das richtig geht. Ich gab eine Antwort. Entweder du willst es richtig machen oder du machst es nicht. CM richtig zu machen kostet Zeit, Geld und Intentionalität. Wenn Sie Anforderungen wie die Beschaffung und Bereitstellung von Zertifikaten über LE haben, stellen Sie eine virtuelle Maschine für 5 US-Dollar pro Monat mit Digital Ocean bereit und verwenden Sie diese zum Testen. Sie können es sogar einfach bei Bedarf bereitstellen, wenn Sie Änderungen testen und dann beenden möchten.
EEAA
6

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 bisschen wie 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.

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:

  1. Nehmen Sie Änderungen an den Ansible-Aufgaben vor.
  2. Führen Sie das Playbook aus.
  3. Untersuchen Sie das System und kehren Sie zu Schritt 1 zurück, wenn es nicht korrekt ist.
  4. Übernehmen Sie meine Änderungen.

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.

Boykott SE für Monica Cellio
quelle
Ja, das ist ein toller Rat. Dadurch, und sicherzustellen , dass Sie immer Ihren Server wieder in einen bekannten Zustand ist sehr zu befreien bekommen - wenn es nach Süden gehen, nuke nur den Server und erneut bereitstellen.
EEAA
Richtig, ich stimme zu, dass dies ein sehr solider Mittelweg zwischen dem, wo wir jetzt sind und dem, wo wir sein sollten, ist. So haben wir natürlich angefangen. Ich nehme an, der Hauptgrund, warum wir uns dahin bewegt haben, wo wir jetzt sind, ist, dass Schritt 2 den gesamten Zyklus zu lange gedauert hat. Es könnte sein, dass wir Spielbücher falsch gemacht haben. Jetzt, da wir uns mit dem Schreiben von Ansible-Aufgaben ein wenig besser auskennen, lohnt es sich vielleicht, es noch einmal zu versuchen. Wie lange würde Ihrer Erfahrung nach ein vollständiger Zyklus dauern und wie oft würde man iterieren? Mir ist klar, dass alle Zahlen auf allen möglichen Annahmen beruhen werden.
Joost
2
Ein anderes Problem, das ich bei diesem iterativen Prozess hatte, tritt auf, wenn Sie eine Aufgabe schreiben, die Änderungen vornimmt, Änderungen am Server vornimmt, feststellt, dass die Änderungen falsch sind, Ihre Aufgabe aktualisieren und das Playbook erneut anwenden. Jetzt enthält der Server eine Mischung aus zwei Änderungssätzen: die aus der ersten Iteration der Aufgabe und die aus der zweiten. Normalerweise überschreibt die zweite Iteration die erste, aber nicht unbedingt immer. Gibt es eine vernünftige Möglichkeit zum "Aufräumen", anstatt 1) ​​manuell SSH zum Rückgängigmachen einzugeben oder 2) jedes Mal von einer Neuinstallation auszugehen?
Joost
Darüber hinaus ist es oft nicht trivial, den Server zu zerstören, wenn Sie nur einen haben
Thom Wiggers
"Wie lange würde Ihrer Erfahrung nach ein vollständiger Zyklus dauern und wie oft würde man iterieren?" - Ich habe im Januar angefangen, Ansible zu verwenden. Gegen Juni kam ich zu dem Punkt, an dem ich den gesamten Prozess in Ansible für die meisten Aufgaben schneller als von Hand erledige. Die spezifische Zeit hängt natürlich vom Projekt ab, von einigen Minuten bis zu einigen Wochen (für einige besonders kanteröse Software). Wenn Sie feststellen, dass das Ausführen des Playbooks Sie verlangsamt, sollten Sie Tags verwenden, um nur eine Teilmenge während Ihrer Iterationsschleifen auszuführen.
Boykott SE für Monica Cellio
0

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.

  1. Verschieben Sie alle geschäftsbezogenen Workflow-bezogenen Systemarbeiten auf ein dediziertes Rundeck.

  2. Wenn Sie Aufgaben auf der Box aufteilen, haben Sie möglicherweise zwei oder mehr Boxen in einer.

  3. 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.

JM Becker
quelle