Configurer Nextcloud sur Kubernetes : voici comment faire !

Si vous souhaitez configurer Nextcloud sur Kubernetes, il est recommandé d’utiliser un S3 comme backend de stockage et MariaDB comme base de données. Et pour améliorer les performances, il suffit d’apporter quelques modifications à la configuration. Découvrez-les dans cet article.

Nextcloud et Kubernetes : une combinaison qui en vaut la peine

La combinaison de Nextcloud et de Kubernetes avec S3 comme backend de stockage est dans de nombreux cas une solution prometteuse dans le domaine privé et professionnel. Le logiciel Cloud non commercial est adapté au travail avec des serveurs locaux ainsi qu’avec des hôtes externes et séduit également par une excellente architecture de sécurité en comparaison à de nombreuses alternatives à Nextcloud. Kubernetes est un système de gestion open source pour les applications de conteneurs et peut être utilisé pour le Cloud computing en plus de l’utilisation locale. Le système est considéré comme extrêmement flexible, évolutif au maximum et très résistant aux pannes. Nous vous montrons comment configurer Nextcloud sur Kubernetes.

Conseil

Vous souhaitez utiliser Nextcloud avec Docker ? Vous trouverez des instructions complètes à ce sujet dans notre Digital Guide. Nous y avons aussi réuni les étapes pour l’installation de Nextcloud sous Ubuntu 22.04.

Quelles sont les conditions préalables à remplir ?

Avant de pouvoir commencer à configurer Nextcloud sur Kubernetes, certaines conditions doivent être remplies. Vous avez besoin de suffisamment de mémoire et vous devriez déjà avoir créé un cluster Kubernetes. Que vous le créiez sur votre machine locale ou que vous utilisiez pour cela un stockage Cloud, c’est à vous de décider en fonction des capacités dont vous avez besoin ou dont vous disposez. Le gestionnaire de paquets Helm devrait déjà être configuré pour Kubernetes et est nécessaire pour la suite des instructions.

Installer Nextcloud sur Kubernetes : les principales étapes

Une fois que vous avez créé la base adéquate, vous pouvez commencer à configurer la combinaison Nextcloud sur Kubernetes. Nous avons résumé pour vous les principales étapes dans les paragraphes suivants.

Configurer le DNS

La première étape consiste à créer un A-Record pour un sous-domaine qui peut faire référence à votre adresse IP souhaitée. Si vous misez sur la solution locale, votre adresse IP publique est la bonne destination ; sinon, déposez l’IP mise à disposition par votre service Cloud. Selon le fournisseur DNS, les étapes nécessaires peuvent différer quelque peu.

Ajouter Helm Kubernetes et le mettre à jour

Le déploiement pour Kubernetes s’effectue à l’aide du gestionnaire de paquets Helm dont il a été question. Celui-ci doit être installé sur votre client. Vous avez également besoin d’une connexion à votre cluster Kubernetes. Si c’est le cas, ajoutez le référentiel Helm et mettez-le à jour. Pour cela, utilisez les deux commandes suivantes :

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

Créer values.yaml

Créez maintenant un nouveau helmchart avec la commande suivante :

nano values.yaml
shell

Ajoutez ensuite les spécifications suivantes dans ce fichier.

Paramétrer les tâches cron

Définissez tout d’abord une limite de temps pour les tâches cron. Il s’agit, sur les systèmes d’exploitation de type unix, de tâches qui sont exécutées et répétées automatiquement en arrière-plan. Dans le cas de Nextcloud sur Kubernetes, il s’agit principalement de tâches de maintenance. Dans notre exemple, nous ordonnons l’exécution toutes les cinq minutes. Toutefois, une maintenance plus fréquente peut être conseillée, notamment pour les grands volumes de données. Voici le code :

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

Désactiver HPA

Désactivez maintenant le HPA (Horizontal Pod Autoscaler) ; celui-ci met automatiquement à l’échelle le nombre de pods. Si vous utilisez ReadWriteOnce pour Nextcloud et souhaitez contrôler vous-même la mise à l’échelle, vous devriez désactiver HPA et vous concentrer ainsi sur un seul pod. Si seulement quelques utilisateurs souhaitent accéder aux données, cette solution est la plus pratique. Le code se présente comme suit :

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

