いつの間にかに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なんで。