Frage automatisiertes Linux Deployment und Config Management im kleinen Maßstab - ist es das wert?


Ich bin im Begriff, ~ 25 Server zu betreiben Debian. Die Maschinen werden unterschiedliche Rollen haben - Webserver, Java-Appserver, Proxies, MySQL-Boxen. Die Umgebung wird wahrscheinlich nicht viel in der Zukunft wachsen - vielleicht 2-5 mehr Server in den nächsten 2 Jahren.

Ich werde wahrscheinlich verwenden Fai für die Systeminstallation, aber ich bin mir nicht sicher, ob es sich lohnt, auch hinzuzufügen cfengine oder Marionette zentralisiertes Konfigurationsmanagement für diesen kleinen Umfang.

Macht das Konfigurationsmanagement für eine solche Umgebung Sinn?


24
2018-06-28 10:30


Ursprung




Antworten:


Ich würde empfehlen, eine Mischung aus Debian-Pre-Seeding zu verwenden, wo Sie dem Installer eine Textdatei geben, die alle Fragen beantwortet, die es stellen würde, und Puppet.

Der Grund für die Verwendung der Voreinstellung anstelle von FAI besteht darin, dass Sie nicht zuerst ein Bild erstellen und es auf dem neuesten Stand halten müssen. Sie werden mit einer Installation enden, die sehr ähnlich zu der ist, die Sie hätten, wenn Sie sie alle von Hand gemacht hätten. Wenn Sie ein neues Release installieren, müssen Sie eine Konfigurationsdatei mit den Änderungen aktualisieren, anstatt ein neues Image neu erstellen zu müssen.

Ein Konfigurationsmanagement-Tool ist besonders nützlich, wenn Sie mehrere Server haben, die die gleiche Rolle ausführen, und Sie möchten, dass sie identisch sind, z. Webserver-Cluster Sie können jedoch auch nützlich sein, um die Basisinstallation aller Server zu konfigurieren. Du wirst bestimmte Pakete auf all deinen Servern installieren wollen, wie ntpd und einen MTA. Sie werden eine Konfigurationsdatei auf all Ihren Servern ändern wollen. Ein weiterer Vorteil besteht darin, dass Sie Ihre Manifeste in einer Art Subversion aufbewahren und aufzeichnen können, was sich auf einem Server geändert hat und wer dies getan hat und warum. Das Konfigurationsmanagement kann auch im Falle eines Serverfehlers ein Lebensretter sein und Sie müssen es schnell neu erstellen. Installieren Sie das Betriebssystem (mit FAI oder Voreinstellung), installieren Sie die Puppe und weg geht es, baute genau wieder wie zuvor. Offensichtlich müssen Sie Datensicherungen aufbewahren.

Das Konfigurationsmanagement erfordert Engagement, um sicherzustellen, dass Sie nur Änderungen vornehmen, die es verwenden, und es wird vorab Kosten verursachen, die Dinge einzurichten, aber sobald Sie ein funktionierendes Setup haben, werden Sie es nicht bereuen.

Puppet ist das modernere der beiden Tools, die Sie erwähnt haben. Ich empfehle es wirklich jedem. Die Konfiguration ist eine deklarative Sprache und es ist einfach, Konstrukte höherer Ebene aufzubauen. Es gibt auch eine sehr große Gemeinschaft, und es gibt immer Leute, die willkommen sind, um auf der Mailing-Liste oder dem IRC-Kanal zu helfen.


29
2018-06-28 10:47



Danke für den Hinweis zum Vorsäen. Ich schaue mir gerade die Docs an. - pQd
FAI ist alter Skool; Ich würde es definitiv nicht empfehlen. Vorsaat + Puppet ftw. - womble♦
Wir benutzen FAI und cfengine, wir haben ungefähr 1000 Maschinen und es funktioniert sehr gut. Es ist erwähnenswert, dass Sie in die Maschine einsteigen können, während sie sich selbst erstellt, so dass das Schreiben der Mikroskripte viel einfacher wird. - James
FAI alte Schule? NEIN! FAI ist felsenfest und hat mehr als 10 Jahre Erfahrung. Sehen Sie sich die lange Liste der FAI-Benutzer an fai-project.org/reports - Thomas Lange
Guter Rat, wir verwenden einen ähnlichen Ansatz und es funktioniert gut. Ich würde FAI jedoch nicht entlassen. FAI verwendet keine Bilder für die Installation (SystemImager tut das). Sie müssen ein minimales nfs-Stammverzeichnis einrichten, das zum Ausführen des FAI-Installationsprogramms verwendet wird. Der Installationsprozess wird mit Konfigurationsdateien und verschiedenen benutzerdefinierten Hooks automatisiert. Der Vorteil gegenüber der Voreinstellung ist, dass das Konzept der FAI-Klassen die Handhabung mehrerer Server (und sogar von Workstations) mit unterschiedlichen Rollen erleichtert. - JooMing


Ich würde CFengine für jede Umgebung empfehlen, die mehr als 2-3 Boxen umfasst und wo Sie ein Konzept von "Templates" oder Servern haben, die bestimmte Rollen ausführen.

