Konfigurationsmanagement

Wie Konfigurationsmanagement Entwicklerteams beim Aufbau robuster und stabiler Systeme hilft

Ian Buchanan Ian Buchanan

In den 1950er Jahren entwickelte das US-Verteidigungsministerium eine Technologiemanagementdisziplin zum Verfolgen von Änderungen in der Entwicklung komplexer Systeme. Es gab diesem System und verschiedenen Iterationen davon sehr technische Namen, bis es 2001 einen konsolidierten Leitfaden veröffentlichte, der das Technologiemanagementsystem etablierte, das wir heute als Konfigurationsmanagement kennen. Inzwischen wird das Konfigurationsmanagement nicht nur vom Verteidigungsministerium, sondern auch in der Softwareentwicklung, im IT-Servicemanagement, im Bauingenieurwesen, in der Industrietechnik und vielen weiteren Branchen eingesetzt.

Was ist Konfigurationsmanagement?

Diagramm: Konfigurationsmanagement

Konfigurationsmanagement ist ein Systementwicklungsprozess zur Erzielung konsistenter Produktattribute während des gesamten Lebenszyklus eines Produkts. In der Technologiewelt ist das Konfigurationsmanagement ein IT-Managementprozess, der einzelne Konfigurationselemente eines IT-Systems verfolgt. IT-Systeme bestehen aus IT-Assets, die sich in ihrer Granularität unterscheiden. Ein IT-Asset kann eine Software, ein Server oder ein Cluster von Servern sein. Im Folgenden konzentrieren wir uns auf das Konfigurationsmanagement, da es IT-Software-Assets und CI/CD von Software-Assets direkt betrifft.

Softwarekonfigurationsmanagement ist ein Systementwicklungsprozess, der Änderungen an den Metadaten einer Softwaresystemkonfiguration verfolgt und überwacht. In der Softwareentwicklung wird das Konfigurationsmanagement häufig neben der Versionskontrolle und einer CI/CD-Infrastruktur verwendet. Dieser Beitrag konzentriert sich auf seine moderne Anwendung und den Einsatz in agilen CI/CD-Software-Umgebungen.

Warum ist Konfigurationsmanagement wichtig?

Das Konfigurationsmanagement hilft Entwicklerteams beim Aufbau robuster und stabiler Systeme durch den Einsatz von Tools, die Updates von Konfigurationsdaten automatisch verwalten und überwachen. Komplexe Softwaresysteme bestehen aus Komponenten, die sich in der Größe und Komplexität unterscheiden. Sehen wir uns als konkreteres Beispiel eine Microservice-Architektur an. Jeder Service in einer Microservice-Architektur verwendet Konfigurationsmetadaten, um sich selbst zu registrieren und zu initialisieren. Einige Beispiele für Metadaten einer Softwarekonfiguration sind:

  • Spezifikationen der rechnergestützten Hardware-Ressourcenzuteilung für CPU, RAM usw.
  • Endpunkte, die externe Verbindungen zu anderen Services, Datenbanken oder Domains angeben
  • Vertrauliche Daten wie Passwörter und Verschlüsselungsschlüssel

Diese Konfigurationswerte werden leicht zur Nebensache, was zu einer unorganisierten und verstreuten Konfiguration führt. Dies ist vergleichbar mit Passwörtern und URLs, die auf unzähligen Haftnotizzetteln in einem Büro herumfliegen. Das Konfigurationsmanagement löst diese Herausforderung, indem es eine zentrale Informationsquelle für die Konfiguration schafft.

Git ist eine fantastische Plattform für die Verwaltung von Konfigurationsdaten. Durch das Verschieben von Konfigurationsdaten in ein Git-Repository ist eine Versionskontrolle möglich und das Repository kann als zentrale Informationsquelle fungieren. Die Versionskontrolle löst auch ein anderes Konfigurationsproblem: unerwartete Änderungen. Die Verwaltung unerwarteter Änderungen mithilfe von Code-Prüfung und Versionskontrolle trägt zur Minimierung von Ausfallzeiten bei.

