首页 > 解决方案 > 如何删除 Kubernetes 部署中的所有磁盘?

问题描述

我想删除附加到自定义部署的所有持久卷声明。首先,我删除了部署本身,该部署会删除所有 pod,但不会删除磁盘。

我知道删除 pvcs 的命令,但这涉及使用命令 [1] 获取所有 pvcs,然后手动复制粘贴 [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

标签: pythonpython-3.xkubernetesgoogle-kubernetes-engine

解决方案


可能有一些更短的方法,但是这种方法会过滤所有与部署名称关联的 pvc MY_DEPLOYMENT_NAME。其他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"}' 

推荐阅读