Zum Inhalt

Nextcloud

Die letzte und wichtigste Komponente, die noch fehlt, ist Nextcloud selbst.

In nextcloud.yaml habe ich euch ein vorgefertigtes Deployment bereitgestellt. Aber da ihr jetzt schon etwas fortgeschritten seid, fehlt noch etwas! Das Deployment verwendet nämlich kein PersistentVolume. Nach einem Update wären alle Daten weg!

nextcloud.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextcloud
  namespace: nextcloud
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nextcloud
  template:
    metadata:
      labels:
        app: nextcloud
    spec:
      containers:
        - name: nextcloud
          image: nextcloud:27.1.4
          ports:
            - containerPort: 80
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
          livenessProbe:
            exec:
              command: ["sh", "-c", "true"]
            initialDelaySeconds: 60
            periodSeconds: 20
          env:
            - name: MYSQL_HOST
              value: "nextcloud-db"
            - name: MYSQL_DATABASE
              valueFrom:
                secretKeyRef:
                  name: nextcloud-db-secret
                  key: MYSQL_DATABASE
            - name: MYSQL_USER
              valueFrom:
                secretKeyRef:
                  name: nextcloud-db-secret
                  key: MYSQL_USER
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: nextcloud-db-secret
                  key: MYSQL_PASSWORD
          resources:
            requests:
              cpu: "100m"
              memory: "256Mi"
            limits:
              cpu: "500m"
              memory: "512Mi"

Wir müssen uns also darum kümmern, ein PersistentVolume anzufragen und zu mounten. Als Erstes braucht ihr einen PersistentVolumeClaim:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nextcloud-pvc
  namespace: nextcloud
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Baut nun an richtiger Stelle im Manifest den Claim ein:

volumes:
  - name: nextcloud-data
    persistentVolumeClaim:
      claimName: nextcloud-pvc

Das entstehende Volume müsst ihr schließlich noch mounten:

volumeMounts:
  - name: nextcloud-data
    mountPath: /var/www/html

Wo genau diese Schnipsel eingefügt werden müssen, werdet ihr selbst herausfinden. Dabei kann euch die Dokumentation helfen – oder die Aufgabe zu Volumes von gestern.

Wenn ihr fertig seid, fehlt außerdem noch ein Service, der Nextcloud nach außen verfügbar macht. Nehmt euch dazu den Service von "PhpMyAdmin" als Vorlage und passt die Namen sowie Labels an, sodass sie zum Nextcloud-Deployment passen.

Wenn alles fertig ist, könnt ihr mit kubectl die Datei anwenden und danach mit minikube einen Tunnel zu eurem Service aufbauen, um Nextcloud zu testen.

Viel Erfolg!