C’est un petit projet Go que j’ai voulu mettre à disposition, alors le voilà. Il s’agit d’un programme très simple faisant l’inventaire des snapshots Elasticsearch d’un cluster donné afin d’en nettoyer ceux dépassant une certaine date.
Fonctionalités clés
Voici quelques fonctionnalités de ce programme:
- Se connecte à une instance Elasticsearch, par défaut “es:9200”, toutes versions 6, 7 et 8 supportées. Configurable avec la variable d’env ES_ENDPOINT.
- Détecte automatiquement les repositories de snapshots configurés sur une instance (et prend la première trouvée). Configurable avec la variable d’env ES_REPO.
- Spécifie une durée de rétention de snapshots, de 14 jours par défaut. Configurable avec la variable d’env ES_CLEAN_AFTER_DAYS.
- Ne supprimera jamais le dernier snapshot, s’il n’en reste qu’un. Ceci est pratique si la création de snapshots ne fonctionne plus pour éviter de se retrouver à poil.
- Présente un mode dry-run
Il se configure en effet exclusivement grâce à des variables d’environnement. Je vous invite à en regarder la liste des variables d’env sur le README du repo pour le configurer en quelques secondes pour votre usage. Le choix des variables d’environnement plutôt que des paramètres en CLI est qu’il a été destiné dès le début à un usage cloud, où les variables d’env sont la voie la plus facile pour une configuration rapide.
Où le trouver
Il est trouvable sur mon repo github associé, déjà buildé dans la partie releases.
Il se configure et s’exécute simplement :
env ES_ENDPOINT=elasticsearch:9200 ES_CLEAN_AFTER_DAYS=7 ./es-snapshots-cleanup
Il est également conteneurisé sous le nom d’image novitnc/es-snapshot-cleanup:latest
:
docker pull novitnc/es-snapshot-cleanup
Et enfin il inclut directement l’objet Kubernetes Cronjob associé vous permettant de le déployer dans un cluster Kubernetes. Il a en effet vocation a être exécuté tous les jours. Après clonage du repo, le déployer dans votre cluster actuel de la façon suivante:
## ATTENTION, modifier le fichier avec vos variables d'environnement avant exécution !
kubectl apply -f deploy.yaml