Remplacer la balise d’image

Pour être sûr que la version actuelle de Helm soit prise en compte, écrasez la balise image. Pour cela, utilisez ce code :

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

Maintenant, la version 28.0.2 ou une version plus récente est sélectionnée.

Sélectionner la base de données

Lors du choix de votre base de données, vous avez trois options : MariaDB, PostgreSQL ou Sqlite. Pour notre exemple, nous optons pour MariaDB. Vous configurez cette base de données comme suit et désactivez les deux autres systèmes.

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

Surveiller les métriques

Si vous souhaitez effectuer un monitoring avec Prometheus ou Grafana, insérez le code suivant. Cette étape est cependant facultative.

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 Kubernetes de IONOS Cloud
Orchestrez vos charges de travail en toute sécurité

Managed Kubernetes est la plateforme idéale pour des applications de conteneurs performantes et hautement évolutives.

Autoriser les fichiers de configuration personnalisés

Par défaut, Nextcloud utilise sur Kubernetes un fichier appelé config.php pour la configuration. Si vous souhaitez simplifier ou adapter cette procédure, vous pouvez insérer vos propres fichiers de configuration. Pour cela, utilisez le code suivant :

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

Pour cela, remplacez le caractère de remplacement « exemple.com » par votre propre domaine.

Configurer Redis

Ce fichier de configuration personnalisé est mis en place pour améliorer la mise en cache avec Redis, et donc la performance globale. Par défaut, Helm installe Redis sans protection par mot de passe. Il est toutefois recommandé d’intégrer une protection supplémentaire, notamment parce que cela évite des problèmes ultérieurs lors de la connexion. Pour cela, insérez ce code :

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('votre-mot-de-passe-pour-redis')
      )
    );
shell

Adapter le backend mémoire

Le dernier fichier de configuration est inséré pour le backend mémoire S3. Il est enregistré dans le code de la manière suivante :

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 Object Storage
Stockage de données sûr et économique

Augmentez votre rentabilité grâce à un stockage évolutif, qui s'intègre à vos scénarios d'application.

Désactiver la configuration Redis

Comme vous avez écrasé plus haut la configuration par défaut pour Redis, il faut maintenant la désactiver pour éviter les erreurs. Saisissez pour cela le code suivant :

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

Définir l’hôte, l’admin et le mot de passe

Définissez maintenant l’hôte, l’administrateur et le mot de passe correspondant pour l’utilisation de Nextcloud sur Kubernetes. Pour cela, utilisez ce code :

host: drive.exemple.com
password: votre-mot-de-passe
username: nom-de-l-admin
shell

Remplacez nos exemples génériques par vos propres données.

Programmer les notifications par email

Vous pouvez éventuellement mettre en place un service SMTP (Simple Mail Transfer Protocol) pour recevoir des notifications de Nextcloud à l’aide de ce code :

mail:
    domain: exemple.com
    enabled: false
    fromAddress: utilisateur
    smtp:
      authtype: LOGIN
      host: exemple.com
      name: nom-d-utilisateur
      password: votre-mot-de-passe
      port: 465
      secure: ssl
shell

Configurer le stockage persistant

La configuration suivante concerne le stockage persistant des données que Nextcloud enregistre sur le disque. Notez que cela ne s’applique pas aux données utilisateur, qui sont planifiées pour être stockées sur S3.

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

Sécuriser Redis avec un mot de passe

Il est recommandé de sécuriser Redis avec un mot de passe, cela permet d’éviter les erreurs lors de l’authentification. Utilisez le code suivant en remplaçant votre mot de passe personnel à l’endroit approprié :

redis:
    enabled: true
    password: 'votre-mot-de-passe-pour-redis'
    usePassword: true
shell

Limiter les ReplicaSets

Comme vous avez déjà désactivé HPA plus haut, vous devriez limiter le nombre possible de ReplicaSets à 1. Voici l’instruction :

replicaCount: 1
shell

Installer Nextcloud sur Kubernetes

Pour finir, installez Nexcloud sur Kubernetes et ajoutez également MariaDB et Redis. La commande se présente ainsi :

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Cet article vous a-t-il été utile ?
Page top