Suite à l’introduction de Kubernetes où j’ai
décrit le fonctionnement d’un cluster Kubernetes, je vais expliquer comment
administrer le composant ETCD.
Etcd, qu’est-ce-que-c’est ?
Rappel : ETCD est une base de données distribuée de type
clé-valeur, qui a été développée en “Go”, le langage de programmation de
Google. Dans un cluster Kubernetes, ETCD est chargé de stocker la
configuration et les informations nécessaires au fonctionnement du cluster,
c’est-à-dire de tous ses composants : les nœuds, les pods, les configs, les
secrets, les rôles, les comptes, …
Création d’un cluster Kubernetes avec Kind
Je vais utiliser des clusters [Kubernetes créés avec l’utilitaire
Kind](nc un
parfait candidat pour se préparer aux certifications CKA. En effet, kind
intègre tous les composants contrairement à d’autres solutions comme minikube ou
k3s.
En premier créer un fichier de config pour configurer un cluster avec trois
master nodes et un worker. Pourquoi trois nodes et pas deux ? Parce qu’il est
fortement conseiller de mettre en place des clusters avec un nombre impair de
serveurs.
Maintenant lançons la création du cluster avec la dernière version de
Kubernetes (voir le lien ci-dessus) :
Contrôlons nos nodes :
Contrôlons que nous avons bien un cluster ETCD :
Etcd est bien installé sur les 3 nodes masters !
Affichons la configuration du cluster etcd :
Les informations importantes à retenir dont nous aurons besoin avec la commande
etcdctl :
Connexion au serveur du Control-Plane
Ici comme utilisons kind, nous nous connecterons aux nodes non pas en SSH mais
avec la commande docker. En effet, les conteneurs etcd sont vraiment léger et ne
possède que peu de commandes.
Quelques commandes pour démarrer avec ETCD
Installation de la CLI etcdctl
Nous devons installer la CLI etcdctl sur le master node (Toutes les commandes
seront lancées depuis ce node) :
Nous utiliserons la version 3 de l’API d’ETCD :
Contrôle de l’état de santé cluster ETCD
Dans un premier temps listons les membres du cluster ETCD :
Nous retrouvons bien nos trois nœuds qui sont en bonne santé. Pour connaître le
leader nous allons plutôt utiliser la commande endpoint status :
Le node 1 est le leader !
Si nous arrêtons un noeud le cluster etcd sera toujours fonctionnel. En effet,
avec l’algorithme Raft nous avons droit à une défaillance sur les 3 serveurs.
Si deux sont inaccessibles, le cluster passe en read-only et du coup le cluster
kubernetes devient instable !
Nombre de noeuds
Tolérance de défaillance
1
0
2
0
3
1
4
1
5
2
6
2
Promouvoir un nœud
Il est possible à tout moment de promouvoir un nœud comme leader dans le cas ou
vous devriez intervenir sur le noeud master actuel :
Faire des backups/restaurations d’etcd
Parfois en développement, nous n’utiliserons pas forcément des manifests pour
gérer nos déploiements. Donc pour revenir en arrière nous pouvons utiliser des
sauvegardes de la base ETCD.
Il suffit d’utiliser les commandes snapshot save pour le backup et snapshot restore pour la restauration :
Pour restaurer :
Jouer avec les clés/valeurs
Ajout de clé/valeur
La commande pour ajout une clé/valeur est put :
OK
Afficher une clé/valeur
La commande pour ajout une clé/valeur est get :
Par afficher que la valeur on peut ajouter --print-value-only et pour que la
clé --keys-only. De même on peut demander l’affichage en json :
Les valeurs sont codées en base64.
Pour afficher toutes les clés commençant par le prefix :
Pour afficher tous les objets Kubernetes de la base :
Créer/Détruire un dossier
Lister toutes les clés
Il est possible d’afficher toutes les clés d’une base avec la commande suivante :
Effacer une clé/valeur
La commande pour ajout une clé/valeur est del :
Scruter les changements d’une clé
La commande watch permet de monitorer une clé. Sur le premier nœud :
Dans une seconde session modifier la valeur ou détruisez-la !
Vous devriez voir apparaître des messages dans la première session :
Quelques Conseils
Les performances et la stabilité du cluster sont liés aux performances E/S
réseau et disque des serveurs. Toute pénurie de ressources peut entraîner une
expiration du délai de pulsation, provoquant une instabilité du cluster. Un etcd
instable est un cluster ou aucun master n’est élu. Dans de telles circonstances,
un cluster ne peut apporter aucune modification à son état actuel.
Il est conseillé d’installer les clusters etcd sur des machines dédiées ou des
environnements isolés pour garantir les besoins en ressources.
La version minimale recommandée d’etcd à exécuter en production est 3.2.10+.