Premiers pas avec NFS Subdir External Provisioner et OVHcloud File Storage Service
Découvrez comment utiliser le NFS Subdir External Provisioner pour provisionner des volumes persistants Kubernetes depuis un partage NFS OVHcloud File Storage Service.
Objectif
Ce guide explique comment déployer le NFS Subdir External Provisioner sur un cluster Kubernetes pour provisionner dynamiquement des volumes persistants depuis un partage NFS OVHcloud File Storage Service.
Cette approche est compatible avec OVHcloud Managed Kubernetes Service (MKS) et les environnements Kubernetes auto-gérés fonctionnant sur des instances OVHcloud Public Cloud.
Le NFS Subdir External Provisioner ne gère pas le cycle de vie du partage NFS sous-jacent. Il crée automatiquement un sous-répertoire dédié dans un partage existant pour chaque PersistentVolumeClaim (PVC), rendant le stockage disponible pour les pods avec un accès ReadWriteMany (RWX). Cette approche est plus simple à exploiter que Manila CSI, mais ne prend pas en charge certaines fonctionnalités comme les snapshots et l'application de quotas par PVC.
Architecture
Lorsqu'un PVC est créé avec la StorageClass du provisioner, le pod provisioner monte la racine du partage NFS, crée un sous-répertoire portant le nom du PVC et lie un PersistentVolume (PV) à ce sous-répertoire. Les pods montent uniquement leur sous-répertoire, et non le partage entier.
Prérequis
- Disposer d'un cluster Kubernetes dont les nœuds sont déployés sur un réseau privé ayant accès au partage File Storage Service — compatible avec OVHcloud Managed Kubernetes Service (MKS) et les clusters Kubernetes auto-gérés fonctionnant sur des instances OVHcloud Public Cloud
- Disposer d'un partage NFS OVHcloud File Storage Service dans la même région et sur le même réseau privé que votre cluster
- Avoir installé Helm sur votre poste — consultez le guide « Installer Helm sur OVHcloud Managed Kubernetes Service »
- Posséder des connaissances de base sur l'utilisation d'un cluster Kubernetes — consultez le guide « Déployer une application Hello World »
- Optionnel — disposer de l'OVHcloud CLI pour la gestion en ligne de commande du partage et de l'ACL
En pratique
Étape 1 - Récupérer le chemin d'export du partage File Storage Service
Si vous n'avez pas encore créé de partage, suivez le guide de démarrage du File Storage Service pour créer un partage NFS sur votre réseau privé.
Une fois le partage au statut available, récupérez son chemin d'export NFS. Le chemin suit ce format :
Par exemple : 10.1.0.12:/shares/share-abc12345-def6-4abc-8def-123456abcdef
Divisez-le en 2 composantes et notez-les pour les étapes suivantes :
NFS_SERVER— la partie adresse IP (par exemple10.1.0.12)NFS_PATH— la partie chemin (par exemple/shares/share-abc12345-def6-4abc-8def-123456abcdef)
Accédez à Storage & backup > File Storage, cliquez sur votre partage et trouvez le Chemin de montage dans l'onglet Informations générales.
Étape 2 - Accorder l'accès des nœuds Kubernetes au partage
Le pod provisioner et chaque nœud qui montera des volumes NFS doivent être autorisés à accéder au partage. Ajoutez une entrée ACL couvrant le sous-réseau du réseau privé de votre cluster.
Le File Storage Service est uniquement accessible depuis les adresses IP OVHcloud (instances Public Cloud, Managed Kubernetes Service). Une seule règle CIDR pour le sous-réseau de votre cluster couvre tous les nœuds sans avoir à les lister individuellement.
Cliquez sur votre partage, accédez à l'onglet Liste de contrôle d'accès (ACL), puis cliquez sur Ajouter un nouvel accès. Saisissez la plage CIDR du réseau privé de votre cluster (par exemple 10.1.0.0/24) et sélectionnez la permission Lecture et écriture.
Vérifiez que l'entrée ACL est au statut active avant de continuer.
Étape 3 - Installer le NFS Subdir External Provisioner
Ajoutez le dépôt Helm :
Installez le provisioner en remplaçant <NFS_SERVER> et <NFS_PATH> par les valeurs récupérées à l'étape 1 :
archiveOnDelete=false supprime définitivement les données du sous-répertoire lors de la suppression du PVC. Définissez cette valeur à true pour renommer les répertoires des PVC supprimés en archived-* plutôt que de les supprimer, en préservant les données au prix d'une consommation continue du partage.
Vérifiez que le pod provisioner est en cours d'exécution :
Étape 4 - Vérifier la StorageClass
Le chart Helm crée automatiquement une StorageClass. Vérifiez sa configuration :
volumeBindingMode: Immediate signifie qu'un PV est provisionné dès la création du PVC, qu'un pod le consomme ou non.
Étape 5 - Créer des PersistentVolumeClaims
Créez un PVC avec la StorageClass nfs-subdir :
Appliquez-le :
Le champ storage n'est pas appliqué par le NFS Subdir External Provisioner — il est uniquement enregistré en tant que métadonnée. Tous les PVC partagent la capacité totale du partage File Storage Service sous-jacent. Dimensionnez votre partage en fonction de votre usage total prévu sur l'ensemble des PVC.
Vérifiez que le PVC est lié :
Étape 6 - Tester avec une charge de travail partagée
Déployez 2 réplicas Nginx montant le même PVC pour vérifier l'accès ReadWriteMany :
Écrivez un fichier depuis le premier pod et vérifiez qu'il est visible depuis le second :
Les 2 pods lisent et écrivent dans le même sous-répertoire du partage NFS, confirmant l'accès RWX entre les nœuds.
Limitations
- Pas d'application de quota : le champ
storaged'un PVC est uniquement une métadonnée. Tous les PVC d'une StorageClass partagent la capacité totale du partage NFS sous-jacent. - Pas de snapshots de volume : le provisioner ne prend pas en charge l'API
VolumeSnapshot. Utilisez Manila CSI si vous avez besoin de snapshots. - Pas de redimensionnement de volume : les PVC ne peuvent pas être redimensionnés après leur création.
- Pas d'isolation de quota
ReadWriteOnce: pour les cas d'usageReadWriteOnceavec application de quota, le Block Storage OVHcloud (csi-cinder-high-speed) est plus adapté. - Accumulation des répertoires archivés : avec
archiveOnDelete=true, les données des PVC supprimés sont renommées mais pas supprimées. L'espace est consommé jusqu'au nettoyage manuel des répertoires archivés.
Bonnes pratiques
- Une release Helm par environnement : déployez des instances de provisioner séparées (par exemple
nfs-subdir-dev,nfs-subdir-prod) pointant vers des partages ou des chemins différents pour éviter tout mélange de données entre environnements. - Utilisez
pathPatternpour des noms de répertoires lisibles : définissezstorageClass.pathPatternà${.PVC.namespace}/${.PVC.name}pour générer des structures de sous-répertoires lisibles. Consultez la documentation du NFS Subdir External Provisioner pour la liste complète des variables de template. - Choisissez
archiveOnDeletede manière délibérée : décidez à l'avance si les données des PVC supprimés doivent être conservées (true) ou supprimées (false). Mélanger les politiques lorsque des données existent déjà sur le partage peut prêter à confusion. - Surveillez la capacité du partage : les quotas par PVC n'étant pas appliqués, surveillez la taille de votre partage File Storage Service depuis l'espace client OVHcloud ou via l'API OVHcloud et redimensionnez-le avant qu'il ne soit plein.
- Adaptez les options de montage NFS aux capacités du File Storage Service : OVHcloud File Storage Service prend en charge NFS v4. Si vous devez remplacer les options de montage (par exemple
nfsvers=4,hard,timeo=600), définissez-les viastorageClass.mountOptionsdans les valeurs Helm.
Aller plus loin
- File Storage Service — Premiers pas
- Volumes persistants sur OVHcloud Managed Kubernetes Service
- Configurer des volumes persistants multi-attach avec OVHcloud NAS-HA
- NFS Subdir External Provisioner sur GitHub
Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.
Échangez avec notre communauté d'utilisateurs.