我们测试环境中的有状态集 es-data 失败了,我被要求删除相应的 PV。
因此,我删除了以下内容以针对 es-data: 1)PVC 2)PV 它们显示为终止,并留待周末。今天早上到达时,它们仍然显示为终止,所以强制删除了 PVC 和 PV,但没有成功。 为了修复整个问题,我不得不删除该有状态集。
如果要删除 PV,这样做是否正确?
我们测试环境中的有状态集 es-data 失败了,我被要求删除相应的 PV。
因此,我删除了以下内容以针对 es-data: 1)PVC 2)PV 它们显示为终止,并留待周末。今天早上到达时,它们仍然显示为终止,所以强制删除了 PVC 和 PV,但没有成功。 为了修复整个问题,我不得不删除该有状态集。
如果要删除 PV,这样做是否正确?
您可以使用以下两个命令删除 PV:
kubectl delete pv <pv_name> --grace-period=0 --force
然后使用以下方式删除终结器:
kubectl patch pv <pv_name> -p '{"metadata": {"finalizers": null}}'
如果我先删除PVC,然后再删除PV,它对我有用。
kubectl delete pvc data-p-0
kubectl delete pv <pv-name> --grace-period=0 --force
如果想要删除PVC,否则似乎会挂起。
首先运行 kubectl patch pv {PVC_NAME} -p '{"metadata":{"finalizers":null}}'
然后运行 kubectl delete pv {PVC_NAME}
finalizers
。 - Bruce这个帖子中的大多数答案只是提到了命令,而没有解释根本原因。
这里有一张图表可以帮助更好地理解。有关命令和其他信息,请参见我的其他答案-> https://dev59.com/-1MH5IYBdhLWcg3w92Mu#73534207
在您的情况下,PVC和PV因为终结器(stuck in terminating state)而无法删除,因为终结器是k8s中避免资源意外删除的保护措施。
你的观察是正确的,这就是Kubernetes的工作原理。但是,您删除资源的顺序不正确。
这就是发生的事情:
PV被卡在终止状态中,因为PVC仍然存在。PVC被卡在终止状态中,因为Statefulsets(pods)还在使用这些卷。(volumes are attached to the nodes and mounted to the pods). 当您删除pod / STS时,由于卷不再使用,PVC和PV成功删除。
在开始之前,请确保您的 Reclaim Policy
被设置为 Delete
。 PVC 被删除后,PV 应该被删除。
https://kubernetes.io/docs/concepts/storage/persistent-volumes/#reclaiming
如果这不能帮助您,请检查此[closed] Kubernetes PV问题:https://github.com/kubernetes/kubernetes/issues/69697,并尝试删除PV终结者。提示: PV卷可能会被描述为pvc-volume-name
,这可能会令人困惑!
Persistent Volume
(持久化存储卷)Persistent Volume Claim
(持久化存储卷声明)首先找到已有的PV卷:kubectl get pv -n {namespace}
然后删除PV卷以将状态设置为Terminating
kubectl delete pv {PV_NAME}
然后对其进行修补,以将PVC状态设置为Lost
:
kubectl patch pv {PV_NAME} -p '{"metadata":{"finalizers":null}}'
接着获取PVC卷:kubectl get pvc -n storage
然后可以删除PVC卷:
kubectl delete pvc {PVC_NAME} -n {namespace}
** 假设我们在storage namespace
中安装了kafka
$ kubectl get pv -n storage
$ kubectl delete pv pvc-ccdfe297-44c9-4ca7-b44c-415720f428d1
$ kubectl get pv -n storage
(挂起但将PV卷状态设置为终止)
$ kubectl patch pv pvc-ccdfe297-44c9-4ca7-b44c-415720f428d1 -p '{"metadata":{"finalizers":null}}'
$ kubectl get pvc -n storage
kubectl delete pvc data-kafka-0 -n storage
对我来说,我遵循了这种方法,它对我很有效。
kubectl delete pv {your-pv-name} --grace-period=0 --force
之后编辑PVC配置。
kubectl edit pvc {your-pvc-name}
从PVC配置中删除终结器。
finalizers:
- kubernetes.io/pv-protection
您可以在官方 Kubernetes 指南中了解有关 finalizer 的更多信息。
etcd
(或者你使用的任何键值存储)中移除PV,而不验证它是否实际被删除,很有可能导致相关对象悬空。@ns15提供了一个更正确的答案。 - Alwyn