In dieser Anleitung zeigen wir dir, wie du deine Nextcloud Konfiguration mit Kustomize auf einem Kubernetes-Cluster umsetzen kannst.
Voraussetzungen
- Ein Kubernetes-Cluster (z.B. Managed Kubernetes von NETWAYS)
- NGINX Ingress Controller (konfiguriere: allow-snippet-annotations: „true“)
- Cert-Manager
- ClusterIssuer
kubectl(mitkustomize)- Manifest-Dateien (verfügbar auf GitHub)
- Weitere Tutorials
Was ist Kustomize?
Kustomize ist ein Open-Source-Tool für die Verwaltung von Kubernetes-Konfigurationen. Es ermöglicht dir, Objekte wie Deployments, DaemonSets, Services 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:
- Base: Grundlegende YAML-Dateien, die für alle Umgebungen geteilt werden.
- Overlay: Umgebungsspezifische Anpassungen.
Durch das Anwenden der Overlays der YAML-Dateien erstellst du eine individuelle Konfiguration:
Base + Overlay = Customized Manifest

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.

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.yamlUm 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.yamlAnpassung 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:
- Strategic Merge Patch:Fügt Felder in Kubernetes-Ressourcen hinzu oder ändert sie, indem die Patch-Datei mit der vorhandenen Konfiguration zusammengeführt wird.
- 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.yamlVerwendung 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.yamlDer 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.yamlEntfernen des Hash-Suffix
Um den automatisch generierten Hash-Suffix zu entfernen, füge diese Option hinzu:
generatorOptions:
disableNameSuffixHash: true
environment/development/kustomization.yamlAm 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.yamlAnwendung und Tests
Um die Konfiguration zu überprüfen, führe den folgenden Befehl in deinem Environment-Verzeichnis aus:
$ kubectl kustomize .
nextcloud_kustomized/environment/developmentkubectl 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/developmentFazit
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.





0 Kommentare