Wie kann ich Hunderte von IPMI-BMCs verwalten?

30

Ich habe über 200 Computer, die IPMI- Dienste bereitstellen können . Die Server werden von verschiedenen Firmen (SuperMicro, Dell usw.) hergestellt. Es gibt 6-7 BMC-Modelle von etwa 5 verschiedenen Herstellern, und jedes Modell weist seine eigenen Besonderheiten auf.

Bisher haben wir die BMCs mithilfe einer Kombination aus DHCP und manueller Konfiguration der einzelnen BMCs konfiguriert. Die manuelle Konfiguration kann mithilfe einer bootfähigen CD-ROM, einer BIOS-Konfiguration (sofern unterstützt), eines Host-Betriebssystems mit einem Dienstprogramm wie ipmitool , freeipmi usw. oder einer Remote-Verwendung von ipmitool erfolgen, wenn wir die Netzwerkadresse des ermitteln können Gerät.

Diese manuelle Konfiguration ist jedoch ziemlich mühsam. In einigen Fällen möchten wir eine Einstellung global auf allen BMCs ändern, sodass ein Administrator einen Befehl für Dutzende von Boxen ausführen muss. Da die BMCs von verschiedenen Anbietern bereitgestellt werden und jedes BMC-Modell möglicherweise eigene Besonderheiten aufweist, funktioniert derselbe Befehl nicht immer auf allen BMCs.

Gibt es Dienstprogramme, mit denen ich die BMCs auf Dutzenden von Boxen massenkonfigurieren kann? Angenommen, ich möchte einen Parameter für Dutzende verschiedener BMCs abfragen oder das Kennwort ändern, den HTTP-Zugriff auf die WebUI deaktivieren oder die berüchtigte Sicherheitslücke für Chiffre Null deaktivieren .

Bonuspunkte für jedes Dienstprogramm, mit dem ich die BMC-Firmware aktualisieren kann. Dies ist erforderlich, um mehrere Sicherheitslücken zu schließen

Stefan Lasiewski
quelle
3
Dies scheint sicher etwas zu sein, das Sie tun könnten, wenn Sie Marionette / mcollective. Sie verwenden facter , möglicherweise mit einigen benutzerdefinierten Fakten, um festzustellen, über welchen Gerätetyp Sie verfügen, und konfigurieren die Dinge dann mithilfe einer Marionette oder durch Drücken von Befehlen mit mcollective.
Zoredache
Vielleicht möchten Sie auch einen Blick auf xcat werfen . Put hat eine verteilte Shell integriert, die für Gruppen geeignet ist und sich eng in IPMI einfügt.
Isaac
Puppet Razor kann auch eine Lösung sein, obwohl ich es noch nicht untersucht habe: vdatacloud.com/blogs/2012/05/23/…
Stefan Lasiewski
Ich bin bei Puppetconf und habe gerade mit dem Projektmanager von Mcollective (auch bekannt als Puppet Enterprise Orchestration) gesprochen. Von Mcollective werden Ihre Knoten verwaltet (auf Betriebssystemebene), und dann scheint es ziemlich weit außerhalb dessen zu liegen, wofür Mcollective entwickelt wurde. Aber es ist wahrscheinlich möglich.
Stefan Lasiewski

Antworten:

16

Ich würde wahrscheinlich Ansible verwenden . Es ist eine sehr einfache Konfigurationsmanagement- / Orchestrierungs-Engine, mit der man viel einfacher anfangen kann als mit Puppet (Puppet war früher meine erste Wahl, aber nicht immer jetzt, nachdem ich Ansible entdeckt habe).

Der Vorteil von Ansible besteht darin, dass es direkt über SSH kommuniziert, sodass Sie nur Ihre vorhandenen SSH-Anmeldeinformationen und Ihren Workflow verwenden können.

Wenn Sie derzeit Ihre BMCs mit ipmitool konfigurieren, können Sie Folgendes tun:

Define a Hosts file (Hosts-Datei definieren) - Hiermit wird Ansible mitgeteilt, welche Hosts (in diesem Fall) der BMC- Gruppe angehören und auf welchen Hosts etwas ausgeführt werden soll .

[bmc]
192.168.1.100
192.168.1.101
192.168.1.102

