【问题标题】:Command to delete all pods in all kubernetes namespaces删除所有 kubernetes 命名空间中的所有 pod 的命令
【发布时间】:2016-02-04 04:48:17
【问题描述】:

在查看文档时,有一个 API 调用来删除单个 pod,但是有没有办法删除所有命名空间中的所有个 pod?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    没有命令可以完全按照您的要求进行操作。

    这里有一些接近的比赛。

    在运行这些命令之前要小心。如果您使用多个集群,请确保您连接到正确的集群。考虑跑步。 kubectl config view 第一。

    您可以使用以下命令删除单个命名空间中的所有 pod:

    kubectl delete --all pods --namespace=foo
    

    您还可以删除命名空间中的所有部署,这将删除与命名空间对应的部署附加的所有 pod

    kubectl delete --all deployments --namespace=foo
    

    您可以使用以下命令删除所有命名空间和每个命名空间中的每个对象(但不能删除未命名空间的对象,如节点和某些事件):

    kubectl delete --all namespaces
    

    但是,后一个命令可能不是您想要执行的操作,因为它会删除 kube-system 命名空间中的内容,从而使您的集群无法使用。

    此命令将删除除 kube-system 之外的所有命名空间,这可能很有用:

    for each in $(kubectl get ns -o jsonpath="{.items[*].metadata.name}" | grep -v kube-system);
    do
      kubectl delete ns $each
    done
    

    【讨论】:

    • 对于当前版本的k8s,命令“kubectl delete --all namespaces”不再删除系统内容......它说例如:命名空间“默认”被禁止:这个命名空间可能不会被删除
    • 这是删除部署还是仅删除 pod?
    • kubectl delete pods --all --all-namespaces 似乎有时会起作用(不确定是什么导致它在某些环境中起作用而在其他环境中不起作用)。它适用于我的堡垒主机,但不适用于笔记本电脑。都运行 debian 并且都运行相同版本的 kubectl(集群版本 1.13)
    • kube-system、kube-public和default不会被kubectl delete --all namespaces删除
    • @antoineMoPa 根据您的建议添加了警告。
    【解决方案2】:
    kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all --all-namespaces
    

    也摆脱它们讨厌的复制控制器。

    【讨论】:

    • 这是错误的。这只会在当前命名空间中删除。
    • 添加 -n 标志,但很抱歉,这是一次一个 pod,而不是一次全部
    • 您缺少ing 也删除入口
    • 您可能还想添加“statefulset”(如果适用)。否则,即使您运行上述命令,它也会继续分叉新的 pod!
    【解决方案3】:

    你可以简单地运行

    kubectl delete all --all --all-namespaces
    
    • 第一个all 表示常见的资源种类(pod、replicasets、deployments...)

      • kubectl get all == kubectl get pods,rs,deployments, ...
    • 第二个--all表示选择所有被选择种类的资源


    注意all不包括:

    • 非命名空间资源(例如,clusterrolebindings、clusterroles 等)
    • 配置映射
    • 角色绑定
    • 角色
    • 秘密
    • ...

    为了完美收拾,

    • 您可以使用其他工具(例如 Helm、Kustomize 等)
    • 您可以使用命名空间。
    • 您可以在创建资源时使用标签。

    【讨论】:

    • 这是完美的解决方案!
    • 这是个超级杀手!
    • 这个答案应该被投票!像魅力一样工作!
    【解决方案4】:

    您只需要sed 即可:

    kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(\S+)\s+(\S+).*/kubectl --namespace \1 delete pod \2/e'
    

    解释:

    1. 使用命令kubectl get pods --all-namespaces获取所有命名空间中的所有pod列表。
    2. 使用--no-headers=true 选项隐藏标题。
    3. 使用seds命令获取前两个单词,分别代表namespacepod's name,然后使用它们组装delete命令。
    4. 最后的delete 命令就像: kubectl --namespace kube-system delete pod heapster-eq3yw
    5. 使用s 命令的e 修饰符来执行上面组装的命令,这将执行实际的delete 工作。

    为避免删除kube-system命名空间中的pod,只需在sed命令前添加grep -v kube-system以排除kube-system命名空间。

    【讨论】:

    • 如果您不想删除 kube-system 命名空间中的 pod,也可以直接删除 --all-namespaces
    • 只删除几个 pod 的命令是什么?示例:我旋转了 20 个 Pod,现在希望只保留 1 个。
    • 您的 sed 在 Mac 上无法使用,但原则上可以使用。
    【解决方案5】:

    K8s 完全基于命名空间的基础。如果你想释放与指定命名空间相关的所有资源。

    你可以使用下面提到的:

    kubectl delete namespace k8sdemo-app
    

    【讨论】:

      【解决方案6】:

      我尝试了此处列出的答案中的命令,但 pod 卡在了终止状态。
      我发现下面的命令可以删除特定命名空间中的所有 pod,如果卡在终止状态或者您无法删除它,那么您可以强制删除 pod。

      kubectl delete pods --all --grace-period=0 --force --namespace namespace
      

      希望它对某人有用。

      【讨论】:

        【解决方案7】:

        仅删除所有命名空间中的所有 POD(重新启动部署)

         kubectl get pod -A -o yaml | kubectl delete -f -
        

        【讨论】:

          【解决方案8】:

          这是一个可以用 grep 扩展以按名称过滤的单行代码。

          kubectl get pods -o jsonpath="{.items[*].metadata.name}" | \
          tr " " "\n" | \
          xargs -i -P 0 kubectl delete pods {}
          

          【讨论】:

          • kubectl get pods --selector=app="${DEPLOYMENT_NAME}" -o=jsonpath='{.items[*].metadata.name}' | tr " " "\n" | xargs -n 1 kubectl delete pod
          【解决方案9】:

          您可以使用kubectl delete pods -l dev-lead!=carisa 或您拥有的标签。

          【讨论】:

            【解决方案10】:
            kubectl delete po,ing,svc,pv,pvc,sc,ep,rc,deploy,replicaset,daemonset --all -A
            

            【讨论】:

            【解决方案11】:

            如果您已经有重新创建的 pod,请考虑先删除所有部署

            kubectl delete -n *NAMESPACE deployment *DEPLOYMENT
            

            只需将NAMSPACE和DEPLOYMENT替换成对应的,就可以通过如下命令获取所有deployment信息

            kubectl get deployments --all-namespaces
            

            【讨论】:

              【解决方案12】:

              Kubectl bulk(krew 上的批量操作)插件可能对您有用,它为您提供对选定资源的批量操作。这是删除 pod 的命令

               ' kubectl bulk pods -n namespace delete '
              

              您可以在this查看详情

              【讨论】:

                【解决方案13】:

                我创建了一个 python 代码来删除命名空间中的所有内容

                delall.py

                import json,sys,os;
                
                obj=json.load(sys.stdin);
                for item in obj["items"]:
                        os.system("kubectl delete " + item["kind"] + "/" +item["metadata"]["name"] + " -n yournamespace")
                

                然后

                kubectl get all -n kong -o json | python delall.py
                

                【讨论】:

                  【解决方案14】:

                  如果您有多个 pod 崩溃或出错,并且您想删除它们

                  kubectl 删除 pod --all -n |杰普

                  【讨论】:

                    【解决方案15】:

                    删除pv的步骤:

                    1. 删除与该 PV 相关的所有部署和 pod 或资源

                       kubectl delete --all deployment -n namespace
                      
                       kubectl delete --all pod -n namespace
                      
                    2. 编辑 pv

                       kubectl edit pv pv_name  -n namespace
                      
                       remove kubernetes.io/pv-protection
                      
                    3. 删除pv

                       kubectl delete pv pv_name  -n namespace
                      

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2012-03-08
                      • 2020-08-30
                      • 2021-09-12
                      • 2012-01-09
                      • 1970-01-01
                      • 2023-03-21
                      • 2020-01-24
                      相关资源
                      最近更新 更多