Om Nextcloud op Kubernetes in te stellen, raden we aan om S3 te gebruiken voor een opslagbackend en MariaDB als database. U kunt de prestaties verbeteren door enkele wijzigingen aan te brengen in de configuratie.

Nextcloud en Kubernetes vormen een waardevolle combinatie

De combinatie van Nextcloud en Kubernetes met S3 voor opslag is een veelbelovende oplossing in de particuliere en zakelijke sector. De niet-commerciële cloudsoftware is geschikt voor zowel lokale servers als externe hosts en beschikt over een uitstekende beveiligingsarchitectuur in vergelijking met talrijke Nextcloud-alternatieven. Kubernetes is een open-sourcebeheersysteem voor containerapplicaties en kan naast lokaal gebruik ook worden gebruikt voor cloud computing. Het systeem wordt beschouwd als flexibel, zeer schaalbaar en storingsvrij. Lees verder om te ontdekken hoe u Nextcloud op Kubernetes kunt instellen.

Aan welke voorwaarden moet worden voldaan?

Voordat u kunt beginnen met het instellen van Nextcloud op Kubernetes, moet aan een aantal voorwaarden worden voldaan. U hebt voldoende opslagruimte nodig en u moet al een Kubernetes-cluster hebben aangemaakt. U kunt ervoor kiezen om dit op uw lokale computer aan te maken of cloudopslag te gebruiken, afhankelijk van uw beschikbare capaciteit. Zorg er bovendien voor dat de Helm-pakketbeheerder is ingesteld voor Kubernetes. Als u klaar bent, kunt u doorgaan met de stappen.

Hoe je Nextcloud stap voor stap op Kubernetes installeert

Zodra u over de juiste basis beschikt, kunt u beginnen met het instellen van Nextcloud op Kubernetes. De belangrijkste stappen worden in de volgende paragrafen samengevat.

DNS configureren

De eerste stap is het aanmaken van een A-record voor een subdomein dat naar het gewenste IP-adres kan verwijzen. Als u de lokale oplossing gebruikt, is uw openbare IP-adres de juiste bestemming; anders voert u het IP-adres in dat door uw cloudservice is verstrekt. Afhankelijk van de DNS-provider kunnen de stappen die hiervoor nodig zijn enigszins verschillen.

Helm toevoegen en bijwerken

Kubernetes wordt geïmplementeerd met behulp van de Helm-pakketbeheerder, die op uw client moet zijn geïnstalleerd. Zorg er bovendien voor dat u verbinding hebt met uw Kubernetes-cluster. Als dat het geval is, voegt u de Helm-repository toe en werkt u deze bij met de volgende opdrachten:

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

Maak values.yaml aan.

Maak nu een nieuwe Helm-chart aan met de volgende opdracht:

nano values.yaml
shell

Voeg vervolgens de volgende specificaties toe aan dit bestand.

Cronjobs instellen

Stel eerst een tijdslimiet in voor cronjobs. Op Unix-achtige besturingssystemen zijn cronjobs taken die automatisch op de achtergrond worden uitgevoerd op geplande tijdstippen. Voor Nextcloud op Kubernetes zijn dit voornamelijk onderhoudstaken. In dit voorbeeld stellen we de cronjob zo in dat deze elke vijf minuten wordt uitgevoerd. Voor grotere gegevensvolumes kan het raadzaam zijn om vaker onderhoud uit te voeren. Gebruik de volgende code:

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

HPA activeren

Deactiveer nu de Horizontal Pod Autoscaler (HPA), die automatisch het aantal pods schaalt. Als u ReadWriteOnce voor Nextcloud gebruikt en de schaalbaarheid liever handmatig wilt regelen, moet u HPA deactiveren en u concentreren op één pod. Deze aanpak is handiger als slechts een paar gebruikers toegang nodig hebben. De juiste code is:

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

Afbeeldingstag overschrijven

Om ervoor te zorgen dat de huidige versie van Helm in aanmerking wordt genomen, overschrijf je de imagetag. Gebruik hiervoor deze code:

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

Versie 28.0.2 of een recentere versie is nu geselecteerd.

Selecteer database

Je hebt drie opties bij het selecteren van je database: MariaDB, PostgreSQL of SQLite. Voor ons voorbeeld kiezen we voor MariaDB. Configureer deze database als volgt en deactiveer de andere twee systemen:

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

Monitor voor statistieken

Om monitoring uit te voeren met Prometheus of Grafana, voeg je de volgende code toe. Dit is optioneel.

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

Sta uw eigen configuratiebestanden toe

Standaard gebruikt Nextcloud ook een bestand met de naam config.php voor configuratie op Kubernetes. Om dit te vereenvoudigen of flexibeler te maken, kunt u uw eigen configuratiebestanden invoegen met behulp van de volgende code:

nextcloud:
    configs:
        custom.config.php: |-
            <?php
            $CONFIG = array (
                'overwriteprotocol' => 'https',
                'overwrite.cli.url' => 'https://drive.example.com',
                'filelocking.enabled' => 'true',
                'loglevel' => '2',
                'enable_previews' => true,
                'trusted_domains' =>
                     [
                        'nextcloud',
                        'drive.example.com'
                     ]
            );
shell

Vervang de tijdelijke aanduiding ‘example.com’ door uw eigen domein.

Redis configureren

Om caching met Redis te verbeteren en de algehele prestaties te optimaliseren, kunt u een aangepast configuratiebestand toevoegen. Standaard wordt Helm Redis geïnstalleerd zonder wachtwoordbeveiliging, maar het is raadzaam om een extra beveiligingslaag toe te voegen. Gebruik de volgende code om Redis met wachtwoordbeveiliging in te stellen en te integreren met Nextcloud:

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('your-password-for-redis')
      )
    );
shell

De opslagbackend configureren

Het laatste configuratiebestand wordt ingevoegd voor de opslagbackend S3. Het wordt als volgt in de code opgeslagen:

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

Schakel de Redis-configuratie uit

Aangezien u hierboven de standaardconfiguratie voor Redis hebt overschreven, moet deze nu worden gedeactiveerd om fouten te voorkomen met behulp van de volgende code:

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, beheerder en wachtwoord instellen

Voer nu de host, de beheerder en het bijbehorende wachtwoord in voor het gebruik van Nextcloud op Kubernetes. Gebruik hiervoor deze code:

host: drive.example.com
password: your-password
username: name-of-admin
shell

Vervang de plaatshouders door uw eigen gegevens.

E-mailmeldingen instellen

Je kunt optioneel een SMTP-service (Simple Mail Transfer Protocol) instellen om meldingen van Nextcloud te ontvangen:

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

Configureer de persistenschijf

De volgende persistentieconfiguratie is bedoeld voor gegevens die Nextcloud opslaat op de bijbehorende gegevensdrager. Dit heeft geen invloed op uw gebruikersgegevens, die op gezette tijden worden opgeslagen op S3:

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

Wachtwoordbeveiliging voor Redis

Het is raadzaam om Redis met een wachtwoord te beveiligen. Dit voorkomt fouten tijdens de authenticatie. Gebruik hiervoor de volgende code en vervang waar nodig uw wachtwoord:

redis:
    enabled: true
    password: 'your-password-for-redis'
    usePassword: true
shell

Beperk replicaties

Aangezien u HPA al hebt gedeactiveerd, moet u het mogelijke aantal replicaties beperken tot 1:

replicaCount: 1
shell

Nextcloud installeren op Kubernetes

Installeer ten slotte Nexcloud op Kubernetes en voeg ook MariaDB en Redis toe:

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Ga naar hoofdmenu