etcd c'est le goulot d'étranglement de Kubernetes non faut pas se mentir

Posté par rene-gilles le 17/01/2026
RÉSOLU

rene-gilles

Membre depuis le 02/03/2025

On parle toujours de scaler les workers de K8s mais le vrai problème c'est toujours etcd.

Nos clusters ont des latences de dingue sur l'API server dès qu'on monte un peu en charge. On a des millions d'objets, des opérateurs qui crachent leurs vies dans etcd, et ça rame.

C'est censé être le cœur mais on dirait le point de défaillance unique. On devrait pas avoir d'alternatives pour le stockage de l'état de K8s qui n'est pas critique mais qui est juste du config genre ?

Commentaires

chamel

Membre depuis le 18/05/2019

actif secouriste

Sérieusement etcd c'est le Raft sous K8s c'est le seul truc qui garantit que ton cluster est consistent. T'as 3 masters tu répliques le state pour la tolérance de pannes. Sans ça K8s est un tas de machines qui parlent dans le vide.

Vouloir une alternative c'est pas comprendre pourquoi etcd est là.

ramos-michele

Membre depuis le 05/08/2019

actif secouriste

Comprendre pourquoi c'est une chose l'opérer c'en est une autre. etcd demande des ressources I/O monstrueuses et une latence réseau quasi nulle entre les nœuds. Pour un cluster K8s de 500 nœuds et 100 000 pods t'es mort sans NVMe et 100Gbit.

Et même là la compaction régulière c'est un calvaire ça te met le cluster en PLS.

adelaide03

Membre depuis le 06/12/2024

actif secouriste

Le problème c'est pas etcd en soi c'est les devs d'opérateurs qui ne pigent rien à la persistance distribuée. Ils créent des CRD géantes avec des centaines de champs ils les update toutes les secondes.

Chaque write c'est un append dans le WAL de Raft c'est répliqué sur le quorum. C'est le design qui est merdique pas etcd.

chamel

Membre depuis le 18/05/2019

actif secouriste

Mais etcd est fait pour ça. Il a des optimisations pour les accès pattern de l'API server. Si tu commences à mettre du PostgreSQL ou du Consul pour ton control plane tu perds la sémantique de K8s.

Les watchers K8s s'appuient sur etcd pour la notification des changements. Comment tu gères ça avec une base SQL sans polling intensif et coûteux ?

ramos-michele

Membre depuis le 05/08/2019

actif secouriste

Personne a dit de remplacer etcd pour le control plane pur. Mais pour les états d'opérateurs les queues de tâches la config non critique on peut externaliser ça.

On a des opérateurs qui foutent des logs de 100Ko dans des CRD c'est ça le problème. Pour du simple KV on peut utiliser Redis pour du transient ou une vraie base de données pour du plus gros.

adelaide03

Membre depuis le 06/12/2024

actif secouriste

C'est facile de blâmer les opérateurs. K8s lui-même a ses propres problèmes de scaling d'objets. Un grand nombre de ConfigMap ou de Secrets ça pèse aussi sur etcd.

Et la gestion des secrets c'est un bordel tu veux pas les logger dans etcd en clair. Faut du Vault avec l'external-secrets-operator.

chamel

Membre depuis le 18/05/2019

actif secouriste

Vault c'est une autre couche. Etcd gère les secrets mais K8s chiffre les données at rest. On fait pas ça n'importe comment. L'intégration de etcd est profonde.

Si on commence à découpler le stockage de l'état du control plane on rentre dans une complexité pas possible pour maintenir la cohérence transactionnelle.

ramos-michele

Membre depuis le 05/08/2019

actif secouriste

La complexité opérationnelle d'etcd elle est déjà pas possible. Faut monitorer le disque le réseau le nombre de requêtes le nombre de wal files. C'est un SRE nightmare.

Avec des outils comme Prometheus et Thanos on arrive à collecter les métriques mais ça n'enlève pas la difficulté de debugging un quorum perdu à 3h du mat.

adelaide03

Membre depuis le 06/12/2024

actif secouriste

La vraie difficulté c'est le tuning du kernel et de la couche I/O. Faut que ton système de fichiers supporte les fsync à gogo. L'intégration de io_uring dans Linux pourrait aider mais etcd est une bête à part.

Un Raft sur trois nœuds c'est sensible. La latence du réseau la saturation d'un CPU n'importe quoi peut casser le quorum et là c'est la panique.

chamel

Membre depuis le 18/05/2019

actif secouriste

Mais c'est le prix de la strong consistency. Si tu veux une plateforme fiable tu dois payer ce prix. L'éventual consistency ça pète des trucs en prod à coup sûr pour le control plane.

Les microservices peuvent se permettre de l'eventual consistency mais pas K8s lui-même.

ramos-michele

Membre depuis le 05/08/2019

actif secouriste

Et le FinOps dans tout ça ? Des nœuds masters avec des NVMe surdimensionnés ça coûte un bras. Si 80% des writes c'est des opérateurs qui spamment etcd avec des infos inutiles on paye cher pour de la merde.

Une stratégie de déchargement de l'état non critique pourrait faire économiser des millions sur des grosses infra.

adelaide03

Membre depuis le 06/12/2024

actif secouriste

C'est une discussion de conception d'application en fait. Les opérateurs doivent être conçus pour être "etcd-friendly". Stocker uniquement ce qui est nécessaire pour le control loop et pas plus.

Utiliser des ConfigMap pour de la config statique et pas des CRD géantes.

chamel

Membre depuis le 18/05/2019

actif secouriste

C'est de la bonne pratique mais ça ne change pas que etcd est fondamental pour K8s. La solution c'est de mieux gérer etcd pas de le remplacer par un truc qui ne fait pas le job.

Bien monitorer avec eBPF pour voir les latences exactes sur les syscalls et comprendre pourquoi ça rame.

ramos-michele

Membre depuis le 05/08/2019

actif secouriste

eBPF c'est un super outil pour l'observabilité du kernel et de l'I/O mais ça va pas réécrire le code de etcd ni des opérateurs. Si ton disque est saturé eBPF va te dire qu'il est saturé c'est tout.

On doit repenser ce qu'on met dans etcd.

adelaide03

Membre depuis le 06/12/2024

actif secouriste

Absolument. Il y a des cas d'usage où des bases de données de graphe ou même des systèmes de messaging distribué seraient plus adaptés pour la coordination complexe entre microservices que d'abuser de etcd.

etcd c'est pour l'état K8s pas pour le stateful de tes applications custom.

chamel

Membre depuis le 18/05/2019

actif secouriste

Totalement d'accord sur le fait de pas mettre n'importe quoi dans etcd. Mais ça reste le garant de K8s. On peut pas juste le jeter.

Il faut juste qu'on arrête de le traiter comme une base de données générique.

rene-gilles

Membre depuis le 02/03/2025

Ok je vois le point sur la nécessité d'etcd pour le cœur de K8s et sa strong consistency. On ne peut pas juste le remplacer.

Mais les arguments sur le FinOps les coûts opérationnels les I/O et les abus par les opérateurs ça me parle. Je vais pousser pour qu'on impose des guidelines strictes aux devs d'opérateurs pour éviter de polluer etcd avec de l'état non critique.

On pourrait même envisager d'externaliser certains types d'état vers des bases plus adaptées. Merci pour ce débat.

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire