Cos'è etcd
Published: 2023-10-03 14:24:29

---
title: Cos'è etcd
published: true
date: 2023-03-23 00:00:00 UTC
tags: 
canonical_url: 
---

# Cosa vedrai

- [Etcd](#etcd)
- [Caratteristiche](#caratteristiche)
- [Risorse utili](#risorse-utili)

# Etcd

[etcd](https://etcd.io/) è un datastore open source basato su coppie chiave-valore utilizzato per gestire e archiviare i dati che aiutano un sistema distribuito -come un cluster- a rimanere in esecuzione correttamente.

[etcd](https://etcd.io/) è conosciuto principalmente per essere uno dei componenti chiave di Kubernetes, dal momento che <ins>memorizza i dati relativi allo stato, alla configurazione e ai metadati</ins> di Kubernetes.

Questo componente viene considerato l’unica **fonte di verità** rispetto allo stato del cluster.

# Caratteristiche

## Replicazione e coerenza

Tra le tante caratteristiche, _etcd_ è **replicato** : questo vuol dire che ogni nodo del cluster ha pieno accesso al datastore e ai suoi dati.

[etcd](https://etcd.io/) è anche **coerenza** : tutti i dati letti in un cluster rappresentano la situazione attuale dello stato del cluster.

In un cluster _etcd_ -per un momento abbandoniamo Kubernetes- immaginiamo di avere quattro nodi, di cui uno rappresenta il nodo _leader_ e gli altri sono i _follower_.

![](https://theredcode.it/img/etcd-replicato.png)

Essendo un datastore che memorizza i dati sotto forma di chiave-valore, ognuno di essi avrà memorizzati dei dati che usano questo formato.

Immaginiamo, ad esempio, che all’interno di _etcd_ sia memorizzata una coppia la cui chiave è 1 e il cui valore è 33:

![](https://theredcode.it/img/etcd-stato-attuale.png)

Quando arriva una nuova richiesta da un client, questa transita verso uno qualsiasi dei nodi: se si tratta proprio del nodo leader, questo comunicherà l’aggiornamento ai suoi follower e attenderà che tutti abbiano aggiornato l’informazione a quella dello stato richiesto -il tutto avviene in pochi millisecondi!-.

![](https://theredcode.it/img/etcd-nuova-request.png)

![](https://theredcode.it/img/etcd-nuova-aggiornamento.png)

> Una request può arrivare anche ad un nodo follower, che non è detto sia coerente con la base dati attuale: se  
> chiedesse il valore attuale della chiave 1 e questi non fosse aggiornato, non si avrà una situazione di inconsistenza.<ins>Il nodo sa di essere un <em>follower</em></ins>, per cui non è autorizzato a rispondere direttamente a chi ha fatto la richiesta. Inoltrerà la request al nodo leader, il quale risponderà con l’informazione aggiornata.

## Alta disponibilità

Immaginiamo che il nodo leader per qualche motivo vada in errore: chi sarà il nuovo leader?

In effetti, _etcd_ si basa sull’algoritmo [Raft](https://raft.github.io/), che serve a gestire il consenso in un sistema distribuito per garantirne l’alta disponibilità e un ottimo livello di performance.

Questo vuol dire che i follower potranno candidarsi all’elezione del nuovo leader e ognuno voterà in base alla disponibilità, di modo che un nuovo leader venga eletto. Il nuovo leader si occuperà di gestire anche la replicazione dei nodi e i dati presenti nel datastore non saranno in alcun modo persi.

## Veloce

[etcd](https://etcd.io/) ha una performance di circa 10.000 scritture al secondo, ma _salva i dati su disco_: questo vuol dire che la performance dipende da quelle del disco.

## Sicurezza

Trattandosi di informazioni sensibili, perché rappresentano lo stato del cluster, è importante che [etcd](https://etcd.io/)sia anche sicuro: questo supporta TLS nonchè la possibilità di utilizzare un meccanismo di autenticazione che usi i certificati del client.

> Se ti è piaciuto questo articolo, non ti dimenticare di commentare e condividere! ⬇️

# Risorse utili

- [Docker (disponibile su Amazon)](https://amzn.to/3cSVvUG)
- [Come installare Docker (e Docker Compose)](https://www.youtube.com/watch?v=Xea_9GYFpaA)
- [Esplorando il Dockerfile](https://www.theredcode.it/esplorando-il-dockerfile/)
- [Canale di Emmecilab](https://www.youtube.com/c/EmmeCiLab/about)