Kubernetes:无法删除 PersistentVolumeClaim (pvc)
Kubernetes: Can't delete PersistentVolumeClaim (pvc)
我通过调用
创建了以下持久卷
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 没有被删除?
PV被保护。在删除 PVC 之前先删除 PV。此外,删除声明任何引用的 PVC 的任何 pods/ 部署。如需更多信息,请查看 Storage Object in Use Protection
我不确定为什么会这样,但是在通过 kubernetes 仪表板删除 pv 和 pvc 的终结器后,两者都被删除了。
在重复我在问题中描述的步骤后,这种情况再次发生。
似乎是一个错误。
几小时前刚遇到这个问题。
我删除了使用此引用的部署,PV/PVCs 自动终止。
如果PV仍然存在,可能是因为它的ReclaimPolicy设置为Retain,在这种情况下即使PVC消失也不会被删除。来自文档:
PersistentVolumes can have various reclaim policies, including
“Retain”, “Recycle”, and “Delete”. For dynamically provisioned
PersistentVolumes, the default reclaim policy is “Delete”. This means
that a dynamically provisioned volume is automatically deleted when a
user deletes the corresponding PersistentVolumeClaim. This automatic
behavior might be inappropriate if the volume contains precious data.
In that case, it is more appropriate to use the “Retain” policy. With
the “Retain” policy, if a user deletes a PersistentVolumeClaim, the
corresponding PersistentVolume is not be deleted. Instead, it is moved
to the Released phase, where all of its data can be manually recovered
在我的例子中,只要删除与pv
和pvc
关联的pod,终止状态的pv
和pvc
就消失了
当持久卷受到保护时会发生这种情况。你应该能够交叉验证这个:
命令:
kubectl describe pvc PVC_NAME | grep Finalizers
输出:
Finalizers: [kubernetes.io/pvc-protection]
您可以通过使用 kubectl patch
:
将终结器设置为 null 来解决此问题
kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge
您可以摆脱编辑您的 pvc!去除 PVC 保护。
- kubectl edit pvc YOUR_PVC -n NAME_SPACE
- 手动编辑并在这一行前加上#
- 所有pv和pvc都将被删除
在我的例子中,pvc 没有被删除,因为缺少命名空间(我在删除所有之前删除了命名空间 resources/pvc)
解决方案:创建名称与之前相同的名称空间,然后我能够删除 finalizers
最后 pvc
对我来说,pv 处于保留状态,因此执行上述步骤无效。
1st 我们需要更改策略状态如下:
kubectl patch pv PV_NAME -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
然后如下删除pvc
kubectl get pvc
kubectl delete pvc PVC_NAME
最后,用
删除pv
kubectl delete pv PV_NAME
如果您已经删除了 PV 并试图删除 PVC
检查此命令是否附加了卷
kubectl 获取卷附件
正在删除 PVC :-
首先你必须使用这个命令删除一个pvc pne
kubectl delete pvc --grace-period=0 --force
或者您可以使用
删除所有 PVC
kubectl delete pvc --all
现在您可以使用
查看PVC的状态为正在终止
kubectl 获取 pvc
然后您必须使用
应用此删除
kubectl patch pvc {PVC_NAME} -p '{"metadata":{"finalizers":null}}'
kubectl get pvc pvc_name -o yaml > pvcfile.yaml
然后打开pvcfile.yaml并删除终结器行,保存并应用:
kubectl apply -f pvcfile.yaml
关于终结器的其他答案...
只有删除 Deployment 才能释放资源。之后,终止资源被释放。
删除列出的所有资源:
kubectl get all -n YOURNAMESPACE
使用 kubectl delete -n YOURNAMESPACE <resource> <id>
或(如果您从上面的输出中复制粘贴)kubectl delete -n YOURNAMESPACE <resource>/<id>
,对于您在此处看到的每个资源。
你也可以一次完成
kubectl delete -n YOURNAMESPACE <resource>/<id1> <resource>/<id2> <resource2>/<id3> <resource2>/<id4> <resource3>/<id5>
可能您尝试删除资源,但由于 deployment
或 replicaset
资源,它们正在重新创建,从而阻止命名空间释放依赖资源和被清理。
我通过调用
创建了以下持久卷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 没有被删除?
PV被保护。在删除 PVC 之前先删除 PV。此外,删除声明任何引用的 PVC 的任何 pods/ 部署。如需更多信息,请查看 Storage Object in Use Protection
我不确定为什么会这样,但是在通过 kubernetes 仪表板删除 pv 和 pvc 的终结器后,两者都被删除了。 在重复我在问题中描述的步骤后,这种情况再次发生。 似乎是一个错误。
几小时前刚遇到这个问题。
我删除了使用此引用的部署,PV/PVCs 自动终止。
如果PV仍然存在,可能是因为它的ReclaimPolicy设置为Retain,在这种情况下即使PVC消失也不会被删除。来自文档:
PersistentVolumes can have various reclaim policies, including “Retain”, “Recycle”, and “Delete”. For dynamically provisioned PersistentVolumes, the default reclaim policy is “Delete”. This means that a dynamically provisioned volume is automatically deleted when a user deletes the corresponding PersistentVolumeClaim. This automatic behavior might be inappropriate if the volume contains precious data. In that case, it is more appropriate to use the “Retain” policy. With the “Retain” policy, if a user deletes a PersistentVolumeClaim, the corresponding PersistentVolume is not be deleted. Instead, it is moved to the Released phase, where all of its data can be manually recovered
在我的例子中,只要删除与pv
和pvc
关联的pod,终止状态的pv
和pvc
就消失了
当持久卷受到保护时会发生这种情况。你应该能够交叉验证这个:
命令:
kubectl describe pvc PVC_NAME | grep Finalizers
输出:
Finalizers: [kubernetes.io/pvc-protection]
您可以通过使用 kubectl patch
:
kubectl patch pvc PVC_NAME -p '{"metadata":{"finalizers": []}}' --type=merge
您可以摆脱编辑您的 pvc!去除 PVC 保护。
- kubectl edit pvc YOUR_PVC -n NAME_SPACE
- 手动编辑并在这一行前加上#
- 所有pv和pvc都将被删除
在我的例子中,pvc 没有被删除,因为缺少命名空间(我在删除所有之前删除了命名空间 resources/pvc)
解决方案:创建名称与之前相同的名称空间,然后我能够删除 finalizers
最后 pvc
对我来说,pv 处于保留状态,因此执行上述步骤无效。
1st 我们需要更改策略状态如下:
kubectl patch pv PV_NAME -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
然后如下删除pvc
kubectl get pvc
kubectl delete pvc PVC_NAME
最后,用
删除pvkubectl delete pv PV_NAME
如果您已经删除了 PV 并试图删除 PVC
检查此命令是否附加了卷
kubectl 获取卷附件
正在删除 PVC :-
首先你必须使用这个命令删除一个pvc pne
kubectl delete pvc
或者您可以使用
删除所有 PVCkubectl delete pvc --all
现在您可以使用
查看PVC的状态为正在终止kubectl 获取 pvc
然后您必须使用
应用此删除kubectl patch pvc {PVC_NAME} -p '{"metadata":{"finalizers":null}}'
kubectl get pvc pvc_name -o yaml > pvcfile.yaml
然后打开pvcfile.yaml并删除终结器行,保存并应用:
kubectl apply -f pvcfile.yaml
关于终结器的其他答案...
只有删除 Deployment 才能释放资源。之后,终止资源被释放。
删除列出的所有资源:
kubectl get all -n YOURNAMESPACE
使用 kubectl delete -n YOURNAMESPACE <resource> <id>
或(如果您从上面的输出中复制粘贴)kubectl delete -n YOURNAMESPACE <resource>/<id>
,对于您在此处看到的每个资源。
你也可以一次完成
kubectl delete -n YOURNAMESPACE <resource>/<id1> <resource>/<id2> <resource2>/<id3> <resource2>/<id4> <resource3>/<id5>
可能您尝试删除资源,但由于 deployment
或 replicaset
资源,它们正在重新创建,从而阻止命名空间释放依赖资源和被清理。