Storage¶
Parte de la guía de implementación
Desplegado en Fase 4 — GitOps (waves 0–1). Etiquetas Longhorn: Fase 3 — K3s.
Híbrido x86_64 + ARM64 (arquitectura ARM de 64 bits) — manifiestos GitOps en gitops/storage/.
Diagrama — tiers de storage¶
flowchart TB
PVC["PVC workload"]
subgraph tier_local ["Default (3 nodos)"]
OB["OpenEBS LocalPV"]
INV["invincible"]
NOL["oliver"]
DEB["deborah"]
OB --> INV
OB --> NOL
OB --> DEB
end
subgraph tier_ha ["HA cross-arch"]
LH["Longhorn v1"]
INV2["invincible (labeled)"]
DEB2["deborah (labeled)"]
LH --> INV2
LH --> DEB2
end
PVC --> OB
PVC --> LH
- OpenEBS — LocalPV default; 3 nodos; sin replicación.
- Longhorn — Replicado x86↔arm64; solo invincible + deborah.
OpenEBS LocalPV (default)¶
DaemonSet en los 3 nodos. StorageClass por defecto para casi todo.
Desplegado vía Argo CD Application openebs (Helm).
Longhorn v1 (HA selectiva, cross-arch)¶
Usar siempre el motor v1 (default), nunca v2/SPDK: v2 tiene un bug documentado de I/O bloqueado en ARM64 con NVMe (disco SSD por PCIe) + 2 núcleos.
kubectl label node invincible node.longhorn.io/create-default-disk=true
kubectl label node deborah node.longhorn.io/create-default-disk=true
kubectl label node oliver node.longhorn.io/create-default-disk=false
Con numberOfReplicas: "2" y 2 nodos elegibles (x86 + arm64), cada volumen
queda replicado entre arquitecturas.
Análisis de trade-offs
OpenEBS LocalPV elegida
Simple en 3 nodos; default para casi todo
Sin HA si cae el nodo del pod
Longhorn v1
Réplica x86↔arm64; UI de volúmenes
Solo 2 nodos elegibles; más RAM/pods
Solo OpenEBS
Menor superficie operativa
PVC críticos sin réplica cross-node
Mayastor descartado
Alto rendimiento NVMe
≥2 GiB hugepages — inviable en M700
Por qué no Mayastor¶
Mayastor exige ≥2 GiB de hugepages fijos — descartado para el M700.
Guía ejecutable: Fase 4 — GitOps.