etcd
Définition
etcd est un stockage clé-valeur distribué et fiable, utilisé comme squelette de configuration partagée et de découverte de service pour les systèmes distribués. Développé par CoreOS (maintenant partie de Red Hat) et hébergé par la CNCF, c’est le backend de stockage par défaut de Kubernetes.
etcd stocke des données critiques sur l’état d’un système distribué, en assurant la cohérence sur tous les nœuds grâce à l’algorithme de consensus Raft.
Concepts clés
- Stockage clé-valeur : Mappe simple de clés chaîne de caractères en valeurs tableau d’octets
- Consensus Raft : Consensus basé sur un leader pour une forte cohérence
- Watch/Monitor : Les clients peuvent surveiller les modifications de clés en temps réel
- TTL (Time To Live) : Les clés peuvent expirer automatiquement
- Révision : Chaque écriture incrémente un numéro de révision global
- Lease : Les clés peuvent être liées à un bail ; la clé est supprimée à l’expiration du bail
- Lectures linéarisables : Garantie de voir la dernière écriture
Architecture etcd
Client → nœud etcd (Leader) → Protocole Raft → nœuds etcd (Followers)
→ nœuds etcd (Followers)
→ nœuds etcd (Followers)
- Leader gère toutes les requêtes de lecture/écriture
- Followers répliquent le journal du leader
- Raft assure que tous les nœuds sont d’accord sur l’état
- Quorum : La majorité des nœuds doit être d’accord pour qu’une écriture réussisse
Cas d’usage etcd
|| Cas d’usage | Description | ||———-|————-| || Stockage API Kubernetes | Stocke tout l’état du cluster (Pods, Services, ConfigMaps) | || Découverte de service | Les services s’enregistrent ; les clients découvrent par recherche de clé | || Gestion de configuration | Store de configuration centralisé pour les systèmes distribués | || Élection de leader | Élection de leader distribuée via les baux/verrous | || Verrous distribués | Exclusion mutuelle entre nœuds | || Store de métadonnées | Stocker les métadonnées et l’état des applications |
etcd vs Consul vs ZooKeeper
|| Fonctionnalité | etcd | Consul | ZooKeeper | ||———|——|——–|———–| || Modèle de données | Clé-valeur | Clé-valeur + DNS | Arborescence | || Consensus | Raft | Raft | ZAB | || Découverte de service | Intégré | Intégré (principal) | Limitée | || Vérifications de santé | Basé sur les watches | Intégré | Basé sur les watches | || Multi-datacenter | Natif | Natif | Complexe | || Kubernetes | Stockage par défaut | Alternative | Alternative | || Langage | Go | Go | Java |
Commandes etcd
# Écrire une clé
etcdctl put /mykey "myvalue"
# Lire une clé
etcdctl get /mykey
# Surveiller les modifications
etcdctl watch /mykey
# Supprimer une clé
etcdctl del /mykey
# Lister les clés avec un préfixe
etcdctl get / --prefix --keys-only
# Compacter et défragmenter
etcdctl compact <révision>
etcdctl defrag
Termes associés
- Kubernetes — algorithme de consensus utilisé par etcd
- Consul — alternative pour la mesh de service et le store de configuration
- ZooKeeper — ancien système de coordination distribuée
- Systèmes distribués — etcd est un composant fondamental des systèmes distribués
Références
- Docs etcd : https://etcd.io/docs/
- Article Raft etcd : https://github.com/etcd-io/raft
- CNCF etcd : https://www.cncf.io/projects/etcd/
- Référence etcdctl : https://etcd.io/docs/v3.5/op-guide/cli/