Kubernetes POD 删除与模式匹配或通配符



当我在下面使用时,它会在从命令行匹配模式后删除正在运行的 POD:

kubectl get pods -n bi-dev --no-headers=true | awk '/group-react/{print $1}' | xargs kubectl delete -n bi-dev pod

但是,当我将此命令用作.bash_profile中的别名时,它不会执行. 这是我如何定义的:

alias kdpgroup="kubectl get pods -n bi-dev --no-headers=true | awk '/group-react/{print $1}'|  kubectl delete -n bi-dev pod"

当按如下方式执行此操作时,我在命令行中出现以下错误:

~ $ kdpgroup
error: resource(s) were provided, but no name, label selector, or --all flag specified

当我在.bash_profile中定义它时,我得到这个:

~ $ . ./.bash_profile
-bash: alias: }| xargs  kubectl delete -n bi-dev pod: not found
~ $

我是否缺少使用模式匹配或Wilcard删除POD的内容?

谢谢

我是否缺少使用模式匹配或 Wilcard 删除 POD 的内容?

使用 Kubernetes 时,使用标签和选择器更为常见。 例如,如果您部署了一个应用程序,您通常会在 Pod 上设置一个标签,例如app=my-app然后你可以得到豆荚,例如kubectl get pods -l app=my-app.

使用此 aproach,可以更轻松地删除您感兴趣的 pod,例如

kubectl delete pods -l app=my-app

或带有命名空间

kubectl delete pods -l app=my-app -n default

查看有关 Kubernetes 标签和选择器的更多信息

基于集的选择器

我有一些 pod 以"superset-react"和"superset-graphql"的名义运行,我想搜索我的通配符超集并在一个命令中删除它们

我建议这些豆荚有标签app=something-reactapp=something-graphql.如果您想对这些应用程序进行分类,例如,如果您的"超集"变化,您可以添加一个标签app-type=reactapp-type=graphql所有这些类型的应用程序。

然后,您可以使用以下命令删除两种应用类型的 Pod:

kubectl delete pods -l 'app-type in (react, graphql)'

正如问题所问,这是关于使用通配符的。让我举一些使用通配符删除 pod 的示例。

删除包含"应用程序"一词的 Pod。

<namespace>替换为要从中删除 Pod 的命名空间。

kubectl get pods -n <namespace> --no-headers=true | awk '/application/{print $1}'| xargs  kubectl delete -n <namespace> pod

这将给出如下所示的响应。它将打印出已删除的豆荚。

pod "sre-application-7fb4f5bff9-8crgx" deleted
pod "sre-application-7fb4f5bff9-ftzfd" deleted
pod "sre-application-7fb4f5bff9-rrkt2" deleted

删除包含"应用程序"或"服务"的 Pod。

<namespace>替换为要从中删除 Pod 的命名空间。

kubectl get pods -n <namespace> --no-headers=true | awk '/application|service/{print $1}'| xargs  kubectl delete -n <namespace> pod

这将给出如下所示的响应。它将打印出已删除的豆荚。

pod "sre-application-7fb4f5bff9-8crgx" deleted
pod "sre-application-7fb4f5bff9-ftzfd" deleted
pod "sre-service-7fb4f5bff9-rrkt2" deleted

你只需要在awk命令中转义'$1'变量:

alias kdpgroup="kubectl get pods -n bi-dev --no-headers=true | awk '/group-react/{print $1}'| xargs kubectl delete -n bi-dev pod"

我知道逃避很无聊,如果你想避免它,你可以.bash_profile中用作一个功能:

kdpgroup() {
kubectl get pods -n default --no-headers=true | awk '{print $1}' | xargs kubectl delete pod -n default
}

基于@keetSugathadasa答案的变量的鲁棒方法:

ns="optional-namespace"
regex="pattern"
kubectl get pods ${ns:+ -n $ns} --no-headers | awk /${regex}/'{print $1}'  
| xargs kubectl delete ${ns:+ -n $ns} pod

使用 grep,您可以像这样过滤关键字并删除匹配的 pod 名称,如下所示

kubectl get pods   --no-headers=true | awk '{print $1}' | grep keyword |  xargs kubectl delete pod

最新更新