k8s: Synology CIS
L'utilisation d'un de stockage local (type hostPath) offre assez peu de flexibilité et résilience sur un cluster k8s.
Si vous avez déja un NAS, il est intéressant d'utiliser la fonction de Network Storage iSCSI ou NFS pour exposer des volumes à vos pods Kubernetes.
Avec un NAS, les volumes de données seront centralisés , ce qui présente plusieurs avantages:
- Montage du volume possible sur un autre noeud k8s en cas de redémarrage et déplacement d'un pod
- Capacité plus importantes avec les volumes du NAS si vous êtes limités par la taille du disque du node
- Fonctions de backups, snapshots avec le NAS
- NAS souvent en RAID, et données sécurisées
Pour que Kubernetes puisse 'piloter' le NAS et créer, monter, effacer les volumes, il faut installer le Container Storage Interface "Synology-csi"
Creation d'un compte dédié sur le NAS
Le "driver" synology-csi a besoin de se connecter au NAS avec un compte administrateur.
Pour ne pas utiliser le compte admin par défaut, il est tout à fait possible d'en créer un spécifiquement pour k8s (ex: k8s-csi-user depuis l'interface Control panel / Users and Groups / Create )
Installation de synology-csi
Kubernetes a besoin d'une extension CSI (Container Storage Interface)
$ git clone https://github.com/SynologyOpenSource/synology-csi.git
$ cp config/client-info-template.yml config/client-info.yml
$ vim config/client-info.yml
<Renseigner l'IP, le port, le nom d'utilisateur et le mot de passe>$ ./scripts/deploy.sh install --all
....
Verifications de base:
synology-csi] [olivier@ici ~]$ k get all
NAME READY STATUS RESTARTS AGE
pod/synology-csi-controller-0 4/4 Running 0 59m
pod/synology-csi-node-5cbgb 2/2 Running 0 59m
pod/synology-csi-node-5pgzx 2/2 Running 0 59m
pod/synology-csi-snapshotter-0 2/2 Running 0 59m
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/synology-csi-node 2 2 2 2 2 <none> 59m
NAME READY AGE
statefulset.apps/synology-csi-controller 1/1 59m
statefulset.apps/synology-csi-snapshotter 1/1 59mTest de performance
L'outil k8s-volume-test permet de tester simplement la vitesse du NAS lorsqu'il est utilisé sous kubernetes:
$ git clone https://github.com/phnmnl/k8s-volume-test.git
# Création d'un volume sur le NAS (attention à
$ k apply -f pvc.yaml
# Lancement d'un job pour écrire dans le nouveau volume:
$ k apply -f write.yml
# Lancement d'un job pour lire dans le nouveau volume:
$ k apply -f read.yml
# Lecture des logs
#
$ k logs $(kubectl get pods -o jsonpath='{.items[?(@.spec.containers[*].name=="read")].metadata.name}')
335183872 bytes (335 MB, 320 MiB) copied, 3.02791 s, 111 MB/s
$k logs $(k get pods --show-all -o jsonpath='{.items[?(@.spec.containers[*].name=="write")].metadata.name}')
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 11.4298 s, 93.9 MB/s