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
yaml

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
yaml

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:
  repository: nextcloud
  tag: 28.0.2-apache
  pullPolicy: IfNotPresent
yaml

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
yaml

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
yaml
IONOS CLOUD Managed Ku­ber­netes
Container Workloads in sicherer Hand

IONOS CLOUD Managed Ku­ber­netes ist die ideale Plattform für per­for­man­te und hoch­ska­lier­ba­re Container-An­wen­dun­gen – rund um die Uhr pro­fes­sio­nell betreut. Ab sofort pro­fi­tie­ren Sie von einer au­to­ma­ti­schen CPU-Zuweisung für Dedicated Cores und kos­ten­ef­fi­zi­en­ten vCPUs für weniger per­for­mance-intensive Workloads. So nutzen Sie Ihre Res­sour­cen optimal, senken Kosten und behalten jederzeit volle Kontrolle über Ihre An­wen­dungs­per­for­mance.

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'
           ]
      );
yaml

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

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
          )
        )
      );
yaml
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
yaml

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
yaml

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
yaml

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
yaml

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
yaml

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
yaml

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 values.yaml nextcloud nextcloud/nextcloud
shell
Managed Nextcloud
Ihr per­sön­li­cher Cloud-Speicher
  • Voll­stän­di­ge Da­ten­sou­ve­rä­ni­tät
  • Kein Ad­mi­nis­tra­ti­ons­auf­wand dank Managed-Betrieb
  • Flexibel um Apps und Online Office er­wei­ter­bar

Reviewer

Zum Hauptmenü