Automatisieren der Serverbereitstellung


28

Ich stelle fest, dass ich für eine Reihe meiner Clients ständig nahezu identische Server und VPS einrichte, was sehr zeitaufwändig sein kann. Oft ist das einzige, was sich zwischen den einzelnen Bereitstellungen ändert, die unterschiedliche Website, die bereitgestellt werden soll. Gibt es eine einfache Möglichkeit, all dies zu automatisieren und die langweilige Monotonie der Einrichtung von 56 identischen Servern in Kauf zu nehmen?

Die Server, die ich bisher bereitgestellt habe, waren nur Ubuntu, aber es ist möglich, dass ich anfange, andere Linux-Betriebssysteme oder sogar Windows zu verwenden. Bisher habe ich mir Capistrano angeschaut, aber es scheint sich darauf zu konzentrieren, kleine Ruby-Programme zu schreiben, mit denen ich den Job machen kann, und ich habe überhaupt keine Kenntnisse


Antworten:


20

Puppet klingt perfekt für das, was Sie versuchen, mit dem Vorbehalt, dass Windows derzeit nicht unterstützt wird.

In Ihrem Fall würden Sie einen Serverknoten in Bezug auf alle Pakete definieren, die auf den Maschinen identisch sind. Anschließend definieren Sie die einzelnen Hosts als Knoten, die vom Server erben, und richten die spezifischen eindeutigen Elemente dafür ein.

Puppet ist deklarativ - es erlaubt Ihnen, Ihre Kisten in Bezug auf die Ressourcen zu beschreiben, die jede Kiste haben sollte. Also, wenn Sie wollen ssh- Sie schreiben eine Klasse für diese Ressource - und innerhalb der Klasse können Sie eine Logik darüber einfügen, wie ssh unter FreeBSD und Ubuntu etwas anders heißt. Es kann auch yumin Redhat, apt-getDebian-basierten Distributionen und portsin BSDs verwendet werden. Jetzt haben Sie in Ihrem Serverknoten nur eine Zeile wie include ssh- und Puppet macht das Richtige und setzt SSH auf den Computer, ohne dass Sie sich daran erinnern müssen, ob es sich um Ubuntu, Redhat oder FreeBSD handelt.

Das Schöne ist, dass alle Server-Inhalte an einem Ort gespeichert sind - und wenn Sie zu irgendeinem Zeitpunkt die Serverknotendefinition ergänzen, werden ALLE Computer ihre Konfiguration entsprechend aktualisieren.

Im Moment verwalte ich nur drei Boxen mit Puppet - aber es hat sich bereits ausgezahlt. Nachdem wir eine Woche damit verbracht hatten, eine Box für die Stimulus-Präsentation in einem Experiment einzurichten, stellte sich heraus, dass der Grafikkartentreiber in der von mir verwendeten Ubuntu-Version (8.04) zu alt war. Ich musste das neueste Ubuntu (9.04) installieren, aber danach musste ich nur noch apt-get und run puppet - und alles, was ich eine Woche lang eingerichtet hatte, wurde wiederhergestellt.

Puppet hat zwar eine gewisse Lernkurve, aber ich habe es erfolgreich vermieden, Ruby zu lernen - ich weiß, dass ich es verwende, da Puppet so geschrieben ist - aber bisher war es mir gelungen, nur die Beispiele in zu modifizieren die Dokumentation und die Rezepte im Wiki . Ein weiterer Nachteil ist, dass Puppen beim ersten Mal etwas länger brauchen, um Dinge zu tun. Der Vorteil ist, dass alles, was Sie an all Ihren Maschinen ändern, an einem Ort aufbewahrt wird - es ist üblich, Ihre Puppenkonfiguration in einem Versionskontrollsystem zu behalten -, sodass Sie immer zurückblicken und sehen können, wie Sie Server in der Vergangenheit eingerichtet haben - oder einige erfolglose Änderungen rückgängig machen.

Zum Schluss ist hier ein kurzes Video , das eine einfache Marionettendemo zeigt, mit der ich schnell angefangen habe.