Konfigurationswerte werden häufig hinzugefügt, entfernt oder geändert. Ohne Versionskontrolle kann dies zu Problemen führen. Ein Teammitglied kann einen Wert für die Hardwarezuweisung optimieren, damit die Software auf seinem persönlichen Laptop effizienter läuft. Wenn die Software später in einer Produktionsumgebung bereitgestellt wird, kann diese neue Konfiguration einen suboptimalen Effekt haben oder zu einem Absturz führen.

Versionskontrolle und Konfigurationsmanagement lösen dieses Problem, indem sie Konfigurationsänderungen sichtbar machen. Wenn Änderungen an den Konfigurationsdaten vorgenommen werden, verfolgt das Versionskontrollsystem diese. Dadurch können Teammitglieder einen Audit-Trail der Änderungen überprüfen.

Die Versionskontrolle der Konfiguration ermöglicht eine Rollback- oder "Rückgängig"-Funktion für die Konfiguration, wodurch unerwartete Abstürze vermieden werden. Die auf die Konfiguration angewendete Versionskontrolle kann schnell auf einen letzten bekannten stabilen Zustand zurückgesetzt werden.

Wie passt das Konfigurationsmanagement zu DevOps, CI/CD und Agile?

Konfigurationsdaten waren früher schwer zu erkennen und können leicht zur Nebensache werden. Sie sind kein richtiger Code, daher werden sie nicht sofort in die Versionskontrolle aufgenommen und sie sind keine erstklassigen Daten. Deshalb werden sie auch nicht in einer primären Datenbank gespeichert. Die traditionelle Systemadministration im kleinen Maßstab erfolgt in der Regel anhand einer Sammlung von Skripten und Ad-hoc-Prozessen. Konfigurationsdaten können manchmal übersehen werden, sie sind jedoch für den Systembetrieb von entscheidender Bedeutung.

Du zunehmende Verbreitung von Cloud-Infrastrukturen hat zur Entwicklung und Einführung neuer Muster des Infrastrukturmanagements geführt. Komplexe, cloudbasierte Systemarchitekturen werden durch die Verwendung von Konfigurationsdatendateien verwaltet und bereitgestellt. Diese neuen Cloud-Plattformen ermöglichen es Teams, die Hardwareressourcen und Netzwerkverbindungen anzugeben, die sie über personen- und maschinenlesbare Datendateien wie YAML bereitstellen müssen. Die Datendateien werden dann gelesen und die Infrastruktur wird in der Cloud bereitgestellt. Dieses Muster wird Infrastructure as Code (IAC) genannt.

DevOps-Konfigurationsmanagement

In den ersten Jahren der Entwicklung von Internetanwendungen wurden Hardwareressourcen- und Systemadministration hauptsächlich manuell durchgeführt. Systemadministratoren haben mit Konfigurationsdaten gerungen, während sie Hardwareressourcen basierend auf Konfigurationsdaten manuell bereitstellten und verwalteten.

Das Konfigurationsmanagement ist ein zentraler Bestandteil des DevOps-Lebenszyklus. Die DevOps-Konfiguration ist die Weiterentwicklung und Automatisierung der Rolle der Systemadministration und bringt die Automatisierung in das Infrastrukturmanagement und -Deployment.

Die DevOps-Konfiguration verlagert auch die Verantwortung für die Systemadministration zu den Softwareentwicklern. Unternehmen nutzen dies heute, um Softwareentwickler zu befähigen, die benötigten Ressourcen bei Bedarf anzufordern und bereitzustellen. Dadurch wird ein potenzieller Engpass bei organisatorischen Abhängigkeiten eines Softwareentwicklerteams beseitigt, das auf Ressourcen eines separaten Systemadministrationsteams wartet.

CI/CD-Konfigurationsmanagement

