我们不想删除PV和PVC,因为它们在大多数情况下都是重复使用的。然而,从长远来看,我们最终得到了许多未使用的PVs和PVCs。如何安全清洁?
发布于 2019-12-04 14:24:09
不太优雅,但是删除发布的PV的bash方式
kubectl get pv | grep Released | awk '$1 {print$1}' | while read vol; do kubectl delete pv/${vol}; done发布于 2020-01-15 20:14:34
从目前的答案来看,似乎大多数答案都没有直接回答这个问题(我可能弄错了)。Bound的聚氯乙烯和Mounted不一样。目前的答案应该足以清理Unbound的聚氯乙烯,但寻找和清理所有的Unmounted聚氯乙烯似乎没有答案。
不幸的是,-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:.*$"实际删除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}'cut移除了Name:和Namespace:,因为它们只是碍事。paste将PVC的Name和Namespace放在同一条线上xargs -n bash将其设置为PVC名称为${0},命名空间为${1}。我承认,我有一种感觉,这不是最好的方法,但这是唯一明显的方式,我可以想出(在CLI)这样做。
运行这个之后,您的卷将从Bound转到Unbound,这个线程中的其他答案对如何清理这些内容有很好的想法。
另外,请记住,在Kubernetes中删除卷时,某些卷控制器实际上不会删除您的数据。您可能仍然需要在您正在使用的任何系统中清理该系统。
例如,在NFS控制器中,数据被重命名为archived-前缀,并且在NFS端可以运行rm -rf /persistentvolumes/archived-*。对于AWS,如果将EBS卷与任何实例分离,则可能仍然需要删除它们。
我希望这能帮到你!
发布于 2018-11-08 19:32:28
如果要删除所有未绑定的PV和PVCs,可以这样做:
第一,删除PVCs:
$ kubectl -n <namespace> get pvc | tail -n +2 | grep -v Bound | \
awk '{print $1}' | xargs -I{} kubectl -n namespace delete pvc {}然后删除PVs:
$ kubectl -n <namespace> get pv | tail -n +2 | grep -v Bound | \
awk '{print $1}' | xargs -I{} kubectl -n namespace delete pv {}https://stackoverflow.com/questions/53202727
复制相似问题