Maintenant que nous avons un cluster opérationnel.
je voulais ajouter une storage class pour les worloads afin de demander et de provisionner dynamiquement le stockage selon les besoins.
D'abord il vous faut installer HELM :
Il est possible de l'installer soit sur une des masters du cluster ou directement sur votre machine à partir du moment ou votre utilisateur courant à bien dans son "HOME/.KUBE" le fichier de config du serveur.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
Pour d'autres façons d'installer Helm, consultez la documentation d'installation ici.
Avoir sur l'ensemble de vos noeuds composant votre cluster K3S les paquets nécesséraires pour initier une connexion NFS vers un serveur NFS.
sudo apt install nfs-common -y
sudo dnf install nfs-utils -y
J'ai déjà les services NFS en cours d'exécution sur mon NAS, c'est donc la première étape si vous ne l'avez pas déjà fait (panneau de configuration > services de fichiers > NFS)

Il est maintenant temps de créer un dossier partagé. J'ai opté pour le nom CLOUDNATIVE1. Sous panneau de configuration > dossier partagé, créez le partage.
Donnez un nom au partage, sélectionnez le volume souhaité, désactivez la corbeille.

Si vous le souhaitez, activez le cryptage sur la page suivante et, si vous le souhaitez, définissez un quota sur l'écran suivant.
Appliquer dans l'assistant pour créer le partage. Maintenant, faites un clic droit sur le partage et modifiez.

Sous Autorisations NFS, cliquez sur créer et remplissez vos paramètres de nom d'hôte/ip. Je suis allé avec tout mon sous-réseau alloué au LAB pour plus de facilité d'utilisation, mais vous souhaiterez peut-être le verrouiller davantage ou avoir des adresses de nœud spécifiques, etc.

Vous remarquerez quelques paramètres que j'ai trouvés qui fonctionnaient le mieux
Maintenant, notez votre chemin, à peu près /[nom du volume]/[nom du dossier partagé], dans mon cas /volume1/CLOUDNATIVE1. Vous pouvez le voir en bas à gauche dans la fenêtre d'autorisation NFS.
C'est tout ce dont on a besoin du côté de Synology.
Nous devons maintenant exécuter quelques commandes sur le cluster avec kubectl.
Tout d'abord, ajoutez le référentiel helm suivant - vous pouvez voir le projet ici sur github pour plus d'informations.
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
Maintenant que cela est ajouté, vous pouvez installer le graphique avec la commande suivante, il suffit de basculer le nfs.server et le nfs.path vers vos paramètres spécifiques.
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=192.168.0.10 \
--set nfs.path=/volume1/CLOUDNATIVE1
Vous devriez obtenir ceci
NAME: nfs-subdir-external-provisioner
LAST DEPLOYED: Thu Oct 6 09:59:03 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Maintenant que la storage class a été ajoutée, vous pouvez le vérifier en exécutant
kubectl get storageclass
Vous noterez cependant que ce n'est pas la valeur par défaut, dans mon cluster la classe de stockage local-path est toujours la valeur par défaut. Pour y remédier, il nous suffit d'émettre quelques commandes, de noter les noms de vos storage class et de les exécuter.
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Ensuite, définissez notre classe NFS par défaut
kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Une fois cela fait, exécutez à nouveau kubectl get storageclass pour vérifier et vous pouvez voir qu'il a maintenant (default) après la classe nfs.
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-path rancher.io/local-path Delete Immediate false 58m
nfs-client (default) cluster.local/nfs-subdir-external-provisioner Delete Immediate true 58m
C'est tout en termes de configuration de base, il y a quelques autres paramètres que vous pouvez définir lors du déploiement et ils sont disponibles sur le readme dans le projet sur github .
Maintenant, si vous provisionnez certains workloads et si elles demandent un stockage persistant, elles l'obtiendront via le NAS.