繁体   English   中英

如何删除 Kubernetes 部署中的所有磁盘?

[英]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

笔记:

  1. 取消注释kubectl delete命令以真正删除 pvc。 它的评论是为了保护用户不被意外删除。
  2. 需要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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM