# Kubernetes

## Para qué sirve

La pantalla **Kubernetes** (menú **Observar › Kubernetes**) muestra tus clusters de Kubernetes y todo lo que corre adentro, yendo de lo general a lo particular:

1. **Clusters**: una tarjeta por cluster.
2. **Namespaces** de un cluster.
3. **Workloads**: Deployments, StatefulSets, DaemonSets, Jobs y CronJobs.
4. **Pods** y sus contenedores.
5. **Nodos**.
6. **Eventos** de Kubernetes.

Con eso podés responder preguntas como "¿por qué está lento el servicio `pagos`?": su pod se está reiniciando, su contenedor terminó por falta de memoria (OOMKilled) o su nodo tiene presión de memoria.

Esta guía cubre la consulta. Para conectar un cluster, mirá [Kubernetes en Instalación](https://lymen.app/docs/instalacion/kubernetes/).

## Quién la ve

- Aparece en el menú (grupo **Observar**) para **Administración** y **Sistemas**. Los dos ven todo lo de esta pantalla.
- Conectar un cluster, cambiar qué se monitorea o rotar su credencial se hace en **Agregar datos › Kubernetes**, que es solo de Administración.

## Cuándo usarla

- Para saber de un vistazo si tus clusters están sanos y conectados.
- Cuando un servicio anda mal y sospechás de Kubernetes: reinicios, falta de memoria, réplicas que no arrancan, un despliegue trabado.
- Para ver qué tan cerca están tus pods de sus límites de CPU y memoria.
- Para seguir los eventos de Kubernetes (avisos como `BackOff`, `FailedScheduling` u `OOMKilling`) sin entrar al cluster.

## Salud

Como en el resto del portal, cada cluster, namespace, workload, pod y nodo tiene un semáforo:

| Estado | Qué significa |
|---|---|
| Normal (sano) | Todo funciona como se espera. |
| Atención (con avisos) | Hay algo para mirar: un pod pendiente, reinicios en el período, réplicas que todavía no están disponibles, CPU al límite, un nodo con presión de memoria, disco o procesos. |
| Crítico | Algo está roto: un pod en `CrashLoopBackOff` o que no puede bajar su imagen, un contenedor terminado por `OOMKilled`, un workload sin ninguna réplica disponible, un despliegue trabado, un Job fallido, un nodo `NotReady` o un incidente abierto que lo afecta. |
| Sin datos | No llegaron datos en el período elegido. |

Al lado del semáforo ves el **motivo** principal ("2 de 3 réplicas no disponibles", "OOMKilled", "Despliegue trabado"…). La salud de un namespace y la de un cluster son la peor de lo que tienen adentro.

## Clusters

Cada tarjeta muestra:

| Dato | Qué significa |
|---|---|
| Nombre | El nombre que elegiste al conectar el cluster. Tocalo para entrar al cluster. |
| Conexión | **Conectado** (llegan datos), **Desconectado** (llegaron antes, ahora no), **Esperando el primer contacto** (generaste la credencial pero todavía no llegó nada) o **Sin credencial en el portal** (llegan datos con un nombre que no figura en Agregar datos). |
| Versiones | Versión de Kubernetes y del agente de Lymen, si se conocen. |
| Nodos listos / Pods listos | Cuántos están listos sobre el total. Un pod está listo si está en marcha y todos sus contenedores están listos. |
| Namespaces | Cuántos namespaces monitoreados tienen pods. |
| CPU y Memoria | Lo usado contra lo disponible en los nodos, con lo pedido (requests) por los pods. La barra cambia de color al pasar el 75 % y el 90 %. |
| Incidentes abiertos | Incidentes que afectan a algo del cluster. |

## Dentro de un cluster

Arriba hay pestañas con los niveles. En las tablas podés **buscar** por nombre o namespace.

### Namespaces

Salud, cantidad de workloads, pods listos sobre el total, reinicios en el período, CPU y memoria usadas contra los límites, cantidad de **avisos** (eventos `Warning`) en el período e incidentes abiertos.

### Workloads

Podés filtrar por tipo (Deployments, StatefulSets, DaemonSets, Jobs, CronJobs).

| Columna | Qué significa |
|---|---|
| Réplicas listas | Disponibles sobre deseadas. En Jobs y CronJobs, cuántos están activos y cuántos fallaron. |
| Despliegue | **Estable**, **En curso** (faltan réplicas ahora) o **Trabado** (faltan réplicas hace más de 10 minutos). |
| Reinicios | Reinicios de sus contenedores en el período. |
| OOMKilled | Contenedores cuya última terminación fue por falta de memoria. |
| CPU vs. límite | Uso de CPU del contenedor más exigido contra su límite. Desde el 90 % se marca como **CPU limitada**: Kubernetes le frena la CPU y la aplicación se pone lenta. La alerta recomendada **CPU limitada sostenida** mira el frenado real que informa cada nodo (qué parte del tiempo Kubernetes frenó al contenedor por su límite; por defecto, 25 % durante 15 minutos). |
| Servicios | Los servicios de aplicación que corren en sus pods (si tienen el monitoreo en detalle). Tocá uno para ir a [Servicios](https://lymen.app/docs/datos/servicios/). |

### Pods

Fase (`Pending`, `Running`, `Succeeded`, `Failed`), nodo donde corre, cada contenedor con su estado (listo o no, motivo como `CrashLoopBackOff` y por qué terminó la última vez), reinicios y CPU y memoria contra sus límites.

### Nodos

Condiciones (`Ready`, `MemoryPressure`, `DiskPressure`, `PIDPressure`), CPU y memoria usadas contra la capacidad, lo asignado por los pods, cantidad de pods y versión del kubelet.

### Eventos

Línea de tiempo de los eventos de Kubernetes, del más nuevo al más viejo. Por defecto ves los **avisos** (`Warning`); podés pasar a **Normales** o **Todos**. Cada evento muestra el motivo, el objeto (con enlace si es un pod, un workload o un nodo), el namespace, cuántas veces se repitió y el mensaje. Qué tipos de eventos llegan se elige al conectar el cluster.

Debajo de las pestañas está el **detalle del cluster**, con las mismas secciones que el de cualquier objeto.

## Detalle de un objeto

Tocá el nombre de un namespace, workload, pod o nodo para ver su detalle. Las migas de arriba (Kubernetes / cluster / namespace / …) te llevan de vuelta a cualquier nivel.

| Pestaña | Qué muestra |
|---|---|
| Resumen | Los datos principales, los servicios de aplicación con su salud y lo que tiene adentro (los workloads de un namespace, los pods de un workload o de un nodo, los contenedores de un pod). |
| Métricas | CPU y memoria usadas y reinicios a lo largo del período, con lo pedido y el límite. |
| Eventos | Los eventos de Kubernetes de ese objeto (un workload incluye los de sus pods). |
| Logs | Los logs de sus contenedores que se reciben, según el nivel elegido para el cluster (por defecto, solo errores). |
| Trazas | Pedidos a las aplicaciones de ese objeto, si tienen el monitoreo en detalle. Tocá una para ver el recorrido. |
| Incidentes | Incidentes abiertos que lo afectan, con enlace a cada uno. |
| Definición | La definición de solo lectura del objeto (sin Secrets). **Todavía no disponible**: se va a completar cuando el gateway del cluster la informe. |

## Topología

Los clusters también aparecen en [Topología](https://lymen.app/docs/datos/topologia/): cluster → namespace → workload → pod, y cada servicio de aplicación unido al pod donde corre. Para no llenar el mapa, de cada cluster entran hasta 150 pods (los de peor salud primero).

## Estados vacíos

- **Todavía no conectaste un cluster**: no hay ningún cluster con credencial ni con datos. Con rol Administración aparece el botón **Ir a Agregar datos**; con Sistemas, el aviso de pedírselo a Administración.
- **Este cluster todavía no mandó datos**: generaste la credencial, pero en el período elegido no llegó nada. Si lo acabás de instalar, esperá un par de minutos.
- **No hay datos de este objeto en el período**: el pod o el workload puede haber dejado de existir. Probá con un período más amplio.

## Problemas comunes

| Qué ves | Qué hacer |
|---|---|
| El cluster figura **Esperando el primer contacto** | Revisá que el operador de Lymen esté corriendo en el namespace `lymen` y que el Secret tenga la credencial correcta (ver [Kubernetes en Instalación](https://lymen.app/docs/instalacion/kubernetes/)). |
| El cluster figura **Sin credencial en el portal** | Llegan datos con un nombre de cluster que no está en Agregar datos. Revisá el nombre del cluster en su configuración. |
| Un namespace no aparece | Puede estar excluido de lo que se monitorea. Revisalo en Agregar datos › Kubernetes. |
| No hay logs en un pod | Solo llegan los del nivel elegido para el cluster (por defecto, errores) y de los namespaces monitoreados. |
| No hay trazas | Las aplicaciones necesitan el monitoreo en detalle activo. |
| CPU y memoria muestran "—" en un pod | El contenedor no tiene pedidos ni límites definidos, o todavía no llegó el uso del nodo. |
