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.
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
shellCréer values.yaml
Créez maintenant un nouveau helmchart avec la commande suivante :
nano values.yaml
shellAjoutez 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
shellDé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
shellRemplacer 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
shellMaintenant, 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
shellSurveiller 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
shellManaged 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'
]
);
shellPour 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')
)
);
shellAdapter 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
)
)
);
shellAugmentez 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
shellDé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
shellRemplacez 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
shellConfigurer 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
shellSé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
shellLimiter 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
shellInstaller 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