TL;DR
发现 k8s csi 组的社区项目 csi-driver-nfs v4.10
到 v4.11
至少这两个版本存在删除 pv
时会连带将整个根删除的问题。
声明 StorageClass
时虽然支持 subDir
,类似这样:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-aliyun-gz
provisioner: nfs.csi.k8s.io
parameters:
share: "/csi"
server: "28364f4a1fa-eok75.cn-guangzhou.nas.aliyuncs.com"
#server: "172.26.12.20"
#subDir: "${pvc.metadata.namespace}/${pvc.metadata.name}"
reclaimPolicy: Delete
#volumeBindingMode: WaitForFirstConsumer
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
# - nolock,tcp,noresvport
- vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport
但如果类似这样使用 subDir
声明路径,同命名空间下的其他 pvc 删除,会导致整个 subDir 根目录都被删除。目前官方 pr 已经修复,但实测还是有问题,有空再研究一下代码,不知道是不是刻意为之。
回溯 issuer
历史发现是有人提了 bug
发现目录下出现很多空目录,认为需要删除,修复者修复这一问题时错误的将整个根删除。为了规避这一问题,暂时回退到更早的 4.9
版本 csi
helm upgrade --install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.
9.0 -f values.yaml
升级版本要谨慎,新装版本要充分测试,特别是这种涉及数据安全的!
最后发现 sig 组还有一个 nfs-subdir-external-provisioner 可以看一下。