Om Nextcloud op Ku­ber­ne­tes in te stellen, raden we aan om S3 te gebruiken voor een op­slag­bac­kend en MariaDB als database. U kunt de pres­ta­ties ver­be­te­ren door enkele wij­zi­gin­gen aan te brengen in de con­fi­gu­ra­tie.

Nextcloud en Ku­ber­ne­tes vormen een waar­de­vol­le com­bi­na­tie

De com­bi­na­tie van Nextcloud en Ku­ber­ne­tes met S3 voor opslag is een veel­be­lo­ven­de oplossing in de par­ti­cu­lie­re en zakelijke sector. De niet-com­mer­ci­ë­le cloud­soft­wa­re is geschikt voor zowel lokale servers als externe hosts en beschikt over een uit­ste­ken­de be­vei­li­gings­ar­chi­tec­tuur in ver­ge­lij­king met talrijke Nextcloud-al­ter­na­tie­ven. Ku­ber­ne­tes is een open-sour­ce­be­heer­sys­teem voor con­tai­ne­rap­pli­ca­ties en kan naast lokaal gebruik ook worden gebruikt voor cloud computing. Het systeem wordt beschouwd als flexibel, zeer schaal­baar en sto­rings­vrij. Lees verder om te ontdekken hoe u Nextcloud op Ku­ber­ne­tes kunt instellen.

Aan welke voor­waar­den moet worden voldaan?

Voordat u kunt beginnen met het instellen van Nextcloud op Ku­ber­ne­tes, moet aan een aantal voor­waar­den worden voldaan. U hebt voldoende op­slag­ruim­te nodig en u moet al een Ku­ber­ne­tes-cluster hebben aan­ge­maakt. U kunt ervoor kiezen om dit op uw lokale computer aan te maken of cloud­op­slag te gebruiken, af­han­ke­lijk van uw be­schik­ba­re ca­pa­ci­teit. Zorg er bovendien voor dat de Helm-pak­ket­be­heer­der is ingesteld voor Ku­ber­ne­tes. Als u klaar bent, kunt u doorgaan met de stappen.

Hoe je Nextcloud stap voor stap op Ku­ber­ne­tes in­stal­leert

Zodra u over de juiste basis beschikt, kunt u beginnen met het instellen van Nextcloud op Ku­ber­ne­tes. De be­lang­rijk­ste stappen worden in de volgende pa­ra­gra­fen sa­men­ge­vat.

DNS con­fi­gu­re­ren

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 be­stem­ming; anders voert u het IP-adres in dat door uw cloud­ser­vi­ce is verstrekt. Af­han­ke­lijk van de DNS-provider kunnen de stappen die hiervoor nodig zijn enigszins ver­schil­len.

Helm toevoegen en bijwerken

Ku­ber­ne­tes wordt ge­ïm­ple­men­teerd met behulp van de Helm-pak­ket­be­heer­der, die op uw client moet zijn ge­ïn­stal­leerd. Zorg er bovendien voor dat u ver­bin­ding hebt met uw Ku­ber­ne­tes-cluster. Als dat het geval is, voegt u de Helm-re­po­si­to­ry toe en werkt u deze bij met de volgende op­drach­ten:

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 ver­vol­gens de volgende spe­ci­fi­ca­ties toe aan dit bestand.

Cronjobs instellen

Stel eerst een tijds­li­miet in voor cronjobs. Op Unix-achtige be­stu­rings­sys­te­men zijn cronjobs taken die au­to­ma­tisch op de ach­ter­grond worden uit­ge­voerd op geplande tijd­stip­pen. Voor Nextcloud op Ku­ber­ne­tes zijn dit voor­na­me­lijk on­der­houds­ta­ken. In dit voorbeeld stellen we de cronjob zo in dat deze elke vijf minuten wordt uit­ge­voerd. Voor grotere ge­ge­vens­vo­lu­mes 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

