SeaweedFS est un système de fichiers distribué très rapide et léger, idéal pour du stockage d’objets (compatible S3) ou du stockage de fichiers (CSI / POSIX).
Sur K3s / Kubernetes, le moyen le plus simple et le plus propre de l’utiliser pour du stockage distribué est de déployer l’opérateur SeaweedFS via Helm, puis de consommer ses volumes à travers une StorageClass.
SeaweedFS s’appuie sur FUSE pour le montage des volumes du driver CSI. Installez le paquet FUSE sur chaque nœud (Raspberry Pi ou serveurs) :
sudo apt update && sudo apt install -y fuse3
Ajouter le dépôt Helm :
Sur le nœud maître (Control Plane).Ajoutez le dépôt officiel SeaweedFS à Helm et mettez à jour la liste des charts.
helm repo add seaweedfs https://seaweedfs.github.io/seaweedfs/helm
helm repo update
Verification: Le terminal indique que le dépôt seaweedfs a été ajouté ou mis à jour avec succès.
Création d’un fichier de valeurs minimal.
Créez un fichier seaweedfs-values.yaml adapté à un petit cluster K3s pour activer le Master, le Volume Server, et le Driver CSI :
master:
enabled: true
replicas: 3 # Mettre 1 si vous n'avez qu'un seul nœud
volume:
enabled: true
replicas: 3 # Mettre 1 si un seul nœud
dataDirs:
- name: data
dir: /var/lib/seaweedfs/data
maxVolumes: 8
filer:
enabled: true
replicas: 1
csi:
enabled: true
driver:
name: seaweefs-csi-driver
Verification: Le fichier seaweedfs-values.yaml est bien créé dans votre répertoire courant.
Installer SeaweedFS dans le cluster
Installez la chart Helm dans le namespace dédié seaweedfs :
helm install seaweedfs seaweedfs/seaweedfs -f seaweedfs-values.yaml --namespace seaweedfs --create-namespace
Verification: Exécutez kubectl get pods -n seaweedfs. Tous les pods (master, volume, filer, csi) doivent passer à l’état Running.
Créer la StorageClass K3s
Créez un fichier seaweedfs-storageclass.yaml pour permettre à vos pods de réclamer du stockage :
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: seaweedfs-storage
provisioner: csi.seaweedfs.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
Appliquez-le :
kubectl apply -f seaweedfs-storageclass.yaml
Verification: La commande kubectl get sc doit afficher seaweedfs-storage dans la liste des classes de stockage disponibles.
Une fois la StorageClass créée, vous pouvez l’utiliser dans vos déploiements Kubernetes habituels :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mon-pvc-seaweedfs
spec:
accessModes:
- ReadWriteOnce
storageClassName: seaweedfs-storage
resources:
requests:
storage: 5Gi
Pour activer l’interface compatible S3 dans SeaweedFS et remplacer MinIO, il faut déployer le composant S3 Gateway (ou s3). Dans SeaweedFS, la passerelle S3 s’appuie sur le composant Filer pour gérer les métadonnées et le stockage des fichiers.
Voici comment l’activer soit via Helm sur K3s, soit en ligne de commande / Docker.
Mettez à jour votre fichier seaweedfs-values.yaml pour activer la section s3 :
master:
enabled: true
replicas: 3
volume:
enabled: true
replicas: 3
filer:
enabled: true
replicas: 2
# Activation de l'interface S3
s3:
enabled: true
replicas: 1
port: 8333
# Configuration des identifiants d'accès S3
auth:
config: |
{
"identities": [
{
"name": "admin",
"credentials": [
{
"accessKey": "votre_access_key",
"secretKey": "votre_secret_key"
}
],
"actions": [
"Read",
"Write",
"List",
"Tagging",
"Admin"
]
}
]
}
Appliquez la mise à jour avec Helm :
helm upgrade seaweedfs seaweedfs/seaweedfs -f seaweedfs-values.yaml --namespace seaweedfs
Si vous utilisez SeaweedFS hors Kubernetes, la passerelle S3 se lance en la raccordant au Filer existant.
Via le binaire SeaweedFS :
weed s3 -filer="localhost:8888" -port=8333
Via Docker Compose :
version: '3.7'
services:
s3:
image: chrislusf/seaweedfs
command: 's3 -filer="filer:8888" -port=8333'
ports:
- "8333:8333"
depends_on:
- filer
Une fois le service démarré (exposé sur le port 8333), vous pouvez interagir avec lui comme avec n’importe quel serveur S3 ou MinIO.
Exemple avec aws-cli :
# Configuration rapide des variables
export AWS_ACCESS_KEY_ID="votre_access_key"
export AWS_SECRET_ACCESS_KEY="votre_secret_key"
export AWS_DEFAULT_REGION="us-east-1"
# Créer un bucket S3
aws --endpoint-url http://192.168.1.X:8333 s3 mb s3://mon-bucket
# Envoyer un fichier
aws --endpoint-url http://192.168.1.X:8333 s3 cp mon-fichier.txt s3://mon-bucket/
Exemple avec le client MinIO (mc) :
# Ajouter l'alias SeaweedFS dans mc
mc alias set seaweed http://192.168.1.X:8333 votre_access_key votre_secret_key
# Lister les buckets
mc ls seaweed
Points clés pour remplacer MinI
Compatibilité API : SeaweedFS gère les opérations S3 courantes (PUT, GET, DELETE, Multipart Uploads, Presigned URLs).
Performances : Pour les petits fichiers (images, métriques, objets IoT), SeaweedFS offre généralement un débit supérieur et un surcoût mémoire bien plus faible que MinIO sur Raspberry Pi.