Errores de I/O de Longhorn en kyrie — 2026-09-24¶
Reinicios masivos de pods concentrados en el nodo
kyrie, con origen en errores de I/O de los volúmenes iSCSI de Longhorn montados en ese nodo.
Estado¶
| Campo | Valor |
|---|---|
| Primera aparición | 2026-09-13 (540 errores de I/O) |
| Estado | Resuelto (remediación en PR fix/longhorn-kyrie-io) |
| Resuelto | 2026-09-24 |
| Severidad | Alta |
| Servicios afectados | Longhorn, Loki, Prometheus (+ daemonsets de kyrie) |
Síntomas¶
- Reinicios masivos de pods en muchos namespaces, concentrados en el nodo
kyrie. - Errores de disco en
dmesgdekyriesobre los dispositivossdb..sde. - Daemonsets de
kyriecon reinicios crónicos (vs 1–2 enkobe/kawhi):speaker915,engine-image893,longhorn-csi-plugin657,node-exporter660,kured90.
Cronología (2026-09-24, hora local CEST)¶
| Hora | Evento | Evidencia |
|---|---|---|
| 14:19:20 | Condiciones de kyrie transicionan (Memory/Disk/PID pressure → Ready 14:19:57). |
kubectl describe node kyrie |
| 14:21–14:23 | Errores de I/O en sdb/sdc/sdd/sde (volúmenes iSCSI Longhorn), errores de journal EXT4, umounts forzados. |
dmesg -T en kyrie |
| 14:22:17 | Disco Longhorn de kyrie vuelve a Ready. |
kubectl get nodes.longhorn.io kyrie |
| 14:27–14:29 | CrashLoopBackOff masivo en kyrie (todos los namespaces). |
journalctl -u k3s-agent |
Causa raíz¶
Errores de I/O en la ruta de datos iSCSI de Longhorn en kyrie:
pod (Loki/Prometheus, kyrie)
└─▶ initiator iSCSI (kyrie)
└─▶ target iSCSI 10.42.2.246:3260 (engine/instance-manager local en kyrie)
└─▶ réplicas: kyrie (local) + kawhi/kobe (remoto, vía flannel)
Los dispositivos sdb..sde son los volúmenes iSCSI montados por CSI (lsblk
con TRAN=iscsi). Cuando cae el target iSCSI (engine/instance-manager) o la
sesión, el filesystem montado recibe errores de I/O, se fuerza el umount y los
pods que usan esos volúmenes caen en cascada.
Evidencia:
[Thu Sep 24 14:21:31] Buffer I/O error on dev sdb ... lost sync page write
[Thu Sep 24 14:22:00] I/O error, dev sdc, sector ... op 0x0:(READ)
[Thu Sep 24 14:23:31] I/O error, dev sde/sdd ... EXT4-fs error: ext4_put_super
engine-image en kyrie: 893 reinicios, en ráfagas (772 el 21-sep, estable 3
días, +110 el 24-sep).
- Volúmenes afectados (ambos en kyrie): storage-loki-0 (Loki, 10G) y la DB
de Prometheus (20G).
Causa raíz confirmada (2026-09-24): kyrie (y kawhi) están
subdimensionados (2 vCPU / 4 GB) para la carga de I/O que alojan. kyrie
concentra los volúmenes pesados (Prometheus 20 GB + Loki 10 GB), mientras
kobe (4 vCPU / 10 GB) y kawhi solo llevan volúmenes pequeños.
- El pod
engine-image-ei-*dekyrieacumula 893 reinicios con exit code 137 (SIGKILL): su liveness probe es/data/longhorn version --client-onlycon timeout 4s / period 5s (setting Longhornengine-image-pod-liveness-probe-timeout). Bajo contención de I/O el comando excede los 4s → 3 fallos → SIGKILL. - El target iSCSI (engine en el
instance-manager) cae con la misma contención de recursos, provocando los errores de I/O en los volúmenes montados y la cascada de reinicios. - La hipótesis de red flannel queda descartada: los reinicios son SIGKILL (proceso matado por liveness), no pérdida de red.
Lo que se descartó¶
| Hipótesis | Resultado |
|---|---|
| Reinicio de nodo | No: kyrie up 13 días (boot 11-sep 06:13) |
| Reinicio de kubelet/k3s/containerd | No: NRestarts=0, process_start_time_seconds desde el 11-sep |
| OOM | No: 0 kills, ~2 GB libres, load 0.74 (2 vCPU) |
| kured a las 14:19 | No: ventana de kured es 06:00–08:00 |
Resolución / Plan de acción¶
- [x] Revisar
kyrietras el incidente: réplicas Longhorn (running, RW), volúmeneshealthy, Loki-0 y Prometheus-0 recuperados (0 reinicios), sin reinicios en la última hora (verificado 2026-09-24 19:00 CEST). - [x] Redimensionar workers:
kyrieykawhide 2 vCPU / 4 GB → 4 vCPU / 6 GB (terraform/variables.tf).lebronbajado de 12 → 10 GB para encajar en los 32 GB del host (lebron 10 + kobe 10 + kyrie 6 + kawhi 6 = 32 GB). - [x] Subir el timeout del liveness del
engine-imagede Longhorn: settingengine-image-pod-liveness-probe-timeout4s → 10s (y period 5s → 10s), víadefaultSettingsenclusters/luka/apps/longhorn/application.yaml. - [x] Instrumentar alertas (Grafana Alerting,
GrafanaAlertRuleGrouplonghorn-io): filesystem read-only (node_filesystem_readonly) y reinicios de pods por nodo (kube_pod_container_status_restarts_total).
Hipótesis (resueltas)¶
- Red flannel inestable en
kyrie— descartada: los reinicios son SIGKILL (exit 137, liveness probe), no pérdida de red. kyriesubdimensionado — confirmada: 2 vCPU insuficientes para la carga de I/O; el liveness del engine-image (4s) excedía el timeout y mataba el pod en cascada.
Referencias¶
Lecciones aprendidas¶
- El monitoring es víctima del incidente: Prometheus corre en
kyriesobre un volumen Longhorn, así que durante la cascada de I/O estuvo caído y no pudo registrar datos ni disparar alertas en tiempo real. Las alertas de reinicios disparan tras la recuperación (el contador salta yincreaselo detecta). - Señal de I/O limitada: node-exporter no expone contadores de errores de
disco (
node_disk_*_errors_total) y no ve los filesystems de los volúmenes Longhorn (namespaces de pod). La caída de un volumen se detecta por la cascada de reinicios, no por el read-only del host.