【问题标题】:Why 'kubectl get nodes' not working after xargs?为什么在 xargs 之后“kubectl get nodes”不起作用?
【发布时间】:2021-10-02 08:10:06
【问题描述】:

当我在 iterm2 (macOS) 中尝试这个时,它可以工作。

kubectl get nodes node1 node2 --show-labels

当我尝试这个时,它起作用了。

echo "node1" | xargs -I{} kubectl get nodes {} --show-labels

但是当我尝试这个时,它不起作用。

echo "node1 node2" | xargs -I{} kubectl get nodes {} --show-labels

我认为空格有问题,但我无法解决。 你能帮帮我吗?

【问题讨论】:

  • 这里的最终结果应该是什么?

标签: macos kubectl xargs


【解决方案1】:

默认情况下,xargs 会将尽可能多的参数填充到单个命令中。 (我在你原来的xargs 调用中添加了echo,所以我们看看发生了什么。)

$ echo "node1 node2 node3 node4" | xargs -I{} echo kubectl get nodes {} --show-labels
kubectl get nodes node1 node2 node3 node4 --show-labels

如果您希望每个选择器都有自己的命令,则需要添加 -n1

$ echo "node1 node2 node3 node4" | xargs -n1 -I{} echo kubectl get nodes {} --show-labels
kubectl get nodes node1 --show-labels
kubectl get nodes node2 --show-labels
kubectl get nodes node3 --show-labels
kubectl get nodes node4 --show-labels

【讨论】:

  • 感谢您的回复,但是 kubectl 提供了使用空间的多重搜索,例如 'kubectl get nodes node1 node2 --show-labels' 这样,我们只能发送一次请求,但 -n1 请求 4 次..
  • 是的,那么你原来的问题是什么?
  • 我解决了!没有 xrags -I{} 选项,它可以工作!回声“节点1节点2”| xargs kubectl get nodes --show-labels 在想同时了解pod信息和节点信息的时候真的很有帮助。
【解决方案2】:

老实说,您使用此解决方案试图实现的目标还不够清楚 - 您可以轻松使用基于 kubectl 的解决方案,而无需触摸 xargs。但是,如果您能够具体说明您的真正问题 - 也许会更容易帮助您解决问题。


您可以在此处使用 2 个选项:

  • 使用 xargs

    echo node1,node2,node3,...nodeN | tr -d '\n' | xargs -I{} -d "," kubectl get nodes {} --show-labels

  • 没有 xargs

    for node in $(kubectl get nodes -o name| cut -d "/" -f2); do kubectl get nodes $node --show-labels; done

【讨论】:

  • 我解决了!没有 xrags -I{} 选项,它可以工作!回声“节点1节点2”| xargs kubectl get nodes --show-labels 在想同时了解pod信息和节点信息的时候真的很有帮助。
猜你喜欢
  • 2021-11-05
  • 2019-04-02
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
相关资源
最近更新 更多