仅在Kubernetes名称空间为空时才删除它吗?

时间:2020-07-15 02:01:10

标签: kubernetes kubernetes-helm

我正在使用Helm将应用程序的多个“组件”部署到单个命名空间中,并使用Jenkins触发创建和销毁作业。似乎我无法使用Helm删除名称空间,因此我只想使用Kubernetes命令。

但是,似乎如果我使用kubectl delete namespace,它将强行销毁名称空间及其所有资源。

我只想破坏命名空间为空。有命令执行此操作吗?

4 个答案:

答案 0 :(得分:2)

我只想在名称空间为空时销毁它。有命令吗 为此吗?

没有命令可以这样做。此行为是设计使然。

我建议采用另一种方法。对于所有组件(包括名称空间),您都应在版本控制系统中拥有所有部署Yaml。当您要创建时,请使用kubectl create -f deployment.yaml,而当您要删除时,请使用kubectl delete -f deployment.yaml

答案 1 :(得分:1)

您可以运行kubectl get all --namespace YOUR_NAMESPACE,然后根据输出调用删除命名空间

答案 2 :(得分:0)

没有一个简单的命令可以在删除之前检查名称空间,它需要一些kubectl脚本或kube API客户端。

从讨论get all的局限性liggit provides的github问题开始,并添加了一些jq处理,您可以得到一个(slow)命令,该命令出错,除非成功地找到所有资源类型都是空的(没有{{ 1}}):

items

答案 3 :(得分:0)

尝试一下,更好地遍历kube-api资源,这将在命名空间中提供每个资源列表。

$itemsCart = cart::where('token_user', session()->get('_token') )->where('id_encomenda', 0)->get();

foreach ( $itemsCart as $items ) {
        $encomendas_detalhes = new detalhes;
        $encomendas_detalhes->id_encomenda = $encomendas->id;
        $encomendas_detalhes->id_produto = ---$itemsCart->id_produto--- ;
        $encomendas_detalhes->quantidade = 2;//$itemsCart->quantidade;
        $encomendas_detalhes->total = $total;
        $encomendas_detalhes->save();
        
        $items->id_encomenda = $id_encomenda;
        $items->save();

    }

或其他方法

kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n 
<namespace>