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.