3
Digg.com verwendet Puppet, um seine Server zu verwalten. Einige grundlegende Beispiele finden Sie in seinem Blog: blog.digg.com/?p=335 blog.digg.com/?p=562
Adam Gibbins

Ich glaube, dass das Fedora-Admin-Team auch Marionetten verwendet.
Mei

9

Wir verwenden Cobbler und Puppet für die Build- und Konfigurationsautomatisierung von realen und virtuellen Maschinen.

Cobbler verknüpft DHCP, PXE-Start und Kickstart, um die Bereitstellung so einfach wie möglich zu gestalten. Fügen Sie lediglich ein Computerprofil hinzu und drücken Sie die Ein- / Aus-Taste. Für VMs, die koan tut Befehl die (in unserem Fall) Xen Magie die Installation beginnen - auf das dom0ich gerade ein:

koan --system vps.fqdn --server cobbler --no-gfx

dann virsh console, um ein VPS-Gebäude ohne Interaktion zu sehen.

Wir verwenden RHEL und haben eine Reihe von Profilen eingerichtet, um Festplatten zu partitionieren, Netzwerke zu konfigurieren und Basispakete für verschiedene Serverklassen zu installieren. Cobbler unterstützt Debian- und Ubuntu-Rassen, aber ich habe es noch nie versucht. Nebenbei : Weitere interessante Anwendungen für Cobbler sind das Ausführen von memtest- ISOs und HP-Firmware- Updates.

Sobald unsere Systeme mit Cobbler Puppet erstellt wurden, werden die Anwendungen, System-Daemons, die Registrierung der Box bei RHN usw. konfiguriert. Puppet wird als Daemon ausgeführt, der regelmäßig überprüft, ob die Systemkonfiguration mit den definierten Manifesten übereinstimmt. Sie wissen, dass Ihre Aktualisierungen abgeschlossen sind an alle Server. Auf diese Weise können Sie auch sicherstellen, dass eine zu wartende Box die richtige Konfiguration aufweist, bevor Sie sie wieder in Betrieb nehmen.

Puppet ist wirklich großartig. Sie müssen nicht jeden Aspekt Ihrer Konfiguration in den Griff bekommen - lassen Sie sie zunächst etwas Einfaches verwalten, das Sie auf jeder Box konfigurieren müssen (dies sudoersist das kanonische Beispiel), und nehmen Sie es von dort. Stellen Sie sicher, dass auch Ihre Puppet-Manifeste versioniert sind. Nichts ist besser als die einfache Möglichkeit, ein Rollback auf eine als funktionierend bekannte Konfiguration durchzuführen, ohne sich daran erinnern zu müssen, was angepasst werden muss.


6

Wo ich gerade arbeite, müssen wir den Linux-Teil unserer Serverfarm verwalten, der nur etwas über 300 Linux-Server umfasst. Dies umfasst hauptsächlich HP Proliants, gefolgt von IBM 3850s, einigen IBM Blades, VMware ESX und einigen KVM für unsere internen Verwaltungsserver.

Cobbler

Wir haben uns Cobbler angesehen, aber das Problem war, dass Cobbler sehr RHEL / Red Hat-spezifisch ist. Wir müssen RHEL und SLES mindestens unterstützen und Ubuntu ist als nächstes dran.

Marionette

Wir haben Puppet in Betracht gezogen, haben uns jedoch später dagegen entschieden, da es von Ruby abhängt, was bedeutet, dass ein Upgrade von Ruby unser Managementsystem möglicherweise beschädigen könnte.

hotwire

Wir verwenden Hotwire (intern entwickelt, aber Open Source) und das seit einigen Jahren. Erstens werden die zu erstellenden Systeme inventarisiert, dh das Rechenzentrum, das Rack, die Hardware, das Betriebssystem, das Netzwerk usw. werden inventarisiert, und zweitens erfolgt die schnelle Erstellung und Bereitstellung. Sobald das System erstellt ist, wird das Inventar durch die automatische Inventarisierung von hotwire synchronisiert, während es von cfengine verwaltet wird. Hotwire kennt die Server-Hardware, indem es über Python- Dmidecode mit den SMBIOS / DMI-Daten im BIOS spricht .

