Per se sind Daten in einem Pod nicht persistent, was u.a. auch in unserem Beispiel der Fall ist. Verschwindet also unser MariaDB-Pod bspw. aufgrund einer Änderung des Image, sind die bis zuvor noch vorhandenen Daten im neuen Pod nicht mehr vorhanden. Um genau dies zu verhindern hängen wir nun Persistent Storage an unseren MariaDB-Pod an.
Das Anhängen von Persistent Storage geschieht eigentlich in zwei Schritten. Der erste Schritt beinhaltet als erstes das Erstellen eines sog. PersistentVolumeClaim für unser Projekt. Im Claim definieren wir u.a. dessen Namen sowie Grösse, also wie viel persistenten Speicher wir überhaupt haben wollen.
Der PersistentVolumeClaim stellt allerdings erst den Request dar, nicht aber die Ressource selbst. Er wird deshalb automatisch durch OpenShift mit einem zur Verfügung stehenden Persistent Volume verbunden, und zwar mit einem mit mindestens der angeforderten Grösse. Sind nur noch grössere Persistent Volumes vorhanden, wird eines dieser Volumes verwendet und die Grösse des Claim angepasst. Sind nur noch kleinere Persistent Volumes vorhanden, kann der Claim nicht erfüllt werden und bleibt solange offen, bis ein Volume der passenden Grösse (oder eben grösser) auftaucht.
Im zweiten Schritt wird der zuvor erstellte PVC im richtigen Pod eingebunden.
In Lab 6 bearbeiteten wir die DeploymentConfig, um die Readiness Probe einzufügen.
Dasselbe tun wir nun für das Persistent Volume.
Im Unterschied zu Lab 6 können wir aber mit oc set volume
die DeploymentConfig automatisch erweitern.
Wir verwenden dafür das Projekt aus Lab 9 [USERNAME]-dockerimage.
Tipp
oc project [USERNAME]-dockerimageDer folgende Befehl führt beide beschriebenen Schritte zugleich aus, er erstellt also zuerst den Claim und bindet ihn anschliessend auch als Volume im Pod ein:
oc set volume dc/mariadb --add --name=mariadb-data --type pvc \
--claim-name=mariadbpvc --claim-size=256Mi --overwrite
Note: Durch die veränderte DeploymentConfig deployt OpenShift automatisch einen neuen Pod. D.h. leider auch, dass das vorher erstellte DB-Schema und bereits eingefügte Daten verloren gegangen sind.
Unsere Applikation erstellt beim Starten das DB Schema eigenständig.
Tipp: Redeployen Sie den Applikations-Pod mit:
oc rollout latest example-spring-boot
Mit dem Befehl oc get persistentvolumeclaim
, oder etwas einfacher oc get pvc
, können wir uns nun den im Projekt frisch erstellten PersistentVolumeClaim anzeigen lassen:
oc get pvc
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
mariadbpvc Bound pv34 1Gi RWO,RWX 14s
Die beiden Attribute Status und Volume zeigen uns an, dass unser Claim mit dem Persistent Volume pv34 verbunden wurde.
Mit dem folgenden Befehl können wir auch noch überprüfen, ob das Einbinden des Volume in die DeploymentConfig geklappt hat:
oc set volume dc/mariadb --all
deploymentconfigs/mariadb
pvc/mariadbpvc (allocated 1GiB) as mariadb-data
mounted at /var/lib/mysql/data
Wiederholen Sie Lab-Aufgabe 9.4.
Skalieren Sie nun den MariaDB-Pod auf 0 und anschliessend wieder auf 1. Beobachten Sie, dass der neue Pod die Daten nicht mehr verliert.
Ende Lab 10