CI/CD-Konfigurationsmanagement nutzt Code-Prüfungs-Workflows auf Basis von Pull-Anfragen, um das Deployment von Codeänderungen in einem Live-Softwaresystem zu automatisieren. Derselbe Workflow kann auf Konfigurationsänderungen angewendet werden. CI/CD kann so eingerichtet werden, dass genehmigte Konfigurationsänderungsanfragen sofort auf einem laufenden System bereitgestellt werden können. Ein perfektes Beispiel für diesen Prozess ist ein GitOps-Workflow.

Agiles Konfigurationsmanagement

Das Konfigurationsmanagement ermöglicht agilen Teams, die Konfigurationsarbeit klar zu selektieren und zu priorisieren. Beispiele für Konfigurationsarbeiten sind Aufgaben wie:

  • Updates der SSL-Zertifikate für die Produktion
  • Hinzufügen eines neuen Datenbank-Endpoints
  • Ändern des Passworts für Entwicklungs-, Staging- und Produktions-E-Mail-Services
  • Hinzufügen von API-Schlüsseln für eine neue Drittanbieterintegration

Sobald eine Konfigurationsmanagement-Plattform eingerichtet ist, haben Teams Einblick in die Arbeit, die für Konfigurations-Tasks erforderlich ist. Aufgaben des Konfigurationsmanagements können als Abhängigkeiten anderer Aufgaben identifiziert und im Rahmen von agilen Sprints dementsprechend erledigt werden.

Tools für das Konfigurationsmanagement

Tools für das Konfigurationsmanagement

Git

Git ist das branchenführende Versionskontrollsystem zur Verfolgung von Codeänderungen. Das Hinzufügen von Konfigurationsmanagementdaten zusammen mit Code in einem Git-Repository bietet eine ganzheitliche Ansicht der Versionskontrolle eines gesamten Projekts. Git ist ein grundlegendes Tool für das übergeordnete Konfigurationsmanagement. Die folgende Liste anderer Tools für das Konfigurationsmanagement ist dafür vorgesehen, in einem Git-Repository gespeichert zu werden und die Versionskontrolle von Git zu nutzen.

Docker

Docker führte eine Containerisierung ein, die eine fortschrittliche Form des Konfigurationsmanagements darstellt – wie eine Konfigurationssperre. Docker basiert auf Konfigurationsdateien namens Dockerfiles, die eine Liste von Befehlen enthalten, die ausgewertet werden, um den erwarteten Snapshot des Betriebssystemzustands zu rekonstruieren. Docker erstellt aus diesen Dockerfiles Container – Snapshots einer vorkonfigurierten Anwendung. Dockerfiles werden für die Versionsverfolgung in ein Git-Repository committet und benötigen zusätzliches Konfigurationsmanagement für das Deployment in der Infrastruktur.

Terraform

Terraform ist eine Open-Source-Konfigurationsmanagement-Plattform von Hashicorp. Terraform verwendet IaC zur Bereitstellung und Verwaltung von Clustern, Cloud-Infrastrukturen oder Services. Terraform unterstützt Amazon Web Services (AWS), Microsoft Azure und andere Cloud-Plattformen. Jede Cloud-Plattform verfügt über ihre eigene Abbildung und Schnittstelle für gemeinsame Infrastrukturkomponenten wie Server, Datenbanken und Warteschlangen. Terraform erstellt eine Abstraktionsebene von Konfigurationstools für Cloud-Plattformen, die es Teams ermöglichen, Dateien zu schreiben, die reproduzierbare Definitionen ihrer Infrastruktur sind.

Ansible, SaltStack, Chef, Puppet

Ansible, SaltStack und Chef sind IT-Automatisierungs-Frameworks. Diese Frameworks automatisieren viele der herkömmlichen Prozesse von Systemadministratoren. Jedes Framework verwendet eine Reihe von Konfigurationsdatendateien – normalerweise YAML oder XML –, die von einer ausführbaren Datei ausgewertet werden.

