Aller au contenu principal

Le Stockage Objet MinIO

Lorsqu'il s'agit de gérer des volumes importants de données, le choix du système de stockage devient un élément clé de l'infrastructure IT. Dans ce contexte, je souhaite vous présenter MinIO, une solution de stockage d'objets open source qui se distingue par sa haute performance et sa compatibilité avec l'API Amazon S3.

Historique de MinIO

MinIO a été lancé en 2014 par Anand Babu Periasamy, Harshavardhana, et Garima Kapoor. Ces co-fondateurs avaient une vision claire : créer une solution de stockage d'objets simple, performante et accessible, adaptée à l'ère du cloud et des données massives. Ils ont été inspirés par la simplicité et l'efficacité de l'API S3 d'Amazon, mais voulaient créer quelque chose qui pouvait être exécuté n'importe où, pas seulement dans le cloud d'Amazon.

Dès le début, MinIO a été conçu pour être minimaliste dans son approche. L'idée était de créer un système de stockage d'objets qui soit léger, facile à déployer et qui ne nécessite pas une infrastructure complexe. Cette philosophie a séduit de nombreux développeurs et administrateurs systèmes, surtout dans des contextes où la flexibilité et la simplicité d'utilisation sont primordiales.

Au fil des années, MinIO a gagné en popularité dans la communauté du stockage d'objets. Sa compatibilité avec l'API S3 d'Amazon a facilité son adoption par ceux qui cherchaient une alternative ou un complément aux services de stockage d'objets dans le cloud. MinIO est devenu une solution privilégiée pour les entreprises cherchant à construire des infrastructures de stockage hybrides ou multicloud.

En tant que projet open source, MinIO a bénéficié des contributions d'une communauté mondiale. Ces contributions ont aidé à élargir ses fonctionnalités, à améliorer sa sécurité et à optimiser ses performances. La communauté autour de MinIO est un aspect vital de son développement continu.

Architecture et Fonctionnalités de MinIO

Pour tirer pleinement parti de MinIO, il est crucial de comprendre son architecture. MinIO se distingue par une architecture simple, mais puissante, conçue pour fournir des performances élevées, une évolutivité et une flexibilité dans la gestion des données.

L'architecture de MinIO est fondamentalement minimaliste, ce qui contribue à ses performances exceptionnelles. Contrairement à d'autres systèmes de stockage d'objets qui peuvent être encombrés par des fonctionnalités et des composants supplémentaires, MinIO se concentre sur l'essentiel, offrant ainsi une efficacité maximale.

MinIO s'intègre parfaitement dans les environnements cloud natifs, notamment avec Kubernetes, offrant des fonctionnalités telles que le déploiement en cluster, la réplication automatique et la scalabilité horizontale.

MinIO est hautement évolutif, capable de gérer des pétaoctets de données et des milliards d'objets sans dégradation des performances.

  • Mode Distribué : En mode distribué, MinIO peut être déployé sur plusieurs serveurs, répartissant la charge et améliorant à la fois la tolérance aux pannes et la disponibilité des données.
  • Erasure Coding : MinIO utilise le codage par effacement pour protéger les données. Cela permet une récupération efficace des données en cas de perte partielle de disque ou de serveur.

MinIO est entièrement compatible avec l'API S3 d'Amazon, ce qui le rend facile à adopter pour ceux qui sont déjà familiers avec les services de stockage d'objets S3.

MinIO ne fait aucun compromis sur la sécurité :

  • Chiffrement côté serveur : Le chiffrement des données au repos est géré de manière transparente.
  • Authentification et Autorisation : MinIO prend en charge plusieurs méthodes d'authentification, y compris les clés d'accès et les politiques de contrôle d'accès granulaires. 2. Support SSL/TLS : Pour le chiffrement des données en transit.

MinIO s'intègre avec une variété d'outils et de plateformes, y compris des solutions de sauvegarde, des systèmes de surveillance et des plateformes d'analyse de données.

MinIO offre une interface de ligne de commande (CLI) complète et une interface web pour la gestion et la surveillance.

Installation et Configuration de MinIO

