Configuration de NFS avec Ceph via NFS-Ganesha

Présentation de la solution NFS pour Ceph

Ceph propose une couche d'abstraction NFS permettant d'exposer son système de fichiers distribué (CephFS) via le protocole NFS standard. Cette approche simplifie considérablement l'accès client, car elle élimine le besoin d'installer et de configurer les outils Ceph sur chaque machine consommatrice.

Composants clés de l'architecture

  • nfs-ganesha : serveur NFS en espace utilisateur jouant le rôle de passerelle de conversion de protocole entre les clients NFS et CephFS
  • FSAL_Ceph : plugin d'abstraction de système de fichiers s'appuyant sur libcephfs pour communiquer avec CephFS
  • CephFS : système de fichiers distribué reposant sur les MDS (Metadata Servers) et OSD (Object Storage Daemons)
  • Client NFS : consommateur standard utilisant un montage NFS classique sans dépendance Ceph

Le flux de traitement des requêtes suit le schéma suivant : requête client → nfs-ganesha → MDS. Bien que le backend RGW soit également supporté, sa maturité fonctionnelle reste limitée comparée à CephFS.

Vérifications préalables

Contrôle du module NFS

Vérifier que le module manager NFS est bien présent :

[root@storage-node-01 ~]# ceph mgr module ls | grep nfs
        "nfs",

Si le module n'apparaît pas, l'activer explicitement :

[root@storage-node-01 ~]# ceph mgr module enable nfs

Vérification des clusters NFS existants

[root@storage-node-01 ~]# ceph nfs cluster ls

Déploiement du service NFS

Création d'un cluster NFS identifié par l'identifiant nfs-cluster-prod sur le nœud storage-node-01 :

[root@storage-node-01 ~]# ceph nfs cluster create nfs-cluster-prod "storage-node-01"
NFS Cluster Created Successfully

[root@storage-node-01 ~]# ceph nfs cluster ls
nfs-cluster-prod

[root@storage-node-01 ~]# ceph orch ps | grep nfs
nfs.nfs-cluster-prod.0.storage-node-01.keloru  storage-node-01  *:2049  running (45s)  30s ago  45s  18.2M  -  3.5  e08a45948779  2a68e0ac6fa3

Le service est désormais actif mais aucune exportation n'est encore configurée.

Configuration des exports NFS

Création du système de fichiers CephFS

[root@storage-node-01 ~]# ceph fs volume create shared-fs

Cette commande provisionne automatiquement les pools de stockage, démarre les processus MDS et crée les identifiants nécessaires au fonctionnement de CephFS.

Exportation via NFS

[root@storage-node-01 ~]# ceph nfs export create cephfs \
  --cluster-id nfs-cluster-prod \
  --pseudo-path /shared-export \
  --fsname shared-fs \
  --path=/
{
    "bind": "/shared-export",
    "fs": "shared-fs",
    "path": "/",
    "cluster": "nfs-cluster-prod",
    "mode": "RW"
}

Paramètres utilisés :

  • --cluster-id : idantifiant du cluster NFS précédemment créé
  • --pseudo-path : chemin perçu par le client NFS lors du montage
  • --path : répertoire source dans CephFS (la racine ici, mais un sous-répertoire est possible)
  • --fsname : nom du système de fichiers CephFS cible

Montage côté client

[root@client-node ~]# mount -t nfs 192.168.50.30:/shared-export /mnt

[root@client-node ~]# df -hT /mnt
Filesystem                    Type  Size  Used Avail Use% Mounted on
192.168.50.30:/shared-export  nfs4   29G  0    29G   0%  /mnt

Cette méthode évite la création manuelle d'utilisateurs CephFS et la gestion des keyrings côté client.

Vérification de l'utilisation de CephFS comme backend

Pour confirmer que les données transitent bien par CephFS, un montage direct via le client Ceph natif permet de comparer le contenu.

Récupération des identifiants du client auto-créé :

[root@storage-node-01 ~]# ceph auth get client.shared-fs
[client.shared-fs]
    key = AQASDslpXHpvMxAAcJt9drXBYidXeFWIabO84w==
    caps mds = "allow *"
    caps mon = "allow r"
    caps osd = "allow rw pool=shared-fs_metadata,allow rw pool=shared-fs_data"

Stockage de la clé dans un fichier :

[root@storage-node-01 ~]# echo "AQASDslpXHpvMxAAcJt9drXBYidXeFWIabO84w==" > ceph-shared-fs.secret

Montage direct CephFS pour comparaison :

[root@storage-node-01 ~]# mount -t ceph 192.168.50.30:6789:/ /opt \
  -o name=shared-fs,secretfile=./ceph-shared-fs.secret

[root@storage-node-01 ~]# df -hT /opt
Filesystem             Type   Size  Used Avail Use% Mounted on
192.168.50.30:6789:/   ceph   29G  0    29G   0%  /opt

Vérification de la cohérence des données entre les deux points de montage :

[root@storage-node-01 ~]# ls /opt/
nfs.txt

Le fichier nfs.txt précédemment écrit via le montage NFS est visible à travers le montage CephFS direct, confirmant que le backend de stockage utilisé par nfs-ganesha est bien CephFS.

Étiquettes: ceph cephfs nfs-ganesha nfs distributed-storage

Publié le 6 juillet à 22h43