Objectiu 🚀

Quan tens dades en un pool ZFS dins d’un node Proxmox, és normal voler reutilitzar-les des d’altres nodes del clúster o exposar-les a containers.

El problema és que aquí hi ha una regla important:

ZFS no és un filesystem clusteritzat. Un pool ZFS només pot estar muntat en un únic node alhora.

Per això, si vols compartir datasets entre nodes, el camí més net acostuma a ser fer-ho per xarxa, i una de les opcions més directes és NFS.

El model mental correcte đź§ 

La idea no és “muntar el mateix pool ZFS a tot arreu”, sinó aquesta:

  1. Un node és el propietari del pool ZFS.
  2. Aquest node exporta un o més datasets via NFS.
  3. La resta de nodes del clĂşster consumeixen aquests exports com a storage remot.
  4. Si cal, aquests paths ja muntats es passen després a un CT mitjançant mpX.

Quan ho veus així, tot queda bastant més simple.

Instal·lar el servidor NFS

Al node que conté el pool ZFS:

apt update
apt install nfs-kernel-server
systemctl enable --now nfs-server

I comprova que el servei estĂ  realment actiu:

systemctl status nfs-server

Exportar el dataset directament des de ZFS

Una part molt còmoda és que ZFS pot gestionar els exports NFS amb la propietat sharenfs.

Això evita haver de mantenir manualment /etc/exports per aquests datasets i, en general, és la manera més neta de fer-ho si ja treballes amb ZFS.

Exemple:

zfs set sharenfs="rw=@<SUBXARXA_DEL_CLUSTER>,no_root_squash,sync,no_subtree_check" <POOL>/apps
zfs set sharenfs="rw=@<SUBXARXA_DEL_CLUSTER>,no_root_squash,sync,no_subtree_check" <POOL>/media_root
zfs set sharenfs="rw=@<SUBXARXA_DEL_CLUSTER>,no_root_squash,sync,no_subtree_check" <POOL>/timemachine

Les opcions més útils aquí són:

  • rw: permet escriptura als nodes autoritzats
  • no_root_squash: Ăştil si Proxmox o els CTs han de crear fitxers com a root
  • sync: mĂ©s segur per coherència
  • no_subtree_check: evita problemes tĂ­pics amb exports sobre datasets

Si el teu clúster està en una xarxa concreta, pots restringir l’accés a aquella subxarxa o als nodes que t’interessin.

Comprovar que l’export és actiu

Primer des del costat de ZFS:

zfs get sharenfs

I després des del costat del servei NFS:

exportfs -v

Hauries de veure el path exportat amb les opcions corresponents.

La recomanació important aquí és aquesta: si uses sharenfs, no repliquis el mateix export a /etc/exports.

Afegir l’export NFS a Proxmox

Des de la interfĂ­cie de Proxmox:

  1. Datacenter -> Storage -> Add -> NFS
  2. Omple els camps principals:
    • Server: IP o hostname del node propietari
    • Export: path exportat
    • Content: segons l’ús que hi vulguis donar
    • Nodes: quins nodes del clĂşster el poden fer servir
  3. Desa la configuraciĂł

Un cop fet això, Proxmox el muntarà automàticament sota:

/mnt/pve/<storage_id>

Exposar aquestes dades a un container

AquĂ­ hi ha un detall important: el CT no ha de muntar NFS pel seu compte si ja ho estĂ  fent el node Proxmox.

El més net és:

  1. Proxmox munta l’NFS
  2. El CT rep aquest path com a bind mount

Per exemple, editant la configuraciĂł del CT:

nano /etc/pve/lxc/104.conf

I afegint:

mp0: /mnt/pve/zfs_apps,mp=/srv/apps
mp1: /mnt/pve/zfs_media,mp=/srv/media
mp2: /mnt/pve/zfs_timemachine,mp=/srv/timemachine

Després reinicies el container:

pct stop 104
pct start 104

I el CT ja veu les dades compartides com si fossin locals al path que li has assignat.

Permisos si el CT és unprivileged

Si el container és:

unprivileged: 1

llavors és bastant probable que hagis d’ajustar UID i GID.

Per exemple:

chown -R 100000:100000 /srv/zfs/apps

El valor concret dependrà del mapping del teu CT i del servei que estigui accedint a les dades, però la idea és sempre la mateixa: fer quadrar els permisos entre host, export i container.

Desactivar un export

Si en algun moment ja no vols publicar un dataset via NFS:

zfs set sharenfs=off <POOL>/media_root

L’export desapareix immediatament.

Tancant 🪂

Aquest enfocament m’agrada perquè respecta la naturalesa de ZFS i evita fer invents estranys dins d’un clúster Proxmox.

La idea clau és senzilla:

  • ZFS viu en un node propietari
  • NFS distribueix l’accĂ©s
  • Proxmox munta l’export
  • els CTs reben el path ja resolt

No és una solució “màgica”, però sí una solució bastant neta, comprensible i fàcil de mantenir. 🤗