MinIO a été conçu pour être simple à déployer tout en offrant une flexibilité et une sécurité robustes, le rendant idéal pour une grande variété d'applications, des analyses de données en passant par la sauvegarde et la gestion de contenu. Sa nature légère et sa capacité à s'exécuter sur des environnements variés, des VMs aux conteneurs Kubernetes, en font un choix polyvalent pour tout administrateur système. Ici, nous allons l'installer dans une VM provisionné avec Terraform sur un Cluster Proxmox.

Pour une installation de MinIO plus simple, je vous recommande d'utiliser les packages RPM ou DEB, selon votre distribution Linux et de créer un utilisateur et poser les bonnes permissions.

Création d'un Utilisateur et d'un Groupe pour MinIO

Avant l'installation, il est judicieux de créer un utilisateur et un groupe spécifiques pour MinIO. Cela améliore la sécurité en s'assurant que MinIO s'exécute avec des privilèges limités.

sudo groupadd -r minio-user
sudo useradd -r -g minio-user -s -d /home/minio-user /sbin/nologin minio-user

Créez un répertoire pour stocker les données de MinIO et attribuez-lui les permissions appropriées.

sudo mkdir /data
sudo chown minio-user:minio-user /data
sudo chmod 750 /data

Installation de MinIO via RPM ou DEB

Selon votre distribution, vous pouvez installer MinIO en utilisant un package RPM ou DEB. Cela facilite la gestion de l'installation et des mises à jour.

  • Sur les Distributions basées sur RPM (comme CentOS, Fedora) :

    sudo dnf install https://dl.min.io/server/minio/release/linux-amd64/minio-20231223071911.0.0-1.x86_64.rpm
    
  • Sur les Distributions basées sur DEB (comme Ubuntu, Debian) :

    wget https://dl.min.io/server/minio/release/linux-amd64/minio_20231223071911.0.0_amd64.deb -O minio.deb
    sudo dpkg -i minio.deb
    

Configuration des Variables d'Environnement

Configurez les variables d'environnement pour définir les identifiants d'accès et autres paramètres importants.

Créez le fichier de configuration :

sudo nano /etc/default/minio

Ajoutez les lignes suivantes** (remplacez votreAccessKey et votreSecretKey par vos clés) :

MINIO_ACCESS_KEY=votreAccessKey
MINIO_SECRET_KEY=votreSecretKey
MINIO_VOLUMES="/data"

Démarrage et Gestion de MinIO

Après l'installation, démarrez MinIO et assurez-vous qu'il s'exécute correctement.

  • Démarrage du Service MinIO :
sudo systemctl start minio
  • Activation du Démarrage Automatique :
sudo systemctl enable minio
  • *Vérification du Statut du Service ::
sudo systemctl status minio

** Activation de TLS/SSL pour Sécuriser MinIO

La mise en place du TLS/SSL est une étape importante pour sécuriser les communications entre vos clients et votre serveur MinIO. Ce processus garantit que toutes les données transmises sont chiffrées, protégeant ainsi contre les écoutes indiscrètes et les attaques de type man-in-the-middle. Voici comment procéder pour activer TLS/SSL dans MinIO.

Génération des Certificats

Pour activer TLS/SSL, vous aurez besoin d'un certificat SSL et d'une clé privée. Vous pouvez obtenir ces certificats auprès d'une autorité de certification (CA) ou générer un certificat auto-signé pour les tests ou les environnements internes. Comme d'habitude, je vais utiliser mkcert :

sudo su - minio-user
mkcert -key-file key.pem -cert-file cert.pem minio.robertlocal
mkdir -p ~/.minio/certs/
mv key.pem ~/.minio/certs/private.key
mv cert.pem ~/.minio/certs/public.crt

Après avoir placé les certificats dans le bon répertoire, MinIO doit être redémarré pour utiliser TLS/SSL :

sudo systemctl restart minio

Vérification de la Configuration SSL : Accédez à l'interface utilisateur de MinIO en utilisant https. Par exemple, https://minio-server:9001. Vous devriez voir une connexion sécurisée sans avertissements de sécurité.

Avec ces étapes, vous avez non seulement installé MinIO de manière plus sécurisée et conforme aux standards de production, mais vous avez également configuré un environnement spécifique pour MinIO qui améliore la gestion et la sécurité de votre instance.

Cas d'usages de MinIO