Warum? Einfach gesagt reduziert es Fehler, Sie haben ein Werkzeug, das Datei- / Verzeichnisberechtigungen sicherstellen wird richtig Überall in der Umgebung und wenn Sie mehr Server ausrollen, geht das Tool absolut um und macht keine Fehler.

Im Gegensatz dazu kann selbst ein erfahrener Systemadministrator am Ende einer Zwölf-Stunden-Schicht einen Webserver bereitstellen, wenn die Dinge bereits schief gelaufen sind .... Werden sie sich wahrscheinlich an diese kleine Konfigurationsdatei erinnern, die sich in / etc / random / location befindet / foo / bar Andernfalls wird die Anwendung im Hintergrund etwas Wichtiges nicht tun, wie Rechnungskunden? :)

Tools wie CFengine sind auch eine gute Möglichkeit, um umgebungsweite Sicherheitsupdates durchzuführen. Das Löschen einer Nagios-Konfiguration (NRPE) auf alle Boxen ist ebenfalls ein Kinderspiel. Ob es sich um fünf oder fünf Boxen handelt hundert Boxen Sie werden Sparen Sie Zeit mit CFengine.

Es ist wahrscheinlich erwähnenswert, dass meine Umgebung ein wenig größer ist, aber ich habe auch CFengine für kleinere Umgebungen eingesetzt, als Sie bemerken, daher die Empfehlung!

Wahrscheinlich wird deine nächste Frage CFengine vs Puppet sein? Das ist eine schwierigere Entscheidung, und ich habe CFengine immer wegen (in den frühen Tagen) einiger Unreife von Puppet verlassen, besonders um Fehlerprotokollierung ... heutzutage bin ich wirklich nicht sicher - habe ein Spiel 'n sehen? Wenn ich auf meine speziellen Probleme mit Puppet zurückblicke, waren sie SSL-Zertifikat-bezogen und erinnerten schmerzlich noch an die Zeit, die ich 3 Stunden damit verbracht habe, Server <-> Client-Konnektivitätsprobleme in irc.freenode.net/#puppet mit etwas RTFM und RTFS zu diagnostizieren nur einen Fehler zu finden, nicht geloggt zu werden, und Luke sagte: "Ah, das ist wirklich schwer zu beheben" und hat es nie getan. :(


10
2018-06-28 10:35



guter Punkt. Problem ist in meinem Fall Dinge werden sehr spezialisiert sein, wird die Anzahl der Vorlagen [wegen der Redundanz] wahrscheinlich um n / 2 sein [wobei n die Gesamtzahl der Server ist]. - pQd
Das ist keine schlechte Sache, die meisten meiner WWW-Cluster sind n + 2, wenn nicht n / 2 und Sie können ziemlich flexibel mit CFengine in der Bereitstellung von Knoten hinter Ihren Lastenausgleichern wie HAproxy sein. Es ist durchaus möglich, IPVS- und Keepalive-Sachen zu verwalten :-) Selbst mit n / 2 Redundanzanforderungen wette ich, dass Sie in Ihrer Umgebung viele identische oder ähnliche Konfigurationsdateien haben. Denken Sie daran, dass Sie mit CFengine das 'editfiles' Werkzeug haben, um Dinge wie eine "templated" Konfigurationsdatei zu tun, die etwas wie IP und dann (zur Laufzeit) ein Suchen und Ersetzen mit der richtigen Information. ;) - nixgeek
@astinus danke für deine Kommentare. Ich habe auch ein bisschen Angst davor, meine Produktion in einer zentralen Konfiguration durcheinander zu bringen. Was halten Sie davon, die automatische Abfrage der Konfiguration und die Protokollierung auf jeder der Maschinen zu deaktivieren und sie zu zwingen, zu aktualisieren und manuell zu überprüfen, ob alles in Ordnung ist? [Ja, ich werde auch Nagios / benutzerdefinierte Überwachung haben ... aber immer noch]. - pQd
Ich denke, dass das Vertrauen in Ihre Konfigurationsmanagement-Techniken mit der Zeit kommt, aber in der Zwischenzeit deaktivieren Sie einfach das automatisierte Abrufen von Boxen und verwenden Sie "cssh", um sich bei jeder Klasse von Boxen zu 'cfagent -qv' (oder was auch immer!) Wann zu starten Sie möchten Updates pushen. Wenn Sie einen Top-Tipp für die Vertrauensbildung wünschen, stellen Sie eine virtuelle Maschine als Staging-Umgebung bereit und stellen Sie sicher, dass alle Änderungen zuerst durchgeführt werden. Ganz einfach, wenn Sie Ihre CFengine- oder Puppet-Konfiguration in Subversion behalten, verwenden Sie einfach Zweige und Tags. - nixgeek
Ich werde auch die Verwendung von SLACK empfehlen, um die Installation von Systemen (Neu-) Installation und das Konfigurationsmanagement lächerlich zu vereinfachen. Es ist hier verfügbar: sundell.net/~alan/projects/slack - HK_


Neben cfengine und puppet gibt es auch noch Koch. Ich würde dringend empfehlen, eines dieser Tools zu verwenden, da die Dinge immer in unerwartete Richtungen wachsen werden. Dies hilft, Dinge an einem zentralen Ort zu verwalten.

Das Wichtige, das man erkennen muss, ist, dass die Chancen gut sind, dass man nicht alles bekommt, aber wenn man dort mindestens 90% bekommt, ist es ein Anfang. Außerdem macht es Spaß und wird Ihr Leben auf lange Sicht erleichtern. Schließlich ist es eine gute Fähigkeit, vorwärts zu gehen.


5
2018-06-28 20:11



Chef ist ein neuer Einstieg in die Configuration Management Szene. Es ist so konfiguriert, dass es mit Ruby geschrieben wird, um das zu tun, was Sie wollen, im Gegensatz zur deklarativen Sprache der Puppe. Die Zeit wird zeigen, welche Methode gut funktioniert. Ich sitze gerade im Puppenlager. - David Pashley


Ich benutze cfengine seit 5 Jahren, um debian (von Woody bis zu Lenny heutzutage) zu installieren. Mit Etch baue ich einen benutzerdefinierten Debian-Installer. Dank preseed kommt eine einzige Frage auf: "whats the hostname". Danach konfiguriert cfengine den gesamten Server (dns + dhcp mit dnssec, samba, ntpd, Standard (Samba) Benutzer und Passwörter, ssh, openvpn, Apache vHosts, Backup mit rsnapshot auf LVM, benutzerdefinierte Webminmodule etc).

Auch wenn ich nur einen Server installiere, verwende ich cfengine-Skripte aus meiner Toolbox wie folgt:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

Ich mag cfengine, weil die cf2-Skripte etwas vom Menschen lesbar sind.

Es lohnt sich also, mit Tools für das automatische Konfigurationsmanagement zu arbeiten.

/ Thorsten


3
2017-07-01 17:11





Es muss sich sogar für eine kleine Seite gelohnt haben. Es dreht sich alles um Konsistenz, wie Sie wachsen. Und du weißt, dass deine Seite wachsen wird. Am besten anzufangen, solange du noch klein bist. Cfengine ist großartig. Vor allem die Version 3, die alle Paketmanager auf dem ganzen Feld handhaben kann, und die wirklich leicht und sicher ist und "einfach funktioniert". Marionette hat einfach nicht geliefert, was sie behauptet hat. Habe Chef nicht probiert.

Der Vorteil von cfengine gegenüber den anderen ist, dass es ultraleicht ist, aber tatsächlich mehr Fähigkeiten hat. Es ist Sicherheit wie ssh, anstatt die Web-Zertifikate von Marionette verwendet. Als ich meinem Chef von cfengine erzählte, dachte er, es wäre Science-Fiction :) Wenn du nach etwas Futuristischem suchst, dann lies einige der Forschungspapiere von Marc Burgess. Cooles Zeug.


2
2018-01-24 19:08





Das wichtigste Tool, das ich mir beim Ausführen einer kleinen Site gewünscht habe, ist ein "Push-Button" -Build. Es erleichtert das Patchen, Aktualisieren und Wiederherstellen, was in Zukunft eine Vielzahl anderer Probleme lösen kann.

Kein ssh ordnungsgemäß auf allen Boxen installiert? auch nicht curl / wget / vim? Was ist mit anderen In-House-Tools, die Sie gerne auf jeder Box haben möchten?

Die zentrale Verwaltung Ihrer Server ist eines der ersten Tools, die Sie einsetzen sollten, um zukünftige Bemühungen zu vereinfachen.


1
2018-06-28 16:04





Ich stimme jedem hier zu. Sie sollten anfangen, eine funktionierende Infrastruktur zu erlernen und einzurichten, wenn Sie nicht zu groß sind. Denn dann bist du vorbereitet, wenn du wächst.

Abhängig von dem, was Sie ausführen möchten, würde ich für FAI, cfengine und Pre-Seeding für Debian / Ubuntu gehen. FAI kann mit vielen verschiedenen Tools arbeiten, daher ist es ein guter Anfang für jede Debian-ähnliche Distribution. Mit der klassengesteuerten FAI- (und cfengine-) Konfiguration können Sie Ihre Installationen einfach in kleine Module aufteilen, die Sie dann für jeden Ihrer Rechner auswählen können. Auf diese Weise wird es auch nützlich sein, wenn Sie viele verschiedene Maschinen haben. Es ist tatsächlich nützlicher, da Sie Ihre Installation mit diesen Skripten dokumentieren. Und wenn Sie auf einer neuen Maschine installieren, werden Sie nichts vergessen.

Ja, Sie SOLLTEN einige Maschinen zum Testen haben, bevor Sie Ihre Änderungen in einer Live-Installation bereitstellen. Aber mit einem solchen Konfigurationsskript werden Sie nicht vergessen, irgendeinen Schritt in der Live-Installation zu machen.


1
2017-07-01 19:14