Installation d'un contrôleur NFS sur Kubernetes

Mon précédent poste ne me laissait que très peu interagir avec Kubernetes, la faute à "pas dans le scope". Mais les choses ont changé avec mon récent changement de poste en mai dernier ; je me retrouve à nouveau en première ligne avec mes chers clusters.
Un cas de figure s'est alors présenté à moi : utiliser un partage NFS pour mes montages persistants dynamiques (PVC). Pour réaliser cette prouesse action, nous utiliserons le gestionnaire de packages de Kubernetes, à savoir Helm. C'est grâce à ce dernier que nous serons en mesure de déployer le contrôleur NFS ainsi que sa classe de stockage associée.
Ajout du repository Helm
Dans cet article, nous utiliserons le contrôleur kubernetes-sigs/nfs-subdir-external-provisioner. Avant de pouvoir utiliser le chart associé, il nous fait ajouter le dépôt qui va bien :
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
Cette commande permet d'ajouter un dépôt nommé nfs-subdir-external-provisioner ayant comme adresse https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/. Nous pouvons rafraichir la liste des paquets pour s'assurer de la bonne prise en compte de notre dépôt :
$ helm repo update
$ helm search repo nfs-subdir-external-provisioner
Installation du contrôleur
Nous partons du principe que vous avez déjà configuré votre dossier partagé NFS. Il ne reste plus qu'à instancier le chart nfs-subdir-external-provisioner avant de pouvoir instancier nos premiers PVC :
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=x.x.x.x \
--set nfs.path=/exported/path \
--namespace=nfs-subdir-external-provisioner
Pensez à renseigner l'IP de votre serveur NFS ainsi que le chemin de votre dossier partagé ! Vous pouvez également utiliser un espace de nom différent si vous le souhaitez. Si tout est en ordre, vous devriez voir apparaître un pod nfs-subdir-external-provisioner :
$ kubectl get pods -n nfs-subdir-external-provisioner
Ainsi qu'une nouvelle classe de stockage nfs-client :
$ kubectl get storageclass
Création d'un volume persistant dynamique (PVC)
Il ne nous reste plus qu'à valider le bon fonctionnement du contrôleur. Pour ce faire, nous allons instancier un PVC et vérifier la création d'un PV associé :
$ cat pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: flame-pv-claim
namespace: default
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
$ kubectl apply -f pvc.yaml
Notez l'utilisation d'une nouvelle classe de stockage nommé nfs-client. Si tout se déroule sans encombres, vous devriez voir apparaître un PV dans le même espace de nom que votre PVC :
$ kubectl get pv
Si vous constatez l'apparition d'un nouveau PV, alors félicitations ! Dans le cas contraire, il ne vous reste plus qu'à consulter les journaux du contrôleur pour trouver une erreur :
$ kubectl logs nfs-subdir-external-provisioner-bd9bf7c77-tc4h2 -n nfs-subdir-external-provisioner