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

Command to delete all pods in all kubernetes namespaces

查看文档后,有一个 API 删除单个 pod 的调用,但是有没有办法删除 all pods所有命名空间?

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

这里有一些势均力敌的比赛。

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

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

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  delete pod /e'

解释:

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

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

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

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

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

kubectl delete -n *NAMESPACE deployment *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)插件可能对你有用,它可以让你对选定的资源进行批量操作。这是删除pods

的命令
 ' kubectl bulk pods -n namespace delete '

详情请见this

我创建了一个 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、deployments,...)

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


注意 all 不包括:

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

为了完美清理,

  • 您可以使用其他工具(例如 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

希望对某人有用。

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

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

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

如果您有多个崩溃或错误的 pod 并且您想要删除它们

kubectl delete pods --all -n |杰普

删除 pv 的步骤:

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

     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
    

上面已经暗示了,但我只是想指出“--all-namespaces”的快捷方式是“-A”,它是大写的 A。HTH 某人。我已经打开了一个 PR 将这个有用的提示添加到官方 Kubernetes Cheat Sheet.