命令删除所有kubernetes命名空间中的所有pod

在查看文档时,有一个API调用用于删除单个pod,但是否有一种方法可以删除所有命名空间中的所有 pod ?

416290 次浏览

没有命令可以完全按照你的要求去做。

以下是一些势均力敌的比赛。

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

你可以用这个命令删除一个命名空间中的所有pod:

kubectl delete --all pods --namespace=foo

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

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

你只需要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命名空间中删除pods,只需要在sed命令之前添加grep -v kube-system来排除kube-system命名空间。

kubectl delete daemonsets,replicasets,services,deployments,pods,rc,ingress --all --all-namespaces

也摆脱了烦人的复制控制器。

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

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

只需将NAMSPACE和DEPLOYMENT替换为相应的NAMSPACE和DEPLOYMENT,就可以通过以下命令获得所有部署信息

kubectl get deployments --all-namespaces

下面是一个单行程序,可以使用grep进行扩展以按名称过滤。

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

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

 ' kubectl bulk pods -n namespace delete '

你可以在中检查细节

我创建了一个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

你可以简单地跑

kubectl delete all --all --all-namespaces
  • 第一个all表示公共资源类型(pods, replicasets, deployment,…)

    • kubectl get all == kubectl get pods,rs,deployments, ...
    • 李< / ul > < / >
    • 第二个--all表示选择所选类型的所有资源


    注意all不包括:

    • 非命名空间资源(例如,clusterrolebindings, clusterroles,…)
    • configmaps
    • rolebindings
    • 角色
    • 秘密
    • ...

    为了完美地清理,

    • 你可以使用其他工具(例如Helm, Kustomize,…)
    • 您可以使用名称空间。
    • 您可以在创建资源时使用标签。
kubectl delete po,ing,svc,pv,pvc,sc,ep,rc,deploy,replicaset,daemonset --all -A

K8s完全在命名空间的基础上工作。如果要释放与指定命名空间相关的所有资源。

你可以使用下面提到的:

kubectl delete namespace k8sdemo-app

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

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

希望对别人有用。

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

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

你可以使用kubectl delete pods -l dev-lead!=carisa或其他标签。

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

Kubectl delete pods——all -n | gep

删除pv的步骤如下:

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

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

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

     kubectl delete pv pv_name  -n namespace
    

上面已经暗示过,但我只是想指出,“;——all- namespes"”的快捷方式;是“-A"那是大写的a。HTH某人。我已经打开了一个PR,将这个有用的提示添加到官方Kubernetes小抄表中。

一行命令删除所有命名空间中的所有pod。

kubectl get ns -o=custom-columns=Namespace:.metadata.name --no-headers | xargs -n1 kubectl delete pods --all -n

如果你想删除所有命名空间中的pod,只是为了让它们重新启动,并且你知道其中一些将被重新创建,我喜欢下面的for循环:

for i in $(kubectl get pods -A | awk '{print $1}' | uniq | grep -V NAMESPACE); do kubectl delete --all pods -n $i; done