使用模式匹配或通配符删除 Kubenetes POD

pau*_*ldx 17 kubernetes kubectl kubernetes-pod

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

kubectl get pods -n bi-dev --no-headers=true | awk '/group-react/{print $1}' | xargs kubectl delete -n bi-dev pod
Run Code Online (Sandbox Code Playgroud)

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

 alias kdpgroup="kubectl get pods -n bi-dev --no-headers=true | awk '/group-react/{print $1}'|  kubectl delete -n bi-dev pod"
Run Code Online (Sandbox Code Playgroud)

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

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

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

~ $ . ./.bash_profile
-bash: alias: }| xargs  kubectl delete -n bi-dev pod: not found
~ $
Run Code Online (Sandbox Code Playgroud)

我是否缺少使用 Pattern Match 或 Wilcard 删除 POD 的内容?

谢谢

Jon*_*nas 22

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

使用 Kubernetes 时,更常见的是使用标签选择器。例如,如果您部署了一个应用程序,您通常会在 pod 上设置标签 eg app=my-app,然后您可以使用 eg 获取 pod kubectl get pods -l app=my-app

使用这种方法,可以更轻松地删除您感兴趣的 pod,例如

kubectl delete pods -l app=my-app
Run Code Online (Sandbox Code Playgroud)

或使用命名空间

kubectl delete pods -l app=my-app -n default
Run Code Online (Sandbox Code Playgroud)

查看有关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)'
Run Code Online (Sandbox Code Playgroud)

  • 但这并没有回答我的问题...我有一些 pod 以“superset-react”和“superset-graphql”的名称运行,我想搜索我的通配符超集并在一个命令中删除它们,然后将其放入命令放入 .bash_profile 中,这样我就不需要每次都输入。我怎样才能做到这一点?你的答案没有解决这个问题。 (5认同)
  • 这是k8s风格的答案。 (2认同)

Kee*_*asa 7

正如问题所问,这是关于使用通配符。让我举例说明使用通配符删除 pod。

删除包含“应用程序”一词的 Pod

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

kubectl get pods -n <namespace> --no-headers=true | awk '/application/{print $1}'| xargs  kubectl delete -n <namespace> pod
Run Code Online (Sandbox Code Playgroud)

这将给出如下响应。它将打印出已删除的 pod。

pod "sre-application-7fb4f5bff9-8crgx" deleted
pod "sre-application-7fb4f5bff9-ftzfd" deleted
pod "sre-application-7fb4f5bff9-rrkt2" deleted
Run Code Online (Sandbox Code Playgroud)

删除包含“应用程序”或“服务”的 Pod

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

kubectl get pods -n <namespace> --no-headers=true | awk '/application|service/{print $1}'| xargs  kubectl delete -n <namespace> pod
Run Code Online (Sandbox Code Playgroud)

这将给出如下响应。它将打印出已删除的 pod。

pod "sre-application-7fb4f5bff9-8crgx" deleted
pod "sre-application-7fb4f5bff9-ftzfd" deleted
pod "sre-service-7fb4f5bff9-rrkt2" deleted
Run Code Online (Sandbox Code Playgroud)


Mr.*_*ler 5

您只需要在 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"
Run Code Online (Sandbox Code Playgroud)

我知道转义很无聊,如果你想避免它,你可以在 .bash_profile 中将其用作函数:

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