Kubernetes:无法删除PersistentVolumeClaim(pvc)

时间:2018-07-16 09:42:13

标签: kubernetes persistent-volumes persistent-volume-claims

我通过调用以下持久卷

kubectl create -f nameOfTheFileContainingTheFollowingContent.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-monitoring-static-content
spec:
  capacity:
    storage: 100Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/some/path"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-monitoring-static-content-claim
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ""
  resources:
    requests:
      storage: 100Mi

此后,我尝试删除pvc。但是这个命令卡住了。 致电kubectl describe pvc pv-monitoring-static-content-claim时,我得到以下结果

Name:          pv-monitoring-static-content-claim
Namespace:     default
StorageClass:
Status:        Terminating (lasts 5m)
Volume:        pv-monitoring-static-content
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed=yes
               pv.kubernetes.io/bound-by-controller=yes
Finalizers:    [foregroundDeletion]
Capacity:      100Mi
Access Modes:  RWO
Events:        <none>

对于kubectl describe pv pv-monitoring-static-content

Name:            pv-monitoring-static-content
Labels:          <none>
Annotations:     pv.kubernetes.io/bound-by-controller=yes
Finalizers:      [kubernetes.io/pv-protection foregroundDeletion]
StorageClass:
Status:          Terminating (lasts 16m)
Claim:           default/pv-monitoring-static-content-claim
Reclaim Policy:  Retain
Access Modes:    RWO
Capacity:        100Mi
Node Affinity:   <none>
Message:
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /some/path
    HostPathType:
Events:            <none>

没有运行使用持久卷的Pod。有人可以提示我为什么不删除pvc和pv吗?

11 个答案:

答案 0 :(得分:17)

我不确定为什么会这样,但是在通过kubernetes仪表板删除了pv和pvc的终结器之后,两者都被删除了。 重复我在问题中描述的步骤后,这种情况再次发生。 好像是个错误。

答案 1 :(得分:5)

PV已受保护。删除PVC之前先删除PV。另外,删除要求使用任何引用的PVC的任何Pod /部署。有关更多信息,请查看Storage Object in Use Protection

答案 2 :(得分:5)

您可以摆脱编辑pvc的麻烦!删除pvc保护。

  1. kubectl编辑pvc YOUR_PVC -n NAME_SPACE
  2. 手动编辑#并在此行之前 enter image description here
  3. 所有pv和pvc将被删除

答案 3 :(得分:4)

如果PV仍然存在,则可能是因为将ReclaimPolicy设置为Retain,在这种情况下,即使PVC消失了也不会删除它。从文档中:

  

PersistentVolume可以具有各种回收策略,包括   “保留”,“回收”和“删除”。用于动态配置   PersistentVolumes,默认回收策略为“删除”。这表示   动态配置的卷在以下情况下会自动删除:   用户删除相应的PersistentVolumeClaim。这个自动   如果卷中包含宝贵的数据,则此行为可能是不合适的。   在这种情况下,使用“保留”策略更为合适。用   “保留”策略,如果用户删除了PersistentVolumeClaim,则   相应的PersistentVolume不会被删除。相反,它被移动了   进入发布阶段,可以手动恢复其所有数据

答案 4 :(得分:3)

PV受保护。

最终确定者:[kubernetes.io/pv-protection frontDeletion]

您应该运行pv补丁程序(将终结器设置为null)来解决该问题,例如以下命令:

kubectl patch pvc jenkins-pvc -n ops -p '{"metadata":{"finalizers": []}}' --type=merge

答案 5 :(得分:2)

几个小时前就遇到了这个问题。

我删除了使用此参考的部署,并且PV / PVC自动终止。

答案 6 :(得分:2)

就我而言,只要删除与joined = df.join(df2, how='outer').fillna(-1).astype(pd.concat([df.dtypes,df2.dtypes])) #or joined = df.join(df2, how='outer').fillna(-1).astype(df.dtypes.append(df2.dtypes)) print(joined) a b c e d 0 1 1 0 1 1 1 1 2 1 1 2 2 1 1 2 -1 -1 3 1 2 3 -1 -1 4 1 1 4 -1 -1 5 1 2 5 -1 -1 6 1 1 6 -1 -1 7 1 2 7 -1 -1 8 1 1 8 -1 -1 9 1 2 9 -1 -1 pv都关联的广告连播,终止状态的pvcpv就消失了

答案 7 :(得分:2)

对我来说,pv处于保留状态,因此执行上述步骤无效。

首先,我们需要如下更改策略状态:

kubectl patch pv PV_NAME -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'

然后按如下所示删除pvc。

kubectl get pvc

kubectl delete pvc PVC_NAME

最后,使用

删除pv
kubectl delete pv PV_NAME

答案 8 :(得分:0)

在我的情况下,由于缺少名称空间而没有删除pvc(我在删除所有资源/ pvc之前删除了名称空间) 解决方案:使用与以前相同的名称创建名称空间,然后我可以删除finalizers,最后删除pvc

答案 9 :(得分:0)

如果您已经删除PV并尝试删除PVC

检查该命令是否附加了卷

kubectl获得体积连接

删除PVC:-

首先,您必须使用此命令一个删除pvc pne

kubectl删除pvc --grace-period = 0 --force

或者您可以使用删除所有PVC

kubectl删除pvc --all

现在您可以使用

查看PVC的终止状态

kubectl获取pvc

,然后您必须使用来应用此删除

kubectl补丁pvc {PVC_NAME} -p'{“元数据”:{“ finalizers :: null}}'

答案 10 :(得分:0)

kubectl get pvc pvc_name -o yaml > pvcfile.yaml

然后打开 pvcfile.yaml 并删除 finalizers 行,保存并应用:

kubectl apply -f pvcfile.yaml