Und so weiter ... Sie können in dieser Datei auch Hostnamen verwenden, sofern diese auflösbar sind.

Erstellen Sie dann ein "Playbook", das die Befehle darstellt, die auf jedem Host in einer Hostgruppe ausgeführt werden sollen. Sie möchten diese Art von Top-Down-Verzeichnislayout haben:

ansible/
   playbooks/
      bmc.yml
      roles/
        bmcconfig/
           files/
           handlers/
             main.yml
           tasks/
             main.yml
           templates/
   group_vars/
      all

Ein Playbook enthält Rollen , kleine Konfigurationsabschnitte, die Sie zerlegen und wiederverwenden können.

Also würde ich eine Datei namens erstellen bmc.yml(Alle Ansible-Konfiguration ist in YAML-Dateien)

---
- name: Configure BMC on the hosts
  hosts: bmc
  user: root
  roles: 
    - bmcconfig

Anschließend roles/bmcconfig/tasks/main.ymlkönnen Sie die Befehle auflisten, die auf jedem Host ausgeführt werden sollen, um mit ipmi zu kommunizieren.

---
  - name: Install ipmitool
    apt: pkg=ipmitool state=installed
  - name: Run ipmitool config
    shell: ipmitool -your -options -go -here

Wenn Sie das Playbook ansible-playbook -i hosts bmc.ymlausführen, werden die in tasks/main.ymlfür jede Rolle aufgelisteten Befehle in der Reihenfolge von oben nach unten auf jedem Host ausgeführt, der sich in der bmcHostgruppe in befindethosts

group_vars/all ist eine interessante Datei, mit der Sie Schlüssel-Wert-Paare von Variablen und Werten definieren können, die in Ihren Playbooks verwendet werden können.

so könnte man sowas definieren

ipmitool_password: $512315Adb

In Ihrem group_vars/allund als Ergebnis könnten Sie Folgendes haben:

shell: ipmitool -your -options -go -here --password=${ipmitool_password}

im Spielbuch.

Sie können viel mehr Informationen erfahren, wie die „Module“ zu verwenden - die Komponenten von ansible die Sie erlaubt , Dinge zu tun, wie Sie Ihre eigenen schreiben: D, und so weiter an den ansible Dokumentationsseite .

Tom O'Connor
quelle
12

Ich habe ein kleines Python-Tool geschrieben, um Befehle auf unseren 1000 Maschinen auszuführen (und deren BMCs, Dracs, Ilos und Imms).

Ich habe ein Python-Framework namens vsc-manage geschrieben, in dem ich Befehle ausführen kann, die entweder an den Server oder an die BMC gesendet werden, und dann konfiguriere, welcher Maschinentyp welchen Befehl benötigt.

Ich habe mehrere Klassen, die eine Mischung dieser Befehle kombinieren,

Also für Maschinen mit einer imm wird es zur imm ssh und laufen power off(in einer Art Expect-Skript)

Für unsere Imb Blade Chassis läuft dies auf dem Chassis

power -%(command)s -T system:blade[%(blade)s]

Für einige Dell Dracs wird dies auf dem Betriebssystem (eines Masterknotens) ausgeführt.

idracadm -r %(hostname)s -u root -p '%(password)s' serveraction %(command)s

Für unsere neueren HP-Systeme, die ipmi unterstützen (und ich sehe heutzutage immer mehr), wird dies auf dem Master ausgeführt:

ipmitool -I lanplus -H %(hostname)s -U %(user)s -P '%(password)s' chassis power %(command)s

Wenn neuere Dell-Systeme benötigt werden ipmitool -I open, müssen Sie möglicherweise ein wenig mit dem Protokoll spielen.

Für Einstellungen, die nicht im ipmi-Standard enthalten sind, habe ich einige Dinge aus dem DMTF SMASH CLP implementiert , z. B. das Einschalten der Locator- LED :

start /system1/led1

All dies in einem Befehlszeilentool, das von unseren Laptops ausgeführt werden kann, das eine Verbindung zum richtigen Masterknoten herstellt, den richtigen Befehl für den richtigen Knoten ausführt und die Ausgabe mit einer zusätzlichen Liste von Fehlern zurückgibt, sofern vorhanden (basierend auf Ausgabe auf stderr und / oder exitcode)

