Nach vielen erfolgreichen Betriebsjahren haben wir beschlossen, unsere in die Jahre gekommene VM-Verwaltungssoftware und die ihr zugrunde liegende Server-Hardware zu ersetzen. Die massgeschneiderte Softwarelösung - einst der Stolz der nine Ingenieure - bietet nicht mehr die erforderlichen Funktionen um unseren Kunden wettbewerbsfähige, VM-basierte Managed Services anzubieten. Komponenten wie Festplatten beginnen ernsthafte Alterserscheinungen zu zeigen. Mehr dazu in einem separaten Blog-Beitrag.
Anstatt in die Public Cloud zu investieren haben wir uns nach reiflicher Überlegung entschieden, Nutanix als Ersatz für unsere Infrastruktur zu verwenden. Alles sah vielversprechend aus, aber dann wurden wir mit einer grossen Herausforderung in der Software Entwicklung konfrontiert. Neben der herausfordernden Aufgabe, die kundenspezifische Software mit Terraform und einem GitOps-basierten Workflow zu ersetzen, mussten wir einen Weg finden wie Puppet, unsere Automatisierungssoftware, alle erforderlichen Informationen innerhalb dieser neuen Umgebung bekommt.
Wenn Puppet den Managed Service eines Kunden und den unterstützenden Tech-Stack, wie z.B. Monitoring Services, einrichtet. muss es wissen, zu welchem Kunden der Dienst gehört. Aktuell wird dies so gelöst, dass per Cron-Job periodisch ein Skript ausgeführt wird. Dieses schreibt eine Datei mit der Kundeninformation und anderen Metadaten in das Dateisystem der VM. Dies funktionierte akzeptabel und das gleiche Konzept wurde sogar auf die Unterstützung von AWS-basierten Instanzen ausgeweitet.
Wir hatten ein paar Ideen, wie wir dieses Problem lösen könnten, ohne die bestehende Lösung zu verwenden, z.B. mittels Cloud-init oder einer direkten Verbindung von Puppet zur Nutanix-Appliance via API - alle wurden jedoch aufgrund gravierender Nachteile ausgeschlossen. Nach weiteren Überlegungen, sowie einigen Skizzen am Whiteboard, entstand MEKO (Metadaten-Kollektor).
Meko nutzt Caching für eine bessere Performance und funktioniert auch dann, wenn der Provider keine Daten zur Verfügung stellen kann.
Meko wird von Facter verwendet, welches in Puppet eingebaut ist und die Verwendung von externen Daten innerhalb von Puppet erlaubt. Wir verwenden Facter bereits zum Laden dateibasierter Daten, so dass wir es nur noch für die Kommunikation mit der REST-API über HTTPS konfigurieren mussten. Da Puppet weiss, auf welcher Infrastruktur es läuft, war es einfach, den Erkennungsteil in Facter zu belassen und dann MEKO mitzuteilen, welches Backend zur Auflösung der Daten verwendet werden soll.
Mekound die erforderlichen Änderungen an Puppet wurden ohne Probleme in die Produktivumgebung überführt.
Wir sind sehr zufrieden, dass dies so gut geklappt hat und freuen uns nun auf die baldige Einführung von Nutanix in unserem zweiten Rechenzentrum.
Nie mehr ein Update verpassen!