Une fois que MinIO est optimisé pour des performances élevées, il est important de considérer son intégration avec d'autres outils et systèmes.

Utilisation de la CLI mc

mc (MinIO Client) est un outil en ligne de commande fourni par MinIO pour gérer et interagir avec votre serveur MinIO. Il est essentiel pour la vérification et la gestion du serveur. Dans ce chapitre, je vais vous guider sur l'installation de mc via asdf et son utilisation pour vérifier le bon fonctionnement de votre serveur MinIO.

Installation de mc avec asdf

asdf est un gestionnaire de versions qui permet de gérer facilement plusieurs versions d'outils de développement. Voici comment installer mc avec asdf :

asdf plugin-add mc
asdf install mc latest
asdf global mc latest

Assurez-vous que mc est correctement installé en vérifiant sa version.

mc --version

mv (GNU coreutils) 8.32
Copyright © 2020 Free Software Foundation, Inc.
License GPLv3+ : GNU GPL version 3 ou ultérieure <https://gnu.org/licenses/gpl.html>
Ceci est un logiciel libre. Vous êtes libre de le modifier et de le redistribuer.
Ce logiciel n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE, dans les limites
permises par la loi.

Écrit par Mike Parker, David MacKenzie et Jim Meyering.

Configuration de mc pour Interagir avec MinIO

Après l'installation, configurez mc pour communiquer avec votre serveur MinIO.

Utilisez la commande mc alias set pour ajouter votre serveur MinIO.

mc alias set myminio https://minio.robert.local:9000 MINIO_ACCESS_KEY MINIO_SECRET_KEY

Remplacez https://minio-server:9000 par l'URL de votre serveur MinIO et utilisez vos propres clés d'accès.

Vérification du Fonctionnement du Serveur MinIO

Utilisez mc pour vérifier le statut et les paramètres de votre serveur MinIO.

Vérifiez si vous pouvez lister les buckets sur MinIO.

mc ls myminio
[2023-12-28 17:23:20 CET]     0B test/

Utilisez la commande admin info pour obtenir des informations sur l'état du serveur MinIO.

mc admin info myminio
●  minio.robert.local:9000
   Uptime: 1 hour
   Version: 2023-12-23T07:19:11Z
   Network: 1/1 OK
   Drives: 1/1 OK
   Pool: 1

Pools:
   1st, Erasure sets: 1, Drives per erasure set: 1

1.2 MiB Used, 1 Bucket, 1 Object, 2 Versions, 1 Delete Marker
1 drive online, 0 drives offline

Vous pouvez également tester en téléchargeant et téléversant des fichiers pour vous assurer que le serveur fonctionne correctement.

mc cp fichier_test.txt myminio/test
mc cp myminio/test/fichier_test.txt fichier_test_download.txt

Stockage des États Terraform

Terraform, un outil populaire de gestion d'infrastructure en tant que code, utilise un fichier d'état pour suivre l'état actuel de l'infrastructure. Stocker ce fichier d'état de manière sécurisée et accessible est essentiel. MinIO, avec sa compatibilité S3, offre une solution robuste pour cela.

Pour configurer Terraform, afin d'utiliser MinIO pour le stockage d'état, définissez un backend S3 dans votre configuration Terraform :

terraform {
  backend "s3" {
    endpoint = "https://minio.robert.local:9000"
    bucket   = "terraform-state"
    key = "terraform.tfstate"
    region = "main"
    access_key = "MINIO_ACCESS_KEY"
    secret_key = "MINIO_SECRET_KEY"
    skip_credentials_validation = true
    skip_metadata_api_check = true
    skip_region_validation = true
    force_path_style = true
  }
}

Solution de Sauvegarde

MinIO peut aussi jouer un rôle important dans les stratégies de sauvegarde. Sa haute disponibilité et sa résilience en font une cible idéale pour stocker des sauvegardes. De nombreux outils de sauvegarde qui supportent S3 peuvent être configurés pour utiliser MinIO.

Par exemple, pour configurer un outil pour envoyer des sauvegardes vers MinIO, utilisez les informations d'authentification et l'endpoint de votre serveur MinIO. Chaque outil aura une configuration légèrement différente, mais la plupart nécessiteront ces informations de base.