Dies hat sich als sehr praktisch erwiesen, und das Hinzufügen von Unterstützung für eine neue Hardwareklasse ist jetzt relativ einfach (da die meisten Anbieter jetzt ipmi und DMTFSMASHCLP vollständig unterstützen).

Dies ist nicht für die Erstkonfiguration geeignet (das BMC muss über eine eindeutige IP-Adresse und ein korrektes Gateway verfügen, aber dies ist das, was uns unsere Lieferanten im Auslieferungszustand liefern müssen), kann aber fast alles andere (auch beliebige Befehle auf dem Host ausführen) System und automatisches Planen von Ausfallzeiten in Icinga / Nagios beim Neustart eines Knotens und / oder gleichzeitiges Bestätigen von 1000 Hosts und Diensten in Icinga / Nagios.

Das Aktualisieren der Firmware von bmc und das Hinzufügen von Support für unsere Switches sind noch ausstehende Probleme, die geplant sind.

AKTUALISIEREN

Da zumindest einige Leute anscheinend interessiert waren, habe ich es heute noch ein letztes Mal poliert und dies unter https://github.com/hpcugent/vsc-manage veröffentlicht

Obwohl dies sehr stark auf unseren eigenen Workflow (quattor und / oder pbs) abzielt, hoffe ich, dass es zumindest interessant sein kann.

Jens Timmerman
quelle
Danke dafür! Gibt es einen Vorteil, den Ihre Arbeit gegenüber etablierten Lösungen wie Ansible hat?
MikeyB
Ich hatte noch nie von Ansible gehört, Will wird sich das definitiv ansehen.
Jens Timmerman
Ansible hat meines Erachtens noch keine Unterstützung für IMPI und DMTF SMASH.
Jens Timmerman
Das ist interessant, Jens. Vielen Dank für das Teilen dieses Projekts. Ansible + vsc-manage sieht im Umgang mit Servern in Massen sehr nützlich aus.
ILIV
ILIV, ich denke, es wäre schön, wenn ich etwas Zeit hätte, um alle Funktionen von vsc-manage zu ansible hinzuzufügen ;-)
Jens Timmerman
3

Ich bin überrascht, dass niemand MAAS ( http://maas.io/ ) erwähnt hat, das genau das tut, wonach Sie suchen. Es kann BMCs automatisch konfigurieren und verwalten und darüber hinaus jedes Betriebssystem auf den Knoten bereitstellen, die Sie in das System aufgenommen haben. Es verfügt über eine Web-Benutzeroberfläche und eine RESTful-API und kann in jedes Automatisierungssystem integriert werden.

Wenn eine Maschine PXE zum ersten Mal startet, verwendet MAAS In-Band-IPMI, um Anmeldeinformationen automatisch für Sie einzurichten. Ab diesem Zeitpunkt können Sie eine Maschine einfach aus der Ferne starten und herunterfahren.

Weitere Informationen finden Sie in der Dokumentation zu MAAS BMC Power Types , in der beschrieben wird, wie Sie einen BMC für einen in MAAS eingetragenen Knoten manuell konfigurieren.

kiko
quelle
Ein guter Tipp, danke. Sieht ziemlich cool aus. Ubuntus MAAS scheint einiges an Provisioning und Lifecycle-Management zu leisten und scheint einige nützliche IPMI-Management-Tools zu haben. Wir verwenden The Foreman bereits, was einen Teil davon bereits erledigt. Das IPMI-Management des Foremans ist jedoch recht schwach und bietet keine Gruppierung oder Organisationsstruktur, hat aber zumindest etwas. Wir verwenden es in Kombination mit einer Handvoll anderer Tools, um das gesamte Kit und Caboodle zu verwalten.
Stefan Lasiewski
Beachten Sie, dass Foreman ab Version 1.1 Organisationen und Standorte unterstützt (siehe projects.theforeman.org/projects/foreman/wiki/… ). Sie können diese Funktionen (zusammen mit Hostgruppen) verwenden, um eine einigermaßen differenzierte (auch hierarchische mit Unterstützung für Parameter- oder Schlüsselwertpaare) Hostsammlung bereitzustellen.
mxmader