首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何只删除未安装的PVCs和PVs?

如何只删除未安装的PVCs和PVs?
EN

Stack Overflow用户
提问于 2018-11-08 06:50:09
回答 6查看 15K关注 0票数 16

我们不想删除PV和PVC,因为它们在大多数情况下都是重复使用的。然而,从长远来看,我们最终得到了许多未使用的PVs和PVCs。如何安全清洁?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-12-04 14:24:09

不太优雅,但是删除发布的PV的bash方式

代码语言:javascript
运行
复制
kubectl get pv | grep Released | awk '$1 {print$1}' | while read vol; do kubectl delete pv/${vol}; done
票数 23
EN

Stack Overflow用户

发布于 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。然后我们向下过滤,只显示NameNamespaceMounted By字段。

为了得到所有未安装的PVC的名称和名称空间,我能想到的最好方法是:

代码语言:javascript
运行
复制
kubectl describe -A pvc | grep -E "^Name:.*$|^Namespace:.*$|^Mounted By:.*$" | grep -B 2 "<none>" | grep -E "^Name:.*$|^Namespace:.*$"

实际删除PVC有点困难,因为我们需要知道PVC的名称以及它的名称空间。我们使用剪切、粘贴和xargs来完成以下操作:

代码语言:javascript
运行
复制
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的NameNamespace放在同一条线上
  • xargs -n bash将其设置为PVC名称为${0},命名空间为${1}

我承认,我有一种感觉,这不是最好的方法,但这是唯一明显的方式,我可以想出(在CLI)这样做。

运行这个之后,您的卷将从Bound转到Unbound,这个线程中的其他答案对如何清理这些内容有很好的想法。

另外,请记住,在Kubernetes中删除卷时,某些卷控制器实际上不会删除您的数据。您可能仍然需要在您正在使用的任何系统中清理该系统。

例如,在NFS控制器中,数据被重命名为archived-前缀,并且在NFS端可以运行rm -rf /persistentvolumes/archived-*。对于AWS,如果将EBS卷与任何实例分离,则可能仍然需要删除它们。

我希望这能帮到你!

票数 17
EN

Stack Overflow用户

发布于 2018-11-08 19:32:28

如果要删除所有未绑定的PV和PVCs,可以这样做:

第一,删除PVCs:

代码语言:javascript
运行
复制
$ kubectl -n <namespace> get pvc | tail -n +2 | grep -v Bound | \
  awk '{print $1}' | xargs -I{} kubectl -n namespace delete pvc {}

然后删除PVs:

代码语言:javascript
运行
复制
$ kubectl -n <namespace> get pv | tail -n +2 | grep -v Bound | \
  awk '{print $1}' | xargs -I{} kubectl -n namespace delete pv {}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53202727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档