Nextcloud Stufe 1: Datenbank¶
Wir richten als Erstes die Datenbank ein, die Nextcloud zum Betrieb benötigt. Schritt 0 ist dabei, einen Namespace
namens "nextcloud" anzulegen. Benutze hierfür kubectl.
Damit wir fortan nicht in jedem Befehl immer den Namespace mitgeben müssen, in dem wir uns befinden, können wir kubectl den neuen Standard-Namespace mitteilen:
kubectl config set-context --current --namespace=nextcloud
Deine Aufgabe ist es nun, ein Kubernetes-Manifest zu erstellen, das eine MariaDB-Datenbank bereitstellt. Das Manifest soll aus zwei Teilen bestehen: einem StatefulSet, das die MariaDB-Datenbank konfiguriert und bereitstellt, und einem Service, der den Zugriff auf die Datenbank ermöglicht.
StatefulSet erstellen¶
- Definiere das StatefulSet mit dem Namen
nextcloud-dbim Namespacenextcloud. - Setze die Anzahl der Replikate (replicas) auf
1, da wir nur eine Instanz der Datenbank benötigen. - Lege ein Container-Template für MariaDB an, das das neueste MariaDB-Image (
mariadb:latest) verwendet. - Füge Umgebungsvariablen hinzu, um die Datenbank zu konfigurieren:
env:
- name: MYSQL_ROOT_PASSWORD
value: "mysecretpassword"
- name: MYSQL_DATABASE
value: "nextcloud"
- name: MYSQL_USER
value: "nextcloud"
- name: MYSQL_PASSWORD
value: "nextcloudpassword"
- Definiere einen Volume-Mount, der sicherstellt, dass die Datenbankdaten im Verzeichnis
/var/lib/mysqlgespeichert werden. - Erstelle ein VolumeClaimTemplate, das ein Persistent Volume mit einer Größe von
10Gianfordert und sicherstellt, dass es nur von einem Knoten gleichzeitig beschrieben werden kann (AccessMode:ReadWriteOnce).
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
Service erstellen¶
- Definiere einen Service mit dem Namen
nextcloud-dbim Namespacenextcloud. - Setze die
clusterIPaufNone, sodass jeder Pod im StatefulSet einen eigenen DNS-Namen erhält. - Lege einen Port fest, über den der Datenbank-Service erreichbar ist (Port
3306).
Manifest fertigstellen¶
Achte darauf, dass das Manifest syntaktisch korrekt ist und den oben genannten Anforderungen entspricht.
Das Ergebnis sollte ein YAML-Dokument sein, das die Konfiguration für ein StatefulSet und einen dazugehörigen Service beschreibt. Wende das Manifest an und prüfe anschließend, ob das StatefulSet wie erwartet läuft.
Ergebnis prüfen¶
Starte einen Debug-Pod und prüfe, ob der Service erreichbar ist und eine IP für den Pod zurückliefert.
kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
#/ nslookup nextcloud-db.nextcloud.svc.cluster.local
Viel Erfolg!