Wenn Sie Nextcloud auf Ku­ber­netes ein­rich­ten möchten, sind ein S3 als Speicher-Backend sowie MariaDB als Datenbank emp­feh­lens­wert. Die Per­for­mance steigern Sie mit einigen Än­de­run­gen innerhalb der Kon­fi­gu­ra­ti­on.

Nextcloud und Ku­ber­netes: Eine lohnende Kom­bi­na­ti­on

Die Kom­bi­na­ti­on von Nextcloud und Ku­ber­netes mit S3 als Speicher-Backend ist in vielen Fällen eine er­folgs­ver­spre­chen­de Lösung im privaten und ge­schäft­li­chen Bereich. Die nicht­kom­mer­zi­el­le Cloud-Software ist für die Arbeit mit lokalen Servern ebenso wie mit externen Hosts geeignet und besticht auch im Vergleich zu zahl­rei­chen Nextcloud-Al­ter­na­ti­ven durch eine her­vor­ra­gen­de Si­cher­heits­ar­chi­tek­tur. Ku­ber­netes ist ein Open-Source-Ver­wal­tungs­sys­tem für Container-An­wen­dun­gen und kann neben der lokalen Nutzung auch für Cloud-Computing verwendet werden. Das System gilt als äußerst flexibel, maximal ska­lier­bar und sehr aus­fall­si­cher. Wir zeigen Ihnen, wie Sie Nextcloud auf Ku­ber­netes ein­rich­ten.

Tipp

Sie möchten Nextcloud mit Docker nutzen nutzen? Dazu finden Sie in unserem Digital Guide ebenfalls eine um­fang­rei­che Anleitung. Auch die Nextcloud-In­stal­la­ti­on unter Ubuntu 20.04 und die ent­spre­chen­den Schritte für die Nextcloud-In­stal­la­ti­on unter Ubuntu 22.04 haben wir Ihnen zu­sam­men­ge­stellt.

Welche Vor­aus­set­zun­gen müssen erfüllt sein?

Bevor Sie damit beginnen können, Nextcloud auf Ku­ber­netes ein­zu­rich­ten, müssen einige Vor­aus­set­zun­gen erfüllt sein. So benötigen Sie aus­rei­chend Speicher und sollten bereits einen Ku­ber­netes Cluster erstellt haben. Ob Sie diesen auf Ihrer lokalen Maschine anlegen oder dafür einen Cloud-Speicher verwenden, bleibt Ihnen über­las­sen und richtet sich nach den Ka­pa­zi­tä­ten, die Sie benötigen bzw. zur Verfügung haben. Auch der Pa­ket­ma­na­ger Helm sollte für Ku­ber­netes ein­ge­rich­tet sein. Ist dies der Fall, können Sie mit den einzelnen Schritten beginnen.

Nextcloud auf Ku­ber­netes ein­rich­ten: Die wich­tigs­ten Schritte

Haben Sie die passende Basis ge­schaf­fen, können Sie mit der Ein­rich­tung der Nextloud-Ku­ber­netes-Kom­bi­na­ti­on starten. Wir haben die wich­tigs­ten Schritte in den nach­fol­gen­den Ab­schnit­ten für Sie zu­sam­men­ge­fasst.

DNS kon­fi­gu­rie­ren

Im ersten Schritt legen Sie einen A-Record für eine Subdomain an, die auf Ihre ge­wünsch­te IP-Adresse verweisen kann. Setzen Sie auf die lokale Lösung, ist Ihre öf­fent­li­che IP-Adresse das richtige Ziel; ansonsten hin­ter­le­gen Sie die IP, die von Ihrem Cloud-Service zur Verfügung gestellt wird. Je nach DNS-Provider können sich die dafür nötigen Schritte ein wenig un­ter­schei­den.

Helm hin­zu­fü­gen und updaten

Die Be­reit­stel­lung für Ku­ber­netes erfolgt mit Hilfe des an­ge­spro­che­nen Pa­ket­ma­na­gers Helm. Dieser sollte auf Ihrem Client in­stal­liert sein. Außerdem benötigen Sie eine Ver­bin­dung zu Ihrem Ku­ber­netes-Cluster. Ist dies gegeben, fügen Sie das Helm-Re­po­si­to­ry hinzu und updaten es. Dafür nutzen Sie die folgenden beiden Befehle:

helm repo add nextcloud https://nextcloud.github.io/helm/
helm repo update
shell

values.yaml erstellen