Die Bonuspunkte sind, dass Inventar und Erstellungsprozess in einem zusammengefasst werden, sodass weniger verwaltet werden muss, und die Live-Inventar-Funktion ist großartig, da wir wissen, ob etwas nicht ganz stimmt.

Die Nachteile sind, dass die Benutzeroberfläche immer noch poliert werden muss, und es gibt hier und da Fehler, aber die Entwicklung ist immer noch heiß, und gemeldete Fehler werden relativ schnell behoben.

cfengine

Wir verwenden Cfengine, weil es außer Cfengine und Puppet nichts anderes gibt. Tatsächlich ist es ein gutes Tool, aber "gut" nur in Abhängigkeit davon, wie gut Ihre Richtlinien sind. Wenn Sie gefährliche Richtlinien festlegen, kann ein kleiner Fehler eine Menge Schaden anrichten. Zum Beispiel "modifizieren" wir Dateien nicht, wir ersetzen sie entweder oder wir tun es nicht. Außerdem haben alle ersetzten Dateien einen Header, der jeder Person, die sie bearbeitet, mitteilt, dass sie beim nächsten Start ersetzt werden (sie wird stündlich über cron ausgeführt).

Die Konfiguration und alle Dateien, die von cfengine an die Server gesendet werden, werden ebenfalls in einem SCM gespeichert. Wenn möglich, überprüfen wir die Syntax mithilfe von Post-Commit-Hooks. Wenn dies fehlschlägt, wird das Commit abgelehnt. Dies ist für nette Anwendungen wie Apache einfach, für die meisten Unternehmensanwendungen jedoch nicht so einfach.


Sie haben sich gegen Puppet entschieden, weil es auf Ruby ankommt? Auf dieser Grundlage können Sie sich gegen fast alles entscheiden, da ein Libc- oder Kernel-Upgrade zu einem Absturz führen kann.
Cristian Ciupitu

2
Sie sprechen einen Punkt an, aber am Ende handelt es sich um einen Kompromiss - um wie viele Pakete möchte ich mich beim nächsten Upgrade "sorgen". Wenn das Kernel / Glibc-Upgrade fehlschlägt, werden Sie es normalerweise fast sofort herausfinden, da es die grundlegendste Komponente des Betriebssystems ist. Wenn Ruby jedoch etwas anders herauskommt, werden Sie es nicht wirklich bemerken, aber wenn Sie dies tun, können Sie es Auf dieser Version sind bereits 300 Server aktualisiert und aktiv, und jetzt ist Puppet ein Opfer. Aber auch hier schnitze ich nichts in Stein; Dies ist nur meine Präferenz in dieser Angelegenheit.
Xerxes


3

Zur Automatisierung der Installation je nach Zielsystem:

  • Debian / Ubuntu: FAI oder Voreinstellung
  • RedHat / Fedora: Kickstart
  • Novell / openSuSE: AutoYaST
  • Solaris: Jumpstart
  • Windows: unattended.sourceforge.net

Für das Konfigurationsmanagement würde ich zusätzlich die Verwendung von Puppet vorschlagen.



2

Eine weitere Abstimmung für Puppet hier. Wir verwenden es ausgiebig, um die gesamte Server- und Anwendungsinstallation sowie das Konfigurationsmanagement durchzuführen. Über 200 Knoten und Zählen. Die Windows-Unterstützung ist anscheinend in der Entwicklung, obwohl ich nicht sicher bin, in welchem ​​Zustand.

Wir beschäftigen uns immer noch mit der anfänglichen Bootstrap-Seite des Betriebssystems, aber wie oben erwähnt, sieht Cobbler interessant aus. Wir verwenden derzeit eine Mischung aus PXE-Booten mit Debian / Ubuntu-Voreinstellung, aber es ist kaum optimal.


Hey Mike, denkst du, du könntest die Puppenmarke zu dieser Frage hinzufügen? Ich würde es tun, aber nicht den erforderlichen Mitarbeiter haben
Paul Ivanov
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.