Howto MinIO
- Documentation : https://min.io/docs/minio/kubernetes/upstream/
- Code : https://github.com/minio/minio
- Licence : GNU AFFERO GENERAL PUBLIC LICENSE v3.0
- Language : Go
MinIO est un système de stockage écrit en Go qui fournit une API compatible avec Amazon S3. Comme Amazon S3, c’est de l’object storage : chaque fichier inclus est un objet. Les objets sont alors stockés dans un seau (bucket).
L’architecture est séparée en serveur, client (mc
) et
client SDK (qui fournit l’API) disponible en divers langages (Java, Go,
Node.js, Python, .NET, Haskel).
Requis
Les requis du système selon la documentation officielle :
- Assez de processeurs pour le hachage ;
- Assez de mémoire vive pour le cache disque (au moins 128 Go par nœud pour haute performance) ;
- Au moins quatre nœuds pour le stockage d’objets ;
- Au moins huit disques par serveur pour les données ;
Installation
Des paquets Debian sont disponibles au téléchargement (mais sans dépôt). Comme c’est du Go, le paquet (serveur ou client) ne fournit qu’un binaire, compatible a priori avec n’importe quelle version de Debian. Cela permet de mettre en place rapidement le service dans un environnement de développement.
- Serveur
# wget https://dl.min.io/server/minio/release/linux-amd64/minio_YYYYMMDDHHMMSS.0.0_amd64.deb
# apt install ./minio_YYYYMMDDHHMMSS.0.0_amd64.deb
- Client
# curl -o /usr/local/bin/mc https://dl.min.io/client/mc/release/linux-amd64/mc
# chmod +x /usr/local/bin/mc
Administration
Cette documentation n’aborde que l’administration en ligne de commande.
On suppose que ALIAS est un alias configuré avec un accès administrateur.
Créer un utilisateur
$ mc admin user add ALIAS UTILISATEUR MOTDEPASSE
Le mot de passe doit faire entre 8 et 40 caractères.
$ apg -M CN -m 40 -n 1
Utilisation
Un service systemd est fourni
(/etc/systemd/system/minio.service
), mais pour un premier
test, le serveur peut être lancé directement.
$ mkdir ~/minio
$ MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password minio server ~/minio --console-address ":9001"
Attention : le volume qui héberge le répertoire des données du
serveur, ici ~/minio
, doit faire au
moins 1 Gio.
L’interface web est alors disponible en http://localhost:9001.
Le client en ligne de commande peut aussi être configuré.
$ mc alias set local http://localhost:9000 admin password
Il est maintenant possible de créer un espace de stockage
(bucket) sur le serveur, et d’y placer un fichier. Voir la
section #minio-client pour plus d’information sur la
commande mc
.
$ mc mb local/bucket
Bucket created successfully `local/bucket`.
$ echo data >> /tmp/test
$ mc ls local
[2022-11-08 16:54:07 CET] 0B bucket/
$ mc cp /tmp/test local/bucket
/tmp/test: 5 B / 5 B ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78 B/s 0s
$ mc ls local/bucket
[2022-11-08 16:57:46 CET] 5B STANDARD test
MinIO Client
Il s’agit un outil en ligne de commande pour interagir avec du stockage compatible Amazon S3. Le code est accessible sur GitHub. Il y a une page dédiée à cet outil : HowtoMinIO.
On défini un alias, qui est un nom pour le stockage S3.
$ mc alias set <alias> https://<hote> <access_key> <secret_key>
On peut préciser un port :
$ mc alias set <alias> https://<hote>:<port> <access_key> <secret_key>
La configuration est enregistrée dans le fichier
~/.mc/config.json
.
Pour créer un bucket :
$ mc mb <alias>/<bucket>
Pour lister les objets dans un bucket :
$ mc ls <alias>/<bucket>
Pour copier un fichier :
$ mc cp mon_fichier <alias>/<bucket>/
Pour supprimer un bucket :
$ mc rb <alias>/<bucket>
Miroir
Pour faire une copie (synchro) des données dans
mon_alias
(serveur) vers le répertoires
/backup
.
$ mc --json mirror --exclude '*/un_repertoire/*' --exclude '*/un_autre/repertoire/*' --overwrite --remove mon_alias/ /backup/
FAQ
Impossible d’ajouter un objet alors qu’il y a encore de la place
On a un petit volume d’un peu moins de 1 Gio pour essayer MinIO, mais impossible de copier un fichier de 15 Mio alors qu’il y a plus de 800 Mio de libres.
$ head -c 16M /dev/zero > zero.img
$ mc cp zero.img minio/mybucket/
mc: <ERROR> Failed to copy `/home/user/zero.img`. Storage backend has reached its minimum free drive threshold. Please delete a few objects to proceed.
Le volume qui héberge le répertoire des données du serveur est trop petit. Il doit faire au moins 1 Gio. Voir l’issue 6795 sur GitHub.