# Componentes y conceptos básicos de Kubernetes

---
Mapa rápido de las partes que componen un clúster y los objetos más habituales que se gestionan. No pretende explicar cada detalle, solo servir de referencia visual y orden mental.

---

### Arquitectura general

**Control Plane** (el cerebro del clúster):

* **API Server** → punto de entrada de todas las peticiones (`kubectl`, dashboards, controladores).
* **etcd** → base de datos donde se guarda el estado del clúster.
* **Controller Manager** → vigila que el estado real coincida con el deseado (replicas, jobs, etc.).
* **Scheduler** → decide en qué nodo se ejecuta cada Pod.

**Nodos de trabajo (Workers):**

* **kubelet** → agente que ejecuta Pods y reporta su estado.
* **kube-proxy** → gestiona reglas de red y balanceo.
* **Container Runtime** → ejecuta los contenedores (containerd, CRI-O, Docker, etc.).

---

### Recursos fundamentales

| Tipo              | Descripción rápida                                                                   |
| ----------------- | ------------------------------------------------------------------------------------ |
| **Pod**           | Unidad mínima ejecutable: uno o más contenedores que comparten red y almacenamiento. |
| **ReplicaSet**    | Asegura que haya N réplicas de un Pod. Suele gestionarse a través de un Deployment.  |
| **Deployment**    | Controla la creación y actualización de Pods. Ideal para aplicaciones sin estado.    |
| **StatefulSet**   | Igual que Deployment, pero mantiene identidad y almacenamiento por Pod.              |
| **DaemonSet**     | Asegura que haya un Pod corriendo en cada nodo (útil para logs, monitorización).     |
| **Job / CronJob** | Ejecutan tareas puntuales o programadas.                                             |

---

### Almacenamiento

| Recurso                         | Función                                                                       |
| ------------------------------- | ----------------------------------------------------------------------------- |
| **Volume**                      | Espacio de almacenamiento montado en un Pod. Puede ser efímero o persistente. |
| **PersistentVolume (PV)**       | Recurso del clúster que representa almacenamiento físico o lógico disponible. |
| **PersistentVolumeClaim (PVC)** | Petición de almacenamiento por parte de un usuario. Se vincula con un PV.     |
| **StorageClass**                | Define políticas de aprovisionamiento dinámico (por tipo, rendimiento, etc.). |

---

### Red y exposición de servicios

| Recurso                | Función                                                        |
| ---------------------- | -------------------------------------------------------------- |
| **Service**            | IP estable y punto de acceso para un conjunto de Pods.         |
| **ClusterIP**          | Servicio interno (por defecto).                                |
| **NodePort**           | Expone el servicio en un puerto del nodo.                      |
| **LoadBalancer**       | Usa un balanceador externo (en nubes o setups con MetalLB).    |
| **Ingress**            | Reglas HTTP(S) que enrutan tráfico externo hacia los Services. |
| **Ingress Controller** | Implementa las reglas de Ingress (NGINX, Traefik, etc.).       |
| **NetworkPolicy**      | Controla el tráfico permitido entre Pods o namespaces.         |

---

### Configuración y seguridad

| Recurso                              | Función                                                          |
| ------------------------------------ | ---------------------------------------------------------------- |
| **ConfigMap**                        | Almacena configuración no sensible.                              |
| **Secret**                           | Datos sensibles (contraseñas, tokens).                           |
| **ServiceAccount**                   | Identidad usada por procesos dentro del clúster.                 |
| **Role / ClusterRole**               | Define permisos.                                                 |
| **RoleBinding / ClusterRoleBinding** | Asigna permisos a usuarios o cuentas de servicio.                |
| **SecurityContext**                  | Define restricciones de privilegios a nivel de Pod o contenedor. |
| **PodSecurity (PSA/PSS)**            | Políticas globales de seguridad de Pods.                         |

---

### Observabilidad y control

| Recurso / componente                    | Función                                                             |
| --------------------------------------- | ------------------------------------------------------------------- |
| **Events**                              | Registro de sucesos del clúster.                                    |
| **Metrics Server**                      | Proporciona métricas de CPU/RAM (para `kubectl top`).               |
| **Logs**                                | Salida de contenedores y del sistema.                               |
| **Probes (liveness/readiness/startup)** | Verifican salud y disponibilidad de los Pods.                       |
| **PodDisruptionBudget (PDB)**           | Define cuántos Pods pueden estar fuera de servicio simultáneamente. |

---

> 📘 Referencias: [Kubernetes Concepts (docs oficiales)](https://kubernetes.io/docs/concepts/) · [DevOpsCube - Kubernetes Architecture](https://devopscube.com/kubernetes-architecture-explained/)

---

### Analogía para no romperse la cabeza

**Control Plane** → el **jefe de la obra**: da órdenes, no toca nada.
**API Server** → el **secretario**: recibe tus órdenes y las reparte.
**etcd** → el **cuaderno** donde se apunta todo.
**Scheduler** → el **encargado** que reparte tareas entre los obreros.
**Controller Manager** → el **pesado** que revisa que todo siga como estaba planeado.

**Nodos de trabajo** → los **obreros**.

* **kubelet** → el **capataz** del nodo.
* **kube-proxy** → el **tío del tráfico** que pone conos en la red.
* **Container Runtime** → la **máquina** que realmente enciende las cosas.

**Pod** → una **caja de herramientas**.
**ReplicaSet** → el **contador** de cajas.
**Deployment** → el **planificador** de cuándo y cómo se cambian.
**StatefulSet** → el que lleva etiquetas con nombres.
**DaemonSet** → el **repartidor** que deja una caja en cada nodo.
**Job / CronJob** → el que hace algo una vez o a horas fijas.

**PV / PVC / StorageClass** → el **almacén**, el **ticket de pedido** y el **tipo de almacén**.
PV = almacén físico.
PVC = papelito que dice “quiero un trozo de almacén”.
StorageClass = tipo de almacén (rápido, barato, lento…).

**Service** → el **interfono** para hablar con Pods.
**ClusterIP** → solo dentro del edificio.
**NodePort** → el portero abre una puerta concreta.
**LoadBalancer** → el **recepcionista elegante**.
**Ingress** → el **telefonista** que enruta llamadas desde fuera.
**Ingress Controller** → quien ejecuta las reglas del telefonista.

**ConfigMap** → el **post-it** con configuraciones.
**Secret** → el **post-it en una caja fuerte**.
**RBAC / Roles** → el **carné de acceso**.
**SecurityContext** → el **contrato** de cada trabajador.

**Probes** → los **médicos** que revisan si los Pods respiran.
**PDB** → el **seguro** que impide despedir a todos a la vez.
**Events / Logs / Metrics** → los **chismes del grupo de WhatsApp** donde se entera todo el mundo.