Cluster de stockage garage
TeDomum déploie la solution Garage développée principalement par Deuxfleurs pour héberger ses objets au sens S3 : https://garagehq.deuxfleurs.fr.
Pourquoi garage
Le stockage sur un cluster distribué géographiquement est une problématique complexe, qui nécessite des mécanismes essentiellement asynchrones.
A cela la plupart des solutions de réplication sont convergentes à terme, qu’il s’agisse d’une réplication principal-secondaire ou d’un cluster de pairs. La complexité en convergence à terme peut être soit portée par l’application, soit par le stockage essentiellement par des mécanismes d’élection de leader, seul apte à écrire.
Les systèmes à leader sont principalement répandus sur les bases relationnelles et sont peu adaptés à un déploiement en cluster sur des liens coûteux : le risque est fort que le trafic traverse plusieurs fois le WAN (client-proxy-application-stockage-réplication). On leut préfère partout où c’est possible un déport de la complexité dans l’architecture applicative.
C’est la proposition de S3 : un protocole de stockage très simple avec une sémantique native de convergence à terme. Les applications doivent gérer cette complexité (quoique le niveau de prise en compte est variable). Garage implémente notamment S3, sur fond de CRDT et de tables de Merkle pour assurer la cohérence à terme de l’ensemble des données. C’est la seule implémentation libre à date qui respecte la sémantique S3 (Minio par exemple est fortement cohérent en synchrone et se réplique mal en géographique). Cela en fait un très bon candidat de stockage, en plus d’être mis en oeuvre par des proches et d’être très bien soutenu à ce titre !
Topologie du cluster
Le cluster s’appuie sur plusieurs noeuds de Kity. La réplication est configurée à 3
avec une tolérance en lecture lorsque le quorum de 2 noeuds disponibles n’est pas atteint
(mode 3-degraded
de garage).
Région | Noeud | Capacité |
---|---|---|
fr-orl-1 | americancurl | 4To |
fr-kai-1 | cyprus | 4To |
fr-kai-1 | chartreux | 4To |
fr-kai-2 | dwelf | 4To |
fr-kai-2 | bambino | 4To |
fr-cyr-1 | levkoy | 4To |
La capacité totale du cluster dépend de la répartition précise des partitions dans garage, mais elle avoisine donc les 7To.
Commandes utiles
Pour lancer une commande garage en employant kubectl
sur Kity :
alias garage='kubectl -n storage-object exec svc/garage -- ./garage'
Actions sur les buckets
Obtenir de l’aide
garage bucket --help
Créer un bucket
garage bucket create <bucket_name>
Lister les buckets
garage bucket list
Infos d’un bucket
garage bucket info <bucket_name>
Supprimer un bucket
garage bucket delete <bucket_name> --yes
Actions sur les clés
Obtenir de l’aide
garage key --help
Créer une clé
garage key new --name <key_name>
Donner les droits de lecture et écriture à la clé
garage bucket allow <bucket_name> --read --write --key <key_name>
Lister les clés
garage key list
Supprimer une clé
garage key delete <key_name> --yes
Créer un PVC kubernetes sur garage avec la csi-s3
Utilisation
TL;DR: utiliser dans les valeurs de configuration de la chart helm la storageClass, kity-s3
.
Détails
Pour les cas où une application déployée dans kubernetes (kity) n’est pas capable d’utiliser nativement le protocol de stockage S3, il y a la possibilité de créer un PVC utilisant la storageClass kity-s3
.
Cette storageClass va monter un répertoire via un des logiciels fuse
disponible dans la CSI-s3
disponible ici.
L’operateur csi-s3 est configuré ici.
Voici un example de configuration de PVC créé par la csi-s3, ici pour le projet libretranslate.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: ch.ctrox.csi.s3-driver
volume.kubernetes.io/storage-provisioner: ch.ctrox.csi.s3-driver
labels:
app.kubernetes.io/component: app
app.kubernetes.io/instance: tedomum-apps_translate
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: libretranslate
helm.sh/chart: libretranslate-1.0.8
name: libretranslate-files-translate
namespace: tedomum-translate
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 3Gi
storageClassName: kity-s3
volumeName: pvc-1a2a14e0-574d-4ff8-ae47-5c5ee8bb029f
La configuration actuelle de cette storageClass kity-s3
va stocker ces données dans le bucket storage-csi-s3
du garage objects.tedomum.net
.
Un sous-dossier avec l’identifiant unique du PVC est créé dans ce bucket, dans l’example précédent: pvc-1a2a14e0-574d-4ff8-ae47-5c5ee8bb029f
.