Files
BaC/content/2023-12-08-Migrer-MinIO-de-service-à-plugin-dans-TrueNAS.md
VC 71b41b2f2a
All checks were successful
release / build (push) Successful in 26s
: new article
2025-07-18 11:37:41 +02:00

106 lines
8.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

+++
title = "Migrer MinIO de service à plugin dans TrueNAS"
date = 2023-12-08
[taxonomies]
tags = [ "truenas", "minio", "s3", "sysadmin", "système" ]
+++
> La mauvaise doc, tu la lis… tu comprends rien! La bonne doc, tu la lis… bon tu comprends rien non plus, mais cest une bonne doc!
<!-- more -->
Parce que les emmerdes, ça vole souvent en escadrille, TrueNAS ne maintiendra plus le plugin S3 à partir de la version 13.1. Les utilisateurs sont priés de migrer vers le [plugin S3](https://www.truenas.com/docs/core/13.0/coretutorials/jailspluginsvms/plugins/minioplugin/).
Sauf que cest bien gentil, mais ce nest pas particulièrement bien documenté (que ce soit pour migrer ou même simplement pour installer et utiliser ledit plugin).
Guide non-officiel donc.
# Installation du plugin MinIO
Le service S3 de TrueNAS repose sur MinIO, cest également le cas du plugin. Avant de faire quoique ce soit, on peut donc aller simplement activer le plugin en question. Pour cela, le plus simple est de se rendre sur linterface Web (oui, je sais, cest caca™), daller dans la section `Plugins`. On te propose alors dindiquer sur quel volume il faut installer les `jails` (par défaut, ce sera dans un dossier `iocage`). Tu peux mettre le volume par défaut, ça ne gène en rien.
À la fin de linstallation, TrueNAS te donne quelques informations, notamment les informations de connexion, que tu pourras réafficher en cliquant sur la flèche au bout de la ligne correrpondant à MinIO puis dans les `Post install notes` (lécran saffiche, mais si tas loupé un truc, cest pas bien grave donc).
Une fois que cela est fait, je tinvite à stopper le plugin lui-même, parce quil va falloir aller faire pas mal de bricolage maintenant.
## Création dun dataset dédié
Comme pour le service S3, il faut un dataset dédié (et malheureusement distinct du dataset dorigine) et avec les **bonnes ACLs**. Et cest généralement là quon commence à bien rigoler…
Donc, rends-toi dans `Storage > Pools` pour créer le dataset dédié. Le nom a peu dimportance, ce qui est important en revanche, ce sont les ACLs.
Dans lécran pour régler les permissions voici donc ce quil faut faire pour que ça marche correctement:
* pour le *preset*, tu peux sélectionner `Restricted` qui correspond plutôt pas mal au cas dusage (on ne veut pas que quoique ce soit dautres que MinIO vienne écrire dans ce dataset)
* au niveau utilisateur, **il faut** sélectionner `minio`
* puis **il faut appliquer récursivement** les changements (via la coche ` Apply permissions recursively `)
De cette manière, ton dataset appartient bien à lutilisateur `minio` et à lui seul.
## Association du dataset au plugin
Une fois tout ceci fait, tu devrais avoir un plugin MinIO à larrêt et un dataset avec les bonnes permissions.
Le plugin lui-même va placer lensemble de ces données dans `<point de montage zfs>/iocage/jails/<nom de la jail>/root/var/db/minio`. Il faut donc idéalement aller monter le volume que lon vient de créer là. **Sauf que** le dossier `/var/db/minio` dans la `jail` nest pas vide (ce serait trop simple).
En fait, au premier démarrage MinIO peuple ce dossier avec quelques fichiers de configuration ce qui empêche complètement dy associer le dataset.
On va donc bouger un dossier cacher, `.minio.sys/` de ce dossier vers la racine du dataset que lon a créé:
```
mv <point de montage zfs>/iocage/jails/<nom de la jail>/root/var/db/minio/.minio.sys/ <point de montage zfs>/<dataset minio>/
```
À partir de là, dans linterface des plugins, tu peux aller triturer les points de montage. Il suffit dassocier ton dataset avec le dossier `/var/db/minio` dans la `jail` et ça devrait cesser de gueuler.
## Ajouter la partie réseau
Une `jail`, ça fonctionne grosso merdo comme un conteneur Docker (en tout cas du point de vue de lutilisateur). Il va donc falloir lui associer des ports sur lhôte. Normalement, MinIO utilise deux ports:
* 9000, pour S3
* 9001, pour ladministration
Par défaut le plugin démarre sur le premier port libre, donc généralement le 9002. On peut aller changer cela dans le menu `Jails`. Il suffit de cliquer de nouveau sur la flèche de droite puis daller dans `Edit` pour changer les ports sous `Network Properties`.
Une fois tout ceci fait, on peut redémarrer une dernière fois la `jail`, elle devrait écouter sur le nouveau port.
# Recréation de la configuration
Parce que la nature est bien fait, il est impossible de migrer les métadonnées des buckets S3 de MinIO service vers MinIO plugin. Ça veut dire quil faut effectivement tout recréer (ou trouver une bricole avec lAPI que je nai pas trop cherchée: avec un seul bucket et une seule clé, ça nen valait pas la peine dans mon cas) des buckets aux clés en passant par les utilisateurs et les permissions.
Amuse-toi bien… Peut-être quil existe des scripts précuits ou des recettes de cuisine, peut-être même fournies par le projet MinIO, mais jai eu la flemme de chercher plus que ça.
# Migration des données
Comme je le disais auparavant, la façon dont MinIO stocke les données à changer entre la version service et la version plugin (essentiellement parce que la version service est relativement ancienne maintenant). Il est donc impossible de charger simplement les données, le seul moyen est de passer par un miroir via `mc` (*minio client* ou *mcli* dans certaines distributions).
Il va donc falloir passer par une machine tierce, de préférence sur le même réseau pour éviter latence et désaagrément, pour faire un miroir complement **pour chaque bucket**. Là encore, bon courage si tu en as plusieurs ou que tu as plusieurs dizaines de téraoctets de données sur MinIO.
Donc, il faut créer une clé ayant a minima les droits de lecture sur tous les buckets côté source et évidemment une clé ayant les droits décriture sur tous les buckets côté destination. Cela peut être créer dans linterface dadmin de chaque MinIO, je ne détaille pas (cest trop dépendant des versions et la doc de MinIO est éventuellement là pour aider).
Sur la machine tierce, une fois `mc` installé par la méthode de ton choix (il y a un paquet Debian qui semble fonctionner correctement cela dit, sous le nom `mcli`), il suffi denregistrer les deux alias qui vont bien:
```
mcli alias set service http://truenas:9000 cle_lecture_seule secret_lecture_seule
mcli alias set plugin http://truenas:10000 cle_lecture_écriture secret_lecture_écriture
```
Tant que tu ne tes pas emmêlé les saucisses entre les ports/s3 source et destination et les clés, ça devrait bien se passer. `mc` indique en général tout de suite si quelque chose ne va pas, cest déjà ça de pris.
Pour le transfert lui-même, il faut sarmer de patience (et de `tmux`) et se lancer:
```
mcli mirror --preserve service/<bucketA> plugin/<bucketB>
```
Une fois le transfert effectué, on peut simplement vérifier que lon a le bon nombre dobjets. La taille devrait être «comparable» mais pas forcément similaire (la méthode de calcul peut différer entre les deux versions).
À ce moment, on peut simplement stopper la version service de MinIO, remplacer les ports de la version plugin, puis éventuellement effacer les données.
Bien entendu, il faudra quand même sassurer que les données en question ont bien été transférées, bon courage là-dessus aussi.
# Conclusage
Un service qui sarrête, ce sont des choses qui arrivent. Ça ne fait plaisir à personne, mais des fois, il ny a simplement pas le choix (obsolescence, sécurité, maintenabilité, les raisons sont multiples).
Par contre, quand cest le cas, le minimum cest de prévenir bien à lavance et de fournir le plus possible aux usagers de la solution la possibilité de migrer de la manière la plus simple et la plus efficace possible.
Là, je suis franchement déçu par TrueNAS sur ce point. Non seulement la documentation officielle est remplie de trous (doù ce billet dailleurs), mais en plus elle est loin dêtre efficace. Je navais quun seul téraoctet de données en S3 et heureusement suffisamment de place à côté. Je nimagine même pas la galère les utilisateurs un peu justes en terme despace ou avec des volumétries bien plus importantes.