Erstellen Sie nun ein neues Helmchart mit dem folgenden Befehl:

nano values.yaml
shell

Fügen Sie danach die folgenden Spe­zi­fi­ka­tio­nen in diese Datei ein.

Cronjobs ein­stel­len

De­fi­nie­ren Sie zunächst ein Zeitlimit für Cronjobs. Dies sind auf unix­ar­ti­gen Be­triebs­sys­te­men Aufgaben, die au­to­ma­tisch im Hin­ter­grund aus­ge­führt und wie­der­holt werden. Im Falle von Nextcloud auf Ku­ber­netes handelt es sich dabei vor allem um War­tungs­ar­bei­ten. In unserem Beispiel weisen wir die Aus­füh­rung alle fünf Minuten an. Gerade bei größeren Da­ten­vor­kom­men kann aber auch eine häufigere Wartung ratsam sein. Dies ist der passende Code:

cronjob:
    annotations: {}
    curlInsecure: false
    enabled: true
    failedJobsHistoryLimit: 5
    image: {}
    schedule: '*/5*     *** '
    successfulJobsHistoryLimit: 2
shell

HPA de­ak­ti­vie­ren

De­ak­ti­vie­ren Sie nun HPA (Ho­ri­zon­tal Pod Au­t­o­s­ca­ler). Dieser skaliert die Anzahl der Pods au­to­ma­tisch. Wenn Sie Re­ad­Wri­te­On­ce für Nextcloud nutzen und die Ska­lie­rung selbst kon­trol­lie­ren möchten, sollten Sie HPA aus­stel­len und sich dadurch auf einen Pod kon­zen­trie­ren. Sofern nur wenige Userinnen und User auf die Daten zugreifen möchten, ist dies die deutlich bequemere Lösung. Der passende Code sieht aus wie folgt:

hpa:
    cputhreshold: 60
    enabled: false
    maxPods: 10
    minPods: 1
shell

Image-Tag über­schrei­ben

Um si­cher­zu­stel­len, dass die aktuelle Version von Helm be­rück­sich­tigt wird, über­schrei­ben Sie den Image-Tag. Dafür verwenden Sie diesen Code:

image:
    repositor: nextcloud
    tag: 28.0.2-apache
    pullPolicy: IfNotPresent
shell

Nun wird die Version 28.0.2 oder eine ak­tu­el­le­re aus­ge­wählt.

Datenbank auswählen

Bei der Auswahl Ihrer Datenbank haben Sie drei Optionen: MariaDB, Post­greS­QL oder Sqlite. Für unser Beispiel ent­schei­den wir uns für MariaDB. Diese Datenbank kon­fi­gu­rie­ren Sie wie folgt und stellen die beiden anderen Systeme ab.

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: false
shell

Mo­ni­to­ring für Metrics

Wenn Sie ein Mo­ni­to­ring mit Pro­me­theus oder Grafana durch­füh­ren möchten, fügen Sie den folgenden Code ein. Dies ist optional.

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: 5s
shell
Managed Ku­ber­netes
Ku­ber­netes als Managed Service von IONOS Cloud

Die ideale Plattform für per­for­man­te und hoch­ska­lier­ba­re Container-An­wen­dun­gen. Umfassend ins IONOS Cloud Ökosystem in­te­griert und rund um die Uhr pro­fes­sio­nell betreut.

Eigene Kon­fi­gu­ra­ti­ons­da­tei­en erlauben

Stan­dard­mä­ßig nutzt Nextcloud auch auf Ku­ber­netes eine Datei namens config.php für die Kon­fi­gu­ra­ti­on. Möchten Sie dies ver­ein­fa­chen oder flexibler gestalten, können Sie eigene Kon­fi­gu­ra­ti­ons­da­tei­en einfügen. Dafür nutzen Sie den folgenden 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'
                     ]
            );
shell

Ersetzen Sie dafür den Platz­hal­ter „beispiel.com“ mit Ihrer eigenen Domain.

Redis kon­fi­gu­rie­ren

Die nächste eigene Kon­fi­gu­ra­ti­ons­da­tei wird im­ple­men­tiert, um das Caching mit Redis und dadurch die gesamte Per­for­mance zu ver­bes­sern. Stan­dard­mä­ßig in­stal­liert Helm Redis ohne Pass­wort­schutz. Es ist al­ler­dings emp­feh­lens­wert, eine zu­sätz­li­che Sicherung ein­zu­bau­en, auch weil dies spätere Probleme beim Einloggen ver­hin­dert. Diesen Code fügen Sie dafür ein:

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')
      )
    );
