有没有一种便捷的方法可以将多个 kubectl 命令相互传递?

问题描述 投票:0回答:3

我正在寻找一种方法来做类似的事情

kubectl get pods -l app=foo | kubectl delete

我认为这将是一次处理多个资源的好方法,但我找不到一种相当简单的方法来做到这一点。

kubernetes pipe kubectl
3个回答
6
投票

您可以使用命令替换:

Kubectl delete $(kubectl get pod -l app=foo -o name)

2
投票

kubectl get -o name
将以
kind/name
格式逐行写出资源名称。您可以将其与 xargs(1) 等工具结合使用,按照您的建议运行管道。

kubectl get job -l app=foo -o name | xargs kubectl delete

# help we're using the long-format label names and I don't remember
# what goes after `kubectl get -l`
kubectl get job -o name | grep foo | xargs kubectl delete

对于您显示的非常具体的命令,我经常发现使用

kubectl rollout restart
来触发部署的 重新部署序列 更容易,而无需实际进行任何更改。这将删除 Deployment 管理的所有 pod,但前提是先创建新 pod;这样你就可以得到重新启动行为不当的 Pod 的效果,但实际上并没有关闭整个应用程序。

kubectl rollout restart deployment/foo

0
投票

最简单的方法是

kubectl get pods -l app=foo -o yaml | kubectl delete -f -

第一部分将获取所有带有标签

app: foo
的 pod,并将它们以 yaml 格式输出到 stdout。然后我们将该输出通过管道传输到
kubectl delete -f
,其中
-
stdin 的同义词。

© www.soinside.com 2019 - 2024. All rights reserved.