Neuigkeiten von trion.
Immer gut informiert.

PostgreSQL mit Helm in Kubernetes betreiben

Im vorherigen Artikel PostgreSQL in Kubernetes und OpenShift wurden die Grundlagen zum Betrieb von PostgreSQL in Containern und Kubernetes vorgestellt.
Für eine einzelne Umgebung funktioniert das Verfahren soweit ganz gut. Wenn jedoch verschiedene Varianten, z.B. für mehrere Umgebungen, bereitgestellt werden sollen, steigt der Aufwand und auch das Risiko von Configuration Drift. Helm tritt an, um dabei Abhilfe zu schaffen.

Bei Helm handelt es sich um einen Package-Manager für Kubernetes. Von https://helm.sh/ kann Helm bezogen und installiert werden.

Für verschiedene Anwendungen werden Helm Charts angeboten, die die zu verwaltenden Objekte in Kubernetes (Deployments, Services etc.) und zugehörigen Konfigurationsparameter beschreiben.

Helm Charts werden in Repositories bereitgestellt. Darüber können auch eigene Helm Charts publiziert werden.
Für PostgreSQL gibt es z.B. von Bitnami vorbereitete Container Images und Helm Charts, die über charts.bitnami.com/bitnami bezogen werden können. Das Repository wird mit helm repo add angelegt.

Aktivierung von Helm Repository
$ helm repo add bitnami https://charts.bitnami.com/bitnami

So hinzugefügte Repositories können nach Stichworten durchsucht werden. Alternativ gibt es den Hub unter https://artifacthub.io/ (ehemals https://hub.helm.sh/ ), in dem u.a. auch Helm Charts abgelegt sind.

Helm Chart Suche in Repositories
$ helm search repo postgresql
NAME                 	CHART VERSION	APP VERSION	DESCRIPTION
bitnami/postgresql   	10.16.2      	11.14.0    	Chart for PostgreSQL, an object-relational data...
bitnami/postgresql-ha	8.2.8        	11.14.0    	This PostgreSQL cluster solution includes the P...

Wenn ein passender Chart, hier für PostgreSQL, gefunden wurde, kann die Installation beginnen. Die Anpassung an eine Umgebung erfolgt durch Setzen von Variablen, mit denen der Helm Chart konfiguriert wird. Dabei hängen die zur Verfügung stehenden Variablen und Werte zum einen vom jeweiligen Chart und zum anderen von der bereitzustellenden Anwendung bzw. den verwendeten Container Images ab.
Bei dem Bitnami PostgreSQL Image existiert z.B. das Flag volumePermissions.enabled. Wird es aktiviert, so wird ein initContainer erzeugt, mit dem die Berechtigungen des verwendeten Volumes angepasst werden. Da der Init-Container als root läuft, ist das Verhalten standardmäßig deaktiviert.

Default Installation von PostgreSQL mit Helm
$ helm install pg bitnami/postgresql \
 --set volumePermissions.enabled=true

Ein Upgrade von Helm Charts und damit verbundenen Anwendungen ist ebenfalls sehr leicht möglich: Nachdem mit helm repo update die Chart Metadaten aktualisiert werden, kann durch helm upgrade eine Aktualisierung vorgenommen werden.
Das funktioniert am besten mit zustandslosen Anwendungen. Gerade PostgreSQL ist das nicht, und das Bitnami Image hat kein automatisches Konzept, um eine Migration der Datenbankdaten auf eine neuere PostgreSQL Version vorzunehmen. Die Umsetzung davon könnte theoretisch mit Helm Hooks erfolgen oder auch Init-Containern.

Fazit

Helm bringt viele Features mit, die den Lebenszyklus typischer Anewndungen in Kubernetes unterstützen. Am Beispiel PostgreSQL sieht man die Vorteile, aber auch die Einschränkungen von Helm: Eine zustandsbehaftete Anwendung, wie PostgreSQL, benötigt eine gewisse Betreuung wenn es um einen langfristigen, kontinuierlichen Betrieb geht.

Lassen sich regelmäßige Datensicherungen und Wartungsaufgaben wie VACUUM noch gut durch Kubernetes Jobs umsetzen, wird die Verwaltung von PostgreSQL HA Clustern und kontrollierte Versionsupgrades schon kniffliger. Für solche speziellen Fälle lohnt der Griff zu einem Kubernetes Operator.
Und der kann dann wiederum durch Helm verwaltet werden.




Zu den Themen Kubernetes, Docker und Cloudarchitektur bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:

Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.

Feedback oder Fragen zu einem Artikel - per Twitter @triondevelop oder E-Mail freuen wir uns auf eine Kontaktaufnahme!

Zur Desktop Version des Artikels