代码之家  ›  专栏  ›  技术社区  ›  online

如何一次性删除Kubernetes中的所有资源?

  •  144
  • online  · 技术社区  · 7 年前

    包括:

    • 部署
    • 乔布斯
    • 豆荚
    • 复制集
    • 复制控制器
    • 有状态集
    • ...

    如果有replicationcontroller,当删除一些部署时,它们将重新生成。有没有办法让kubenetes回到初始化状态?

    7 回复  |  直到 7 年前
        1
  •  304
  •   victortv    5 年前

    方法1 :删除当前命名空间(通常是 违约 kubectl delete :

    kubectl delete all --all
    

    all 指所有资源类型,如吊舱、部署、服务等。 --all 用于删除该资源类型的每个对象,而不是使用其名称或标签指定它。

    要删除某个命名空间中的所有内容,请使用-n标志:

    kubectl delete all --all -n {namespace}
    

    方法2

    kubectl delete namespace {namespace}
    kubectl create namespace {namespace}
    

    笔记 @Marcus ): 全部的 does not refers to every kubernetes object ,例如管理级资源(限制、配额、策略、授权规则)。如果您真的想确保删除所有内容,最好删除名称空间并重新创建它。另一种方法是使用 kubectl api-resources 要获取所有资源类型, as seen here :

    kubectl delete "$(kubectl api-resources --namespaced=true --verbs=delete -o name | tr "\n" "," | sed -e 's/,$//')" --all
    
        2
  •  54
  •   Muhammet Madraimov Taqi Vaheed    4 年前

    Kubernetes命名空间将是您的完美选择。您可以轻松创建命名空间资源。

    kubectl create -f custom-namespace.yaml

    $  apiVersion: v1
        kind: Namespace
        metadata:
          name:custom-namespace
    

    如果要删除所有这些资源,只需删除自定义命名空间。通过删除自定义命名空间,将删除所有其他资源。如果没有它,ReplicaSet可能会在删除现有pod时创建新的pod。

    要使用名称空间,需要在k8s命令中添加--Namespace标志。

    例如:

    kubectl create -f deployment.yaml --namespace=custom-namespace

    您可以在自定义命名空间中列出所有pod。

    kubectl get pods --namespace=custom-namespace

        3
  •  19
  •   Dan    3 年前

    您还可以通过附加的标签删除Kubernetes资源。例如,假设以下标签附加到所有资源

    metadata:
      name: label-demo
      labels:
        env: dev
        app: nginx
    

    现在只需执行以下命令

    deleting resources using app label
    $ kubectl delete pods,rs,deploy,svc,cm,ing -l app=nginx
    
    deleting resources using envirnoment label
    $ kubectl delete pods,rs,deploy,svc,cm,ing -l env=dev
    
        4
  •  4
  •   Xos73    3 年前

    首先备份命名空间资源,然后删除使用get all命令找到的所有资源:

    kubectl get all --namespace={your-namespace} -o yaml > {your-namespace}.yaml
    kubectl delete -f {your-namespace}.yaml
    

    然而,集群中仍然存在一些资源。 检查

    kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found --namespace {your-namespace}
    

    如果确实要完全删除命名空间,请执行以下操作:

    kubectl delete namespace {your-namespace}
    

    (使用客户端v1.23.1和服务器v1.22.3测试)

        5
  •  3
  •   adelmoradian    3 年前

    也可以试试 kubectl delete all --all --all-namespaces

    all 指所有资源

    --all

    --all-namespaces 在所有名称空间中

        6
  •  1
  •   Om Prakash    3 年前

    如果要删除群集中的所有K8S资源。然后,最简单的方法是删除整个命名空间。

    kubectl delete ns <name-space>
    
        7
  •  -1
  •   Suraj Rao Raas Masood    3 年前
    kubectl delete deploy,service,job,statefulset,pdb,networkpolicy,prometheusrule,cm,secret,ds -n namespace -l label