[英]How do I delete all the disks in a deployment in Kubernetes?
我想删除附加到自定义部署的所有持久卷声明。 首先,我删除了删除所有 Pod 但磁盘没有删除的部署本身。
我知道删除 pvc 的命令,但这涉及使用命令 [1] 获取所有 pvc,然后手动复制粘贴 [2] 属于部署集的那些。
如果我想以编程方式执行此操作,我应该使用 Kubernetes Python 客户端的哪个 API 或 cli 命令?
我正在使用 GKE。
我尝试阅读Python 客户端文档,但无法推断出如何执行此任务。
[1] kubectl --namespace=<my_namespace> --context=<my_cluster> get pvc
[2] kubectl --namespace=<my_namespace> --context=<cluster_name> delete pvc data-avirals-july19-1-devel-0 data-avirals-july19-1-devel-1
可能有一些更短的方法,但是这个方法会过滤与部署名称MY_DEPLOYMENT_NAME
关联的所有 pvc。 其他pvc
(不与同一部署关联)不会被触及。
for volume in $(kubectl get deployments MY_DEPLOYMENT_NAME -o jsonpath='{.spec.template.spec.volumes[*].name}');
do
kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"\n"}' ;
# kubectl delete pvc "$(kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"\n"}')"
done
笔记:
kubectl delete
命令以真正删除 pvc。 它的评论是为了保护用户不被意外删除。bash
才能使此循环工作。 解释:
以下命令将列出名为MY_DEPLOYMENT_NAME
的部署所使用的卷
kubectl get deployments MY_DEPLOYMENT_NAME -o jsonpath='{.spec.template.spec.volumes[*].name}'
现在,我们将遍历这些卷,以找出这些卷使用的claim
是什么。 这是我检查claimRef
部分完成的。 这是通过以下方式完成的:
kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"\n"}'
您可以使用以下命令一次删除所有 pvc:
kubectl --namespace=<my_namespace> delete pvc --all
之后应该删除 PV,但这可能需要一些时间。 此外,使用此命令要非常小心,并确保您正在删除您打算删除的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.