NFSのCSIドライバ

投稿者: | 11月 24, 2024

いつの間にかにNFS CSIでボリュームスナップショットがサポートされていた。v4.3.0からかぁ。気が付かなかった。この実装だと幅広い環境で使えそう。いや、試せそう。まぁ、無理やり実装感はいなめないのだが。。。

ちなみに、このNFS CSIでスナップショットされたからと言って、ちゃんとしたストレージ(例えば、NetAppなど)を使っているのであれば、NFS CSIを設定してはならない。いけないというわけではなく、ちゃんとした方のドライバを使ってという意味。いずれにせよ、このストレージはあくまでも検証用なのでご注意を。

ただ、もうNFS-SUBを使う必要がなくなったという感じ。類似品のSMB CSIでもボリュームスナップショットが使えるようになったか?というとそれはなかった。

無理矢理感とは、NFS CSIのスナップショットは。。。

なので。

NFSサーバ側の設定は、UIDによらず書き込みができるように1777にしておく。

cat /etc/exports
/disk/nfs_csi 192.168.0.0/16(rw,async,no_root_squash,no_subtree_check)
ls /disk/nfs_csi/ -dl
drwxrwxrwt 2 root root 6 Jul 20 06:18 /disk/nfs_csi/

 

これによるとNFS CSIが使っているSnapshotコントローラーのバージョンは、v8.0.1の様子。

https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/refs/heads/master/deploy/v4.9.0/csi-snapshot-controller.yaml

また、いずれのケースにせよ、StorageClassにmountPermissions: “777”を追加しないとBitnamiのアプリが動けない(bitnamiのuid 1001が書き込めない)

 

K3sにインストールする場合

Longhornを先に入れる(Longhornが必要とするスナップショットコントローラーをインストールしてから)場合、externalSnapshotter.enabled=trueを外してインストールする。

apt install -y nfs-common
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm repo update
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.9.0 \
--create-namespace \
--set controller.replicas=1 \
--set externalSnapshotter.enabled=true

 

OpenShift SNO/MicroShiftにインストールする場合

今のOpenShift/MicroShiftは、VolumeSnapshotをサポートしているので、externalSnapshotter.enabledを有効にする必要があるが、CRDがバッテイングするので、作らない設定(externalSnapshotter.customResourceDefinitions.enabled=false)が必要。いろいろなところをググって合わせた結果がこれ。

helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm repo update
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.9.0 \
--create-namespace \
--set controller.replicas=1 \
--set controller.runOnControlPlane=true \
--set externalSnapshotter.enabled=true \
--set externalSnapshotter.customResourceDefinitions.enabled=false

 

StorageClassとVolumeSnapshotClassの設定

以下、192.168.16.2:/disk/nfs_csi/を利用する設定

cat <<'EOF' | kubectl create -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-csi
provisioner: nfs.csi.k8s.io  
parameters:
server: 192.168.16.2
share: /disk/nfs_csi/
subDir: ${pvc.metadata.namespace}-${pvc.metadata.name}-${pv.metadata.name}
mountPermissions: "777"
reclaimPolicy: Delete
volumeBindingMode: Immediate
EOF
cat <<'EOF' | kubectl create -f -
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: nfs-csi-snapclass
driver: nfs.csi.k8s.io
deletionPolicy: Delete
EOF
kubectl get sc,volumesnapshotclass

これで完了。

ちなみに、このNFSドライバは当然のごとく、ファイルしかサポートしていないので、Kubevirtのようなブロックディスクはもちろん作れないので注意。やってみて思ったが、LVMのストレージもあるし、正直これは使い物になるかなぁ。まぁ、 ReadWriteManyのPVCを使うことはできる。スナップショットは、ほんと実装しただけのテスト用。大容量なものだと事件が起きそう。なんてたって、tarなんで。

コメントを残す