Nextcloud Konfiguration mit Kustomize

27 November, 2024

Joshua Hartmann
Joshua Hartmann
Systems Engineer

Joshua hat im Sommer 2023 seine Ausbildung zum Fachinformatiker für Systemintegration bei den NETWAYS Web Services erfolgreich abgeschlossen. Heute ist er ein wichtiger Teil des Teams, das sich mit großer Hingabe um die Kundenbetreuung und die kontinuierliche Weiterentwicklung der SaaS-Apps kümmert. Neben seinem musikalischen Talent am Klavier hat Joshua eine Leidenschaft für Wintersport und findet auch Freude im Gaming. Doch am allerliebsten verbringt er seine Zeit mit seiner besseren Hälfte, denn sie ist für ihn das größte Glück.

von | Nov. 27, 2024

In dieser Anleitung zeigen wir dir, wie du deine Nextcloud Konfiguration mit Kustomize auf einem Kubernetes-Cluster umsetzen kannst.

Hinweis: Diese Anleitung ist nicht für den produktiven Einsatz gedacht. Sie dient nur als grundlegende Illustration, wie du Anwendungen mit Kustomize anpassen kannst.

Voraussetzungen

Was ist Kustomize?

Kustomize ist ein Open-Source-Tool für die Verwaltung von Kubernetes-Konfigurationen. Es ermöglicht dir, Objekte wie DeploymentsDaemonSetsServices und ConfigMaps für verschiedene Umgebungen zu ändern, ohne die ursprünglichen YAML-Dateien zu verändern.

Im Gegensatz zum herkömmlichen Ansatz, bei dem für jede Umgebung separate YAML-Dateien erstellt werden, vermeidet Kustomize Redundanz und vereinfacht die Verwaltung. Es ist direkt in kubectl integriert und erleichtert so die Verwaltung und Bereitstellung von Kubernetes-Ressourcen.

Kustomize wurde speziell für Kubernetes entwickelt und wird von dessen sig-cli Community unterstützt.

Schlüsselkonzepte in Kustomize

Kustomize fußt auf zwei Hauptkonzepten:

  1. Base: Grundlegende YAML-Dateien, die für alle Umgebungen geteilt werden.
  2. Overlay: Umgebungsspezifische Anpassungen.

Durch das Anwenden der Overlays der YAML-Dateien erstellst du eine individuelle Konfiguration:

Base + Overlay = Customized Manifest

Verzeichnisstruktur

Alle Dateien für die folgende Konfiguration sind im GitHub-Repository zu finden. Öffne die Ordner, um das vollständige Manifest anzuzeigen, das mit Kustomize angepasst wird. Alle Änderungen werden in der Datei kustomization.yaml vorgenommen.

Verzeichnisübersicht

Lege los mit der Nextcloud Konfiguration mit Kustomize

Im Baseverzeichnis gibt es bereits eine Datei kustomization.yaml, die definiert, welche Ressourcen auf den Cluster angewendet werden sollen:

resources:
  - './nextcloud/namespace.yaml'
  - './nextcloud/pvc.yaml'
  - './nextcloud/service.yaml'
  - './nextcloud/deployment.yaml'
  - './nextcloud/ingress.yaml'
  - './mariadb/pvc.yaml'
  - './mariadb/service.yaml'
  - './mariadb/statefulset.yaml'
  - './redis/deployment.yaml'
  - './redis/service.yaml'
base/nextcloud-deployment/kustomization.yaml

Um das Manifest zu ändern, benötigen wir später eine zusätzliche kustomization.yaml, um Secrets und ConfigMaps zu erzeugen.

Definition von Namespaces und Ressourcen

Zunächst geben wir den Namespace an, in dem Nextcloud bereitgestellt werden soll. Wie in der Base referenzieren wir das Nextcloud Deployment und die Datei secret.yaml im selben Verzeichnis:v

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: nextcloud-deployment
resources:
  - ../../base/nextcloud-deployment
  - secret.yaml
environment/development/kustomization.yaml

Anpassung des Ingress

Das Manifest enthält einen Ingress, der derzeit eine Beispiel-Domäne verwendet. Um die Domäne zu ändern, verwenden wir Patches.

Patch-Typen in Kustomize

