El corazón del clúster de Kubernetes: ETCD

Kevin Blanco 🥑
Kubernetes Costa Rica
4 min readJun 15, 2020

Cómo etcd organiza la información

Antes de empezar quiero aclarar que este articulo tiene los nombres de los elementos claves de Kubernetes en ingles.

Etcd es un componente crucial para Kubernetes, ya que almacena todo el estado del clúster: su configuración, especificaciones y los estados de las cargas de trabajo en ejecución. Vamos a desmembrarlo en este articulo para comprender cómo etcd almacena todos estos datos.

Introducción a Etcd

Etcd se define como un almacén de “key-value” distribuido y confiable para los datos más críticos del sistema distribuido de Kubernetes- https://etcd.io

etcd se utiliza como back-end para el descubrimiento de servicios y almacena el estado del clúster y su configuración.
Etcd se implementa como un clúster, varios nodos cuyas comunicaciones son manejadas por el algoritmo Raft. En un entorno de producción, un clúster contiene un número impar de nodos y se requieren al menos tres.

En mi articulo anterior les mencione por encima sobre este algoritmo y en este enlace web: http://thesecretlivesofdata.com/ pueden encontrar una gran animación que explica cómo funciona este algoritmo, ilustra varias etapas del ciclo de vida del clúster, entre ellas:

  • La elección del líder
  • Las réplicas de registro

Raft es un protocolo de consenso que trabaja eligiendo un líder central sobre el que se hacen las peticiones y coordina al resto de nodos para implementarlas.

En el contexto de un clúster de Kubernetes, las instancias de etcd se pueden implementar como pods en los masters (este es el ejemplo que usaré)

etcd implementado en los nodos maestros (fuente: documentación de Kubernetes)

Para agregar un nivel adicional de seguridad, también se puede implementar como un clúster externo. (Le invito a leer nuestro articulo sobre DevSecOps)

etcd implementados en un cluster externo (fuente: documentación de Kubernetes)

El siguiente diagrama de secuencia, se muestra los componentes involucrados durante un simple proceso de creación del pod. Es una gran ilustración del Servidor API y la interacción con etcd.

source: blog.heptio.com

Dentro de los valores que podemos encontrar en etcd, podemos listar:

  • Nodes
  • Namespaces
  • ServiceAccounts
  • Roles y RoleBindings, ClusterRoles y/o ClusterRoleBindings
  • ConfigMaps
  • Secrets
  • Workloads: Deployments, DaemonSets y Pods
  • Certificados del Cluster
  • Los recursos dentro de cada apiVersion
  • Los eventos que llevan al clúster al estado actual

Kubernetes usa etcd como su base de datos.

etcd es una base de datos distribuida, porque Kubernetes es un sistema distribuido.

etcd maneja muchos de los problemas difíciles al ejecutar una base de datos distribuida, como las condiciones de carrera y la creación de redes, y evita que Kubernetes se preocupe por eso.

etcd almacena el estado real del sistema y el estado deseado del sistema, luego usa la funcionalidad de observación de etcd para monitorear los cambios en cualquiera de estas dos cosas. Si divergen, Kubernetes realiza cambios para conciliar el estado real y el estado deseado.

Por ejemplo, al correr el comando `kubectl get xyz` se almacena en etcd y cualquier cambio que realice a través de `kubectl create` hará que se actualice una entrada en etcd.

Cualquier nodo que falle o el proceso fallezca hace que los valores en etcd sean cambiados.

Como podemos observar, etcd es el corazón de Kubernetes y es una pieza clave de su funcionalidad, por lo que conocer al respecto y entenderlo, es también pieza clave al utilizar K8s.

El propósito de este artículo no era profundizar tanto en etcd, sino más bien explicar un poco lo que contiene y cómo se organiza la información. Al hacerlo, espero que parezca menos una caja negra.

Les invito a seguir nuestros contenidos en nuestro canal de Youtube donde publicamos tutoriales y podcast respecto a Kubernetes y Google Cloud Platform.

--

--

Kevin Blanco 🥑
Kubernetes Costa Rica

Senior DevRel Advocate 🥑 at Appsmith, Certified Google Expert Advocate, Private Pilot