Nextcloud auf Kubernetes: So bringst du alles glatt zum Laufen.
Wenn du Nextcloud auf Kubernetes einrichten möchtest, sind S3 als Speicher-Backend sowie MariaDB als Datenbank empfehlenswert. Die Performance steigerst du mit gezielten Anpassungen in der Konfiguration.
Nextcloud und Kubernetes: Ein starkes Duo
Die Kombination von Nextcloud und Kubernetes mit S3 als Speicher-Backend ist oft die ideale Lösung für private und geschäftliche Zwecke. Die Open-Source-Cloud-Software eignet sich für lokale Server ebenso wie für externe Hosts und punktet im Vergleich zu vielen Nextcloud-Alternativen durch eine erstklassige Sicherheitsarchitektur. Kubernetes als Verwaltungssystem für Container-Anwendungen ist extrem flexibel, skalierbar und ausfallsicher. Wir zeigen dir, wie du Nextcloud auf Kubernetes einrichtest.
Welche Voraussetzungen gibt es?
Bevor du startest, müssen die Rahmenbedingungen passen. Du benötigst ausreichend Speicherplatz und solltest bereits einen Kubernetes Cluster erstellt haben – ob lokal oder in der Cloud, hängt von deinem Bedarf ab. Zudem sollte der Paketmanager Helm für Kubernetes bereits eingerichtet sein. Sobald das erledigt ist, kann es losgehen.
Nextcloud auf Kubernetes einrichten: So gehst du vor
Mit der passenden Basis startest du nun die Einrichtung. Wir haben die wesentlichen Schritte in den folgenden Abschnitten für dich zusammengefasst.
DNS konfigurieren
Zuerst legst du einen A-Record für eine Subdomain an, die auf deine gewünschte IP-Adresse zeigt. Bei einer lokalen Lösung ist das deine öffentliche IP, ansonsten nutzt du die IP deines Cloud-Anbieters. Je nach DNS-Provider variiert der Vorgang minimal.
Helm hinzufügen und aktualisieren
Die Bereitstellung erfolgt über den Paketmanager Helm. Dieser muss auf deinem Client installiert sein und eine Verbindung zum Cluster bestehen. Füge dann das Helm-Repository hinzu und aktualisiere es mit diesen Befehlen:
helm repo add nextcloud https://nextcloud.github.io/helm/
helm repo updateshellvalues.yaml erstellen
Erstelle ein neues Helmchart mit folgendem Befehl:
nano values.yamlshellFüge anschließend die notwendigen Spezifikationen in die Datei ein.
Cronjobs konfigurieren
Definiere ein Zeitlimit für Cronjobs. Diese automatisierten Aufgaben erledigen im Hintergrund Wartungsarbeiten. In unserem Beispiel triggern wir die Ausführung alle 5 Minuten. Bei großen Datenmengen kann ein kürzeres Intervall sinnvoll sein. Hier der passende Code:
cronjob:
annotations: {}
curlInsecure: false
enabled: true
failedJobsHistoryLimit: 5
image: {}
schedule: '*/5* *** '
successfulJobsHistoryLimit: 2shellHPA deaktivieren
Deaktiviere den Horizontal Pod Autoscaler (HPA). Wenn du ReadWriteOnce nutzt und die Skalierung selbst steuern möchtest, ist ein einzelner Pod oft die stabilere Wahl – besonders bei überschaubaren Zugriffszahlen. Der Code dazu:
hpa:
cputhreshold: 60
enabled: false
maxPods: 10
minPods: 1shellImage-Tag überschreiben
Um die aktuelle Version sicherzustellen, überschreibst du den Image-Tag mit folgendem Code:
image:
repositor: nextcloud
tag: 28.0.2-apache
pullPolicy: IfNotPresentshellDamit wird Version 28.0.2 oder neuer verwendet.
Datenbank festlegen
Du hast die Wahl zwischen MariaDB, PostgreSQL oder Sqlite. Wir setzen in diesem Beispiel auf MariaDB. Konfiguriere das System wie folgt und deaktiviere die Alternativen.
internalDatabase:
enabled: false
mariadb:
db:
name: nextcloud
password: db-password
user: nextcloud
enabled: true
master:
persistence:
accessMode: ReadWriteOnce
enabled: true
size: 8Gi
replication:
enabled: false
rootUser:
password: root-db-password
forcePassword: true
postgresql:
enabled: falseshellMonitoring für Metrics
Für ein Monitoring via Prometheus oder Grafana fügst du diesen optionalen Code hinzu:
metrics:
enabled: true
https: false
image:
pullPolicy: IfNotPresent
repository: xperimental/nextcloud-exporter
tag: v0.3.0
replicaCount: 1
service:
annotations:
prometheus.io/port: '9205'
prometheus.io/scrape: 'true'
labels: {}
type: ClusterIP
timeout: 5sshellEigene Konfigurationsdateien nutzen
Nextcloud nutzt standardmäßig die config.php. Um flexibler zu sein, kannst du eigene Konfigurationsdateien einbinden. Nutze dafür diesen Code:
nextcloud:
configs:
custom.config.php: |-
<?php
$CONFIG = array (
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://drive.beispiel.com',
'filelocking.enabled' => 'true',
'loglevel' => '2',
'enable_previews' => true,
'trusted_domains' =>
[
'nextcloud',
'drive.beispiel.com'
]
);shellErsetze dabei „beispiel.com“ durch deine eigene Domain.
Redis konfigurieren
Mit Redis verbesserst du das Caching und die Gesamtperformance. Da Helm Redis standardmäßig ohne Passwort installiert, empfehlen wir eine zusätzliche Absicherung, um Login-Probleme zu vermeiden:
redis.config.php: |-
<?php
$CONFIG = array (
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => getenv('REDIS_HOST'),
'port' => getenv('REDIS_HOST_PORT') ?: 6379,
'password' => getenv('ihr-passwort-für-redis')
)
);shellSpeicher-Backend einrichten
Die Konfiguration für das S3-Speicher-Backend wird wie folgt im Code hinterlegt:
s3.config.php: |-
<?php
$CONFIG = array (
'objectstore' => array(
'class' => '\\OC\\Files\\ObjectStore\\S3',
'arguments' => array(
'bucket' => 'bucket-name',
'autocreate' => true,
'key' => 's3-access-key',
'secret' => 's3-secret-key',
'region' => 's3-region',
'hostname' => 's3-endpoint',
'use_ssl' => true,
'use_path_style' => true
)
)
);shellStandard-Redis-Konfiguration deaktivieren
Da du oben eine eigene Redis-Konfiguration erstellt hast, muss die Standardeinstellung deaktiviert werden, um Konflikte zu vermeiden:
defaultConfigs:
.htaccess: true
apache-pretty-urls.config.php: true
apcu.config.php: true
apps.config.php: true
autoconfig.php: false
redis.config.php: false
smtp.config.php: trueshellHost, Admin und Passwort definieren
Hinterlege nun den Host, den Admin-User und das Passwort für deine Nextcloud-Instanz:
host: drive.beispiel.com
password: ihr-passwort
username: name-des-adminsshellTausche die Platzhalter gegen deine individuellen Daten aus.
E-Mail-Benachrichtigungen aktivieren
Optional kannst du einen SMTP-Dienst für Benachrichtigungen einrichten:
mail:
domain: beispiel.com
enabled: false
fromAddress: user
smtp:
authtype: LOGIN
host: beispiel.com
name: username
password: ihr-passwort
port: 465
secure: sslshellPersistence-Laufwerk einstellen
Diese Einstellung betrifft Daten, die Nextcloud direkt auf dem Datenträger speichert (keine Nutzerdaten, diese liegen im S3):
persistence:
accessMode: ReadWriteOnce
annotations: {}
enabled: true
size: 8GishellPasswortschutz für Redis
Sichere Redis mit einem Passwort ab, um Authentifizierungsfehler zu vermeiden. Ersetze das Passwort im Code durch dein eigenes:
redis:
enabled: true
password: 'ihr-passwort-für-redis'
usePassword: trueshellReplikationen limitieren
Da HPA deaktiviert ist, beschränkst du die Anzahl der Replikationen auf 1:
replicaCount: 1shellNextcloud auf Kubernetes installieren
Zum Abschluss installierst du Nextcloud inklusive MariaDB und Redis mit diesem Befehl:
kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloudshell