【问题标题】:How do I delete all the disks in a deployment in Kubernetes?如何删除 Kubernetes 部署中的所有磁盘?
【发布时间】:2021-10-04 13:13:31
【问题描述】:

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

我知道删除 pvc 的命令,但这涉及使用命令 [1] 获取所有 pvc,然后手动复制粘贴 [2] 属于部署集的那些。

如果我想以编程方式执行此操作,我应该使用 Kubernetes Python 客户端的哪个 API 或 cli 命令?

我正在使用 GKE。

我尝试阅读Python client documentation,但无法推断出如何执行此任务。

[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

【问题讨论】:

    标签: python python-3.x kubernetes google-kubernetes-engine


    【解决方案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"}' 
    

    【讨论】:

    • 我认为 nginx 应该从你的命令中删除,因为你已经提到了 MY_DEPLOYMENT_NAME。另外,我没有得到任何输出。
    • 对不起,我忘了删除nginx。现在解决了。
    • kubectl get deployments MY_DEPLOYMENT_NAME -o jsonpath='{.spec.template.spec.volumes[*].name}' 返回什么?如果返回为空,那么for loop 将什么也不做......这也意味着没有为部署配置卷。
    【解决方案2】:

    您可以使用以下命令一次删除所有 pvc:

    kubectl --namespace=<my_namespace> delete pvc --all 
    

    之后应该删除 PV,但可能需要一些时间。此外,请务必小心使用此命令,并确保您要删除您想要删除的内容。

    【讨论】:

    • 不,这行不通,因为它会删除 namespace 中的所有 PVC,我的目标是删除 deployment 中的所有 PVC。
    猜你喜欢
    • 2020-01-03
    • 2020-07-18
    • 2020-04-26
    • 2021-06-07
    • 1970-01-01
    • 2021-04-20
    • 2019-11-10
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多