Saltar a contenido

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.