问题描述
我的 kubernetes aws eks 集群中有 4000 多个 pvc。
从那些 4000 多个 pvc 中,我必须删除近 3999 个 pvc,而不是像 30 个 pvc 那样删除。
我将使用以下命令:
kubectl delete pvc --field-selector Metadata.name!=<name not to delete>
在我使用之前进行测试
kubectl get pvc --field-selector Metadata.name!=<name not to delete>
- 现在,当我使用该命令并添加仅一个 PVC 的 pvc 名称代替“名称不删除”时,该命令有效.. 但是当我添加另一个 pvc 名称而不是像 "kubectl get pvc --field-selector Metadata.name!=pvc1 pvc2" .. 它不起作用
正如我提到的,我不想删除 30 个 pvc,但我想删除其余的 4000 个...所以我需要在命令前面添加那 30 个 pvc。所以我需要这方面的帮助。
- 现在我也想尝试按 AGE 的 LABELS 在 bacth 中选择资源..我只想选择 2 天以上的 pvc.. 我该怎么做?
解决方法
你可以试试
kubectl get pvc --field-selector metadata.name!=pvc1,metadata.name!=pvc2
见https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get
,虽然对于任务来说有点太多了,但您可以使用如下所示的内容,在删除之前打印每个 PVC 的名称以确保:
_contains () {
echo "$1" | tr ' ' '\n' | grep -F -x -q "$2"
}
deleteList="claim-http-0 claim-http-1"
for each in $(kubectl get pvc -o jsonpath="{.items[*].metadata.name}" | tr " " "\n");
do
if _contains "${deleteList}" "${each}"; then
echo $each
kubectl delete pvc $each
fi
done