shell

Speicher-Backend kon­fi­gu­rie­ren

Die letzte Kon­fi­gu­ra­ti­ons­da­tei wird für das Speicher-Backend S3 eingefügt. Sie wird fol­gen­der­ma­ßen im Code hin­ter­legt:

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
        )
      )
    );
shell
IONOS Cloud Object Storage
Daten sicher und günstig speichern

Ersetzen Sie eigene, kos­ten­in­ten­si­ve Spei­cher­lö­sun­gen mit IONOS Cloud Object Storage. Es ist hoch­gra­dig ska­lier­bar, äußerst kos­ten­ef­fi­zi­ent und in­te­griert sich in Ihre An­wen­dungs­sze­na­ri­en. Die extrem hohe Aus­fall­si­cher­heit unserer Server sowie eine in­di­vi­du­el­le Zu­griffs­steue­rung schützen Ihre Daten zu­ver­läs­sig.

Redis-Kon­fi­gu­ra­ti­on aus­schal­ten

Da Sie weiter oben die stan­dard­mä­ßi­ge Kon­fi­gu­ra­ti­on für Redis über­schrie­ben haben, muss diese nun de­ak­ti­viert werden, um Fehler zu vermeiden. Der dafür passende Code ist dieser:

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: true
shell

Host, Admin und Passwort festlegen

Nun hin­ter­le­gen Sie den Host, den Ad­mi­nis­tra­tor und das ent­spre­chen­de Passwort für die Nutzung von Nextcloud auf Ku­ber­netes. Dafür verwenden Sie diesen Code:

host: drive.beispiel.com
password: ihr-passwort
username: name-des-admins
shell

Ersetzen Sie dabei die Platz­hal­ter durch Ihre eigenen Angaben.

Be­nach­rich­ti­gun­gen per E-Mail ein­rich­ten

Sie können optional einen SMTP-Service (Simple Mail Transfer Protocol) aufsetzen, um von Nextcloud Be­nach­rich­ti­gun­gen zu erhalten. Dafür nutzen Sie diesen Code:

mail:
    domain: beispiel.com
    enabled: false
    fromAddress: user
    smtp:
      authtype: LOGIN
      host: beispiel.com
      name: username
      password: ihr-passwort
      port: 465
      secure: ssl
shell

Ein­stel­lung für das Per­sis­tence-Laufwerk

Die folgende Per­sis­tence-Kon­fi­gu­ra­ti­on ist für Daten gedacht, die Nextcloud auf dem ent­spre­chen­den Da­ten­trä­ger speichert. Dies betrifft nicht Ihre Nut­zer­da­ten, die planmäßig auf S3 hin­ter­legt werden.

persistence:
    accessMode: ReadWriteOnce
    annotations: {}
    enabled: true
    size: 8Gi
shell

Pass­wort­schutz für Redis

Es ist emp­feh­lens­wert, Redis mit einem Passwort zu sichern. Dies beugt auch Fehlern bei der Au­then­ti­fi­zie­rung vor. Der passende Code sieht so aus, wobei Sie Ihr per­sön­li­ches Passwort an der ent­spre­chen­den Stelle ersetzen müssen:

redis:
    enabled: true
    password: 'ihr-passwort-für-redis'
    usePassword: true
shell

Re­pli­ka­tio­nen be­schrän­ken

Da Sie weiter oben bereits HPA de­ak­ti­viert haben, sollten Sie die mögliche Anzahl der Re­pli­ka­tio­nen auf 1 be­schrän­ken. Dies ist die Anweisung:

replicaCount: 1
shell

Nextcloud auf Ku­ber­netes in­stal­lie­ren

Ab­schlie­ßend in­stal­lie­ren Sie Nexcloud auf Ku­ber­netes und fügen auch MariaDB und Redis hinzu. Dies ist der Befehl:

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Managed Nextcloud by IONOS Cloud
Team­ar­beit in der eigenen Cloud
  • Voll­stän­di­ge Da­ten­sou­ve­rä­ni­tät in deutschen Re­chen­zen­tren
  • Managed Service ohne Ad­mi­nis­tra­ti­ons­auf­wand
  • File-Sharing, Do­ku­men­ten­be­ar­bei­tung & Kom­mu­ni­ka­ti­on
Zum Hauptmenü