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


154

查看文档后,可以通过API调用删除“ a”吊舱,但是有没有办法杀死所有命名空间中的所有吊舱?

Answers:


281

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

这是一些接近的比赛。

您可以使用以下命令删除单个命名空间中的所有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

1
在当前版本的k8s中,命令“ kubectl delete --all名称空间”不再删除系统内容...例如:名称空间“ default”被禁止:此名称空间不得删除
KaiWähner

这会删除部署还是仅删除Pod?
Sinaesthetic '18年

1
kubectl delete pods --all --all-namespaces似乎有时可以工作(不确定是什么原因导致它在某些环境下而不在其他环境下工作)。它在我的堡垒主机上运行良好,但在笔记本电脑上却无法运行。两者都运行debian并都运行相同版本的kubectl(集群版本1.13)
Patrick W

@KaiWähner,如果我没有记错的话,与k8s系统相关的内容都在kube-system名称空间中。在消息示例中,我可以看到default名称空间。是否kube-system已使用附带的命令删除?
乔治·瑟雷斯

79
kubectl delete daemonsets,replicasets,services,deployments,pods,rc --all

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


4
错了 这只会在当前名称空间中删除。
帮助

添加-n标志,但抱歉一次
只能

1
您还缺少ing删除入口的权限
Druska)

2
您可能还想添加“ statefulset”(如果适用)。否则,即使在执行上述命令后,它也会继续分叉新的Pod!
buch11 '19

15

您只需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获取所有命名空间中所有容器的列表。
  2. 使用--no-headers=true选项隐藏标题。
  3. 使用s命令of sed提取分别代表namespace和的前两个词pod's name,然后组合delete使用它们命令。
  4. 最终delete命令就像: kubectl --namespace kube-system delete pod heapster-eq3yw
  5. 使用command 的e修饰符s执行上面汇编的命令,它将完成实际的delete工作。

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


你也可以下降--all-namespaces,如果你不想在删除荚kube-system命名空间
ianstarz

仅删除少量Pod的命令是什么?示例:我旋转了20个Pod,现在只想保留1个
。– Jason

10

您可以简单地运行

kubectl delete all --all --all-namespaces
  • 第一种all表示常见的资源种类(吊舱,副本集,部署等)

    • kubectl get all == kubectl get pods,rs,deployments, ...
  • 第二种--all方法选择所选种类的所有资源


请注意,其中all不包括:

  • 非命名空间的资源(例如clusterrolebindings,clusterroles等)
  • 配置图
  • 角色绑定
  • 角色
  • 机密
  • ...

为了完美清理

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

2

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

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


0

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

kubectl delete -n *NAMESPACE deployment *DEPLOYMENT

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

kubectl get deployments --all-namespaces

0

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

 ' kubectl bulk pods -n namespace delete '

您可以在查看详细信息


0

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

0

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

您可以使用以下提及的内容:

kubectl删除名称空间k8sdemo-app

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.