Pav*_* K. 12 kubernetes kubernetes-pvc
我们不想删除 PV 和 PVC,因为 pod 大部分时间都会重用它们。但是,从长远来看,我们最终会得到许多未使用的 PV 和 PVC。如何安全清洁?
Pav*_* K. 18
不是很优雅但 bash 删除已发布 PV 的方式
kubectl get pv | grep Released | awk '$1 {print$1}' | while read vol; do kubectl delete pv/${vol}; done
Run Code Online (Sandbox Code Playgroud)
iri*_*ian 13
查看当前的答案,看起来其中大多数都没有直接回答问题(我可能会弄错)。一个PVC是Bound
不一样的Mounted
。当前的答案应该足以清理Unbound
PVC,但查找和清理所有Unmounted
PVC 似乎没有答案。
不幸的是,它看起来-o=go-template=...
没有Mounted By:
如 中所示的变量kubectl describe pvc
。
这是我经过一些黑客攻击后得出的结论:
要列出集群中的所有 PVC(已安装和未安装),您可以执行以下操作: kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Mounted By:.*$"
该-A
会在集群中的每个命名空间回报每一位PVC。然后我们进行过滤以仅显示Name
,Namespace
和Mounted By
字段。
我能想出的最好的方法是获取所有未安装的 PVC 的名称和命名空间:
kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Mounted By:.*$" | grep -B 2 "<none>" | grep -E "^Name:.*$|^Namespace:.*$"
Run Code Online (Sandbox Code Playgroud)
实际删除 PVC 有点困难,因为我们需要知道 PVC 的名称以及它的命名空间。我们使用剪切、粘贴和 xargs 来做到这一点:
kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Mounted By:.*$" | grep -B 2 "<none>" | grep -E "^Name:.*$|^Namespace:.*$" | cut -f2 -d: | paste -d " " - - | xargs -n2 bash -c 'kubectl -n ${1} delete pvc ${0}'
Run Code Online (Sandbox Code Playgroud)
cut
删除Name:
,Namespace:
因为他们只是挡路paste
将Name
PVCNamespace
放在同一行上xargs -n bash
使 PVC 名称为${0}
,命名空间为${1}
.我承认我有一种感觉,这不是做到这一点的最佳方式,但这是我能想出(在 CLI 上)做到这一点的唯一明显方式。
运行此程序后,您的卷将从Bound
到Unbound
并且此线程中的其他答案有关于如何清理它们的好主意。
另外,请记住,当在 Kubernetes 中删除卷时,某些卷控制器实际上不会删除您的数据。您可能仍然需要在您使用的任何系统中清理它。
例如,在 NFS 控制器中,数据使用archived-
前缀重命名,在 NFS 端,您可以运行rm -rf /persistentvolumes/archived-*
. 对于 AWS EBS,如果 EBS 卷与任何实例分离,您可能仍需要删除它们。
我希望这有帮助!
归档时间: |
|
查看次数: |
8785 次 |
最近记录: |