De­ac­ti­veer nu de Ho­ri­zon­tal Pod Au­to­scaler (HPA), die au­to­ma­tisch het aantal pods schaalt. Als u Re­ad­Wri­te­On­ce voor Nextcloud gebruikt en de schaal­baar­heid liever handmatig wilt regelen, moet u HPA de­ac­ti­ve­ren en u con­cen­tre­ren op één pod. Deze aanpak is handiger als slechts een paar ge­brui­kers toegang nodig hebben. De juiste code is:

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

Af­beel­dingstag over­schrij­ven

Om ervoor te zorgen dat de huidige versie van Helm in aan­mer­king wordt genomen, over­schrijf 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 ge­se­lec­teerd.

Selecteer database

Je hebt drie opties bij het se­lec­te­ren van je database: MariaDB, Post­greSQL of SQLite. Voor ons voorbeeld kiezen we voor MariaDB. Con­fi­gu­reer deze database als volgt en de­ac­ti­veer 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 sta­tis­tie­ken

Om mo­ni­to­ring uit te voeren met Pro­me­theus 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 con­fi­gu­ra­tie­be­stan­den toe

Standaard gebruikt Nextcloud ook een bestand met de naam config.php voor con­fi­gu­ra­tie op Ku­ber­ne­tes. Om dit te ver­een­vou­di­gen of flexi­be­ler te maken, kunt u uw eigen con­fi­gu­ra­tie­be­stan­den 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 tij­de­lij­ke aan­dui­ding ‘example.com’ door uw eigen domein.

Redis con­fi­gu­re­ren

Om caching met Redis te ver­be­te­ren en de algehele pres­ta­ties te op­ti­ma­li­se­ren, kunt u een aangepast con­fi­gu­ra­tie­be­stand toevoegen. Standaard wordt Helm Redis ge­ïn­stal­leerd zonder wacht­woord­be­vei­li­ging, maar het is raadzaam om een extra be­vei­li­gings­laag toe te voegen. Gebruik de volgende code om Redis met wacht­woord­be­vei­li­ging in te stellen en te in­te­gre­ren 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 op­slag­bac­kend con­fi­gu­re­ren

Het laatste con­fi­gu­ra­tie­be­stand wordt ingevoegd voor de op­slag­bac­kend S3. Het wordt als volgt in de code op­ge­sla­gen:

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-con­fi­gu­ra­tie uit

Aangezien u hierboven de stan­daard­con­fi­gu­ra­tie voor Redis hebt over­schre­ven, moet deze nu worden ge­de­ac­ti­veerd 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 wacht­woord instellen

Voer nu de host, de beheerder en het bij­be­ho­ren­de wacht­woord in voor het gebruik van Nextcloud op Ku­ber­ne­tes. Gebruik hiervoor deze code:

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

Vervang de plaats­hou­ders door uw eigen gegevens.

E-mail­mel­din­gen 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

Con­fi­gu­reer de per­sis­ten­schijf

De volgende per­sis­ten­tie­con­fi­gu­ra­tie is bedoeld voor gegevens die Nextcloud opslaat op de bij­be­ho­ren­de ge­ge­vens­dra­ger. Dit heeft geen invloed op uw ge­brui­kers­ge­ge­vens, die op gezette tijden worden op­ge­sla­gen op S3:

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

Wacht­woord­be­vei­li­ging voor Redis

Het is raadzaam om Redis met een wacht­woord te be­vei­li­gen. Dit voorkomt fouten tijdens de au­then­ti­ca­tie. Gebruik hiervoor de volgende code en vervang waar nodig uw wacht­woord:

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

Beperk re­pli­ca­ties

Aangezien u HPA al hebt ge­de­ac­ti­veerd, moet u het mogelijke aantal re­pli­ca­ties beperken tot 1:

replicaCount: 1
shell

Nextcloud in­stal­le­ren op Ku­ber­ne­tes

In­stal­leer ten slotte Nexcloud op Ku­ber­ne­tes 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