Kustomize unterstützt zwei Arten von Patches:

  1. Strategic Merge Patch:Fügt Felder in Kubernetes-Ressourcen hinzu oder ändert sie, indem die Patch-Datei mit der vorhandenen Konfiguration zusammengeführt wird.
  2. JSON-Patch: Ermöglicht präzise Änderungen, wie das Hinzufügen, Entfernen oder Ersetzen von Feldern (basierend auf der JSON Patch-Spezifikation RFC 6902).

In diesem Beispiel verwenden wir einen JSON-Patch, um die Domäne im Ingress zu aktualisieren:

patches:
  - patch: |-
      - op: replace
        path: /spec/rules/0/host
        value: my-nextcloud.works.com
      - op: replace
        path: /spec/tls/0/hosts/0
        value: my-nextcloud.works.com
        target:
        kind: Ingress
        name: nextcloud-ingress
environment/development/kustomization.yaml

Verwendung des ConfigMapGenerators

Das Script config.sh sollte als ConfigMap in das Deployment gemounted werden. Der ConfigMapGenerator von Kustomize kann das Script automatisch in eine ConfigMap verwandeln:

configMapGenerator:
  - name: nextcloud-config-sh
    files:
    - config.sh
environment/development/kustomization.yaml

Der gleiche Ansatz funktioniert für Secrets mit dem secretGenerator. Wenn ein Secret bereits existiert, gebe den Typ an (merge oder replace).

Erstellen einer ConfigMap ohne Datei

Du kannst ConfigMaps auch direkt in der Kustomization erstellen, indem du konkrete Werte angibst:

configMapGenerator:
  - name: nextcloud-configuration
    literals:
    - nextcloud_trusted_domains=my-nextcloud.works.com
    - cli_url=https://my-nextcloud.works.com
    - nextcloud_admin_user=admin
    - redis_host=redis
    - php_memory_limit=716M
    - php_upload_limit=10G
environment/development/kustomization.yaml

Entfernen des Hash-Suffix

Um den automatisch generierten Hash-Suffix zu entfernen, füge diese Option hinzu:

generatorOptions:
  disableNameSuffixHash: true
environment/development/kustomization.yaml

Am Ende sollte deine Kustomization so aussehen. Achte auf die Einrückung.

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: nextcloud-deployment
resources:
  - ../../base/nextcloud-deployment
  - secret.yaml
  
patches:
  - patch: |-
      - op: replace
        path: /spec/rules/0/host
        value: my-nextcloud.works.com
      - op: replace
        path: /spec/tls/0/hosts/0
        value: my-nextcloud.works.com
        target:
        kind: Ingress
        name: nextcloud-ingress
  
generatorOptions:
  disableNameSuffixHash: true

configMapGenerator:
  - name: nextcloud-config-sh
    files:
      - config.sh
      
  - name: nextcloud-configuration
    literals:
      - nextcloud_trusted_domains=my-nextcloud.works.com
      - cli_url=https://my-nextcloud.works.com
      - nextcloud_admin_user=admin
      - redis_host=redis
      - php_memory_limit=716M
      - php_upload_limit=2G
      
  - name: mariadb-configuration
    literals:
      - mariadb_db=nextcloud
      - mariadb_user=nextcloud
      - mariadb_host=mariadb-service
      - mariadb_init=--locale=C --encoding=UTF-8
    
environment/development/kustomization.yaml

Anwendung und Tests

Um die Konfiguration zu überprüfen, führe den folgenden Befehl in deinem Environment-Verzeichnis aus:

$ kubectl kustomize .
nextcloud_kustomized/environment/development

kubectl apply erzeugt das endgültige Manifest und wendet es auf den Cluster an. Wenn es irgendwelche Probleme gibt, weist Kustomize darauf hin.

$ kubectl apply -k .
nextcloud_kustomized/environment/development

Fazit

Kustomize ist ein leistungsstarkes Tool für die Verwaltung von Kubernetes-Konfigurationen, aber es erfordert technisches Know-how. Für viele Nutzer könnte dies zu komplex sein, weshalb wir eine Managed Nextcloud App anbieten, die regelmäßige Updates und Support beinhaltet.

Unser Portfolio

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Wie hat Dir unser Artikel gefallen?