为何未关联PVC的PV自动设置了kubernetes.io/pv-protection终结器?
未绑定PVC的PersistentVolume为何带有pv-protection终结器?
我使用以下YAML创建了一个NFS类型的PersistentVolume(PV):
apiVersion: v1 kind: PersistentVolume metadata: name: nfs-manual-pv spec: capacity: storage: 256Mi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Delete storageClassName: standard nfs: server: <local_nfs_server_ip> path: "/Users/<username>/Minikube/nfs-mount"
该PV使用默认的standard存储类,对应k8s.io/minikube-hostpath供应器。创建完成后,PV处于Available状态(未关联任何PVC),但查看PV描述时发现已设置Finalizers:[kubernetes.io/pv-protection]。
PV状态输出:
>> k get pv nfs-manual-pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nfs-manual-pv 256Mi RWX Delete Available standard 25m
PV描述结果:
>> k describe pv nfs-manual-pv Name: nfs-manual-pv Labels: <none> Annotations: <none> Finalizers: [kubernetes.io/pv-protection] StorageClass: standard Status: Available Claim: Reclaim Policy: Delete Access Modes: RWX VolumeMode: Filesystem Capacity: 256Mi
根据Kubernetes文档说明,pv-protection终结器应仅在PV被使用时设置,但当前PV未关联PVC也未被使用,请问该现象的原因是什么?
原因解释
从Kubernetes 1.11版本开始,pv-protection终结器的行为做了调整:
- 手动创建的静态PV:在创建时就会自动添加
kubernetes.io/pv-protection终结器,无论当前是否绑定PVC。这个设计的目的是防止误删除那些当前未绑定,但可能之前绑定过PVC(存在遗留数据)、或者后续会被PVC绑定的静态PV,避免数据意外丢失。 - 文档中提到的“仅在PV被使用时设置终结器”,更多是针对动态供应的PV——这类PV是为特定PVC自动创建的,只有在绑定PVC后才会添加该终结器,未绑定的动态PV本身就属于可被清理的资源。
你的场景中,PV是手动定义的静态PV,所以即使处于Available状态,被自动添加pv-protection终结器是完全正常的预期行为。
内容的提问来源于stack exchange,提问作者Seralahthan
相关产品推荐
相关产品推荐

