当我在下面使用时,它会在从命令行匹配模式后删除正在运行的 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-react
和app=something-graphql
.如果您想对这些应用程序进行分类,例如,如果您的"超集"变化,您可以添加一个标签app-type=react
并app-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