Die Konfigurationsdatendateien geben eine Abfolge von Aktionen an, die zur Konfiguration eines Systems durchgeführt werden sollen. Die Aktionen werden dann von der ausführbaren Datei ausgeführt. Die ausführbare Datei unterscheidet sich je nach System in der Sprache – Ansible und SaltStack basieren auf Python und Chef auf Ruby. Dieser Workflow ähnelt dem Ausführen von Ad-hoc-Shell-Skripten, bietet jedoch durch die jeweiligen Plattformökosysteme eine strukturiertere und verfeinerte Erfahrung. Diese Tools ermöglichen die Automatisierung, die zum Erreichen von CI/CD erforderlich ist.

So implementiert man Konfigurationsmanagement

Identifikation

Die erste Maßnahme im Hinblick auf das Konfigurationsmanagement ist das Sammeln von Informationen. Konfigurationsdaten sollten für alle verwendeten Komponenten und Services aggregiert und aus verschiedenen Anwendungsumgebungen, Entwicklung, Staging und Produktion zusammengestellt werden. Alle vertraulichen Daten wie Passwörter und Schlüssel sollten identifiziert und sicher verschlüsselt und gespeichert werden. An diesem Punkt sollten Konfigurationsdaten in Datendateien organisiert werden, auf die als zentrale Informationsquelle verwiesen werden kann.

Baseline

Nachdem die Konfigurationsdaten zusammengefasst und organisiert wurden, kann eine Baseline erstellt werden. Eine Baseline-Konfiguration ist ein bekannter Konfigurationsstatus, der die abhängige Software ohne Fehler erfolgreich betreibt. Diese Baseline wird normalerweise erstellt, indem die Konfiguration einer funktionierenden Produktionsumgebung überprüft und diese Konfigurationseinstellungen übernommen werden.

Versionskontrolle

Dein Entwicklungsprojekt sollte ein Versionskontrollsystem verwenden. Wenn es das nicht tut, installiere Git, initialisiere ein Repository für das Projekt und füge ihm die Konfigurationsdatendateien hinzu. Vorsicht beim Hinzufügen von Konfigurationsdaten zu einem Repository: Stelle sicher, dass vertrauliche Daten wie Passwörter oder Schlüssel mit einem externen Schlüssel verschlüsselt werden. Vertrauliche Daten, die versehentlich an ein Repository gebunden werden, sind ein großes Risiko. Sie müssen aus dem Repository-Verlauf entfernt werden, um nicht Gefahr zu laufen, dass sie ausgenutzt werden.

Audit-Funktionen

Die Organisation und das Hinzufügen von Konfigurationsdaten zu einem Repository ermöglichen die Zusammenarbeit und einen Einblick in die Systemkonfiguration. Der beliebte Pull-Anfragen-Workflow, den Softwareteams zum Überprüfen und Bearbeiten von Code verwenden, kann dann auf Konfigurationsdatendateien angewendet werden. Dies hilft beim Aufbau eines Audit- und Buchhaltungssystems. Alle an der Konfiguration vorgenommenen Änderungen müssen vom Team überprüft und akzeptiert werden. Dies erhöht das Verantwortungsgefühl und macht Konfigurationsänderungen transparenter.

Fazit

Das Konfigurationsmanagement ist ein notwendiges Werkzeug für die Verwaltung komplexer Softwaresysteme. Mangelndes Konfigurationsmanagement kann zu ernsthaften Problemen bei der Zuverlässigkeit, Verfügbarkeit und Skalierbarkeit eines Systems führen. Viele aktuelle Softwareentwicklungstools verfügen über integrierte Konfigurationsmanagementfunktionen. Bitbucket bietet ein leistungsstarkes System für das Konfigurationsmanagement, das auf Git-Workflows für Pull-Anfragen und CI/CD-Pipelines basiert.