Almacenamiento
StorageClasses
| StorageClass | Provisioner | Qué es | Sobrevive a la caída del nodo |
|---|---|---|---|
longhorn |
driver.longhorn.io | Bloque replicado entre nodos (/var/lib/longhorn/) |
✅ sí, si hay réplicas sanas en otros nodos |
longhorn-static |
driver.longhorn.io | Igual, para volúmenes creados a mano | ✅ |
local-path |
rancher.io/local-path | Directorio del nodo (/var/lib/rancher/k3s/storage/) |
❌ no: el pod queda atado a ese nodo |
⚠️ Hay dos StorageClasses marcadas como default (local-path y longhorn). Un PVC sin storageClassName cae en cualquiera de las dos. Hay que quitar la marca de local-path:
kubectl patch sc local-path -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
k3s vuelve a poner esa anotación al reiniciar si no se arranca con
--default-local-storage-patho con el addon desactivado. Comprobar después de reiniciar un master.
Longhorn
- Versión 1.11.1 (Helm). Values: cluster/helm/longhorn-system/longhorn.yaml.
defaultReplicaCount: 2en los values, pero los volúmenes tienen 3 réplicas: los PVCs usan la StorageClass, que es la que manda. Excepción:prometheus-grafana, con 2 ydataLocality: best-effortdesdegrafana_local.sh(cambio en el volumen: si se recrea el PVC, vuelve a 3).- Discos en
/var/lib/longhorn/en los 5 nodos amd64. worker-3 no participa. - El worker-1 tiene un HDD mecánico: las reconstrucciones de réplicas ahí son lentas y generan mucha presión de I/O.
Volúmenes
| PVC | Namespace | Tamaño | Estado | Nodo de uso |
|---|---|---|---|---|
elasticsearch-data-elasticsearch-es-default-0 |
logging | 20 Gi | attached | master-3 |
es-snapshots |
logging | 50 Gi | attached | master-3 |
minio |
minio | 20 Gi | attached | worker-2 |
local-home-confluence-0 |
confluence | 1 Gi | attached | worker-2 |
n8n-data-longhorn |
n8n | 5 Gi | attached | master-1 |
portainer-longhorn |
portainer | 10 Gi | attached | worker-1 |
homelable-data |
homelable | 1 Gi | attached | master-3 |
prometheus-grafana |
monitoring | 2 Gi | attached | worker-2 (Grafana fijado ahí, cableado): 2 réplicas con dataLocality: best-effort (grafana_local.sh) |
pihole-config-longhorn |
pihole | 1 Gi | detached (sin uso) | — |
dnsmasq-config-longhorn |
pihole | 1 Gi | detached (sin uso) | — |
local-home-confluence-temp |
confluence | 1 Gi | detached (sin uso) | — |
Los tres volúmenes detached son restos de migraciones a medias. Se pueden borrar cuando se confirme que no hacen falta.
Aplicaciones sin almacenamiento persistente
| Aplicación | Volumen | Qué se pierde al reiniciar |
|---|---|---|
| Jira | local-home y shared-home como emptyDir |
Adjuntos, índices y configuración local. Las incidencias están a salvo en Postgres. |
| Prometheus | sin volumeClaimTemplates |
Todo el histórico de métricas |
Antes de mover o reiniciar algo con datos
Reglas aprendidas a base de incidentes (ver incidentes.md):
- Nunca ejecutar
k3s-agent-uninstall.shnik3s-uninstall.shen un nodo con PVCslocal-pathsin copiar antes/var/lib/rancher/k3s/storage/. El script lo borra sin avisar. - Antes de quitar un
nodeSelectoro forzar el primer reinicio de un pod que lleva mucho tiempo arrancado, revisa susinitContainerspor si tienen comandos destructivos sobre el mismo PVC:kubectl -n <ns> get deploy/<name> -o jsonpath='{.spec.template.spec.initContainers}' - Haz un snapshot de Longhorn del volumen justo antes de tocarlo.