pla*_*oom 2 shell kubernetes kubectl
是否有办法从运行 awk 和 xargs 组合等动态命令的特定命名空间中的 pod 获取所有日志?
kubectl get pods | grep Running | awk '{print $1}' | xargs kubectl logs | grep value
Run Code Online (Sandbox Code Playgroud)
我已尝试上面的命令,但它失败了,就像kubectl logs
缺少 pod 名称一样:
错误:预期为“日志 [-f] [-p] (POD | 类型/名称) [-c CONTAINER]”。POD 或 TYPE/NAME 是日志命令的必需参数请参阅“kubectl logs -h”以获取帮助和示例
您对如何从 Running pod 获取所有日志有什么建议吗?
想想你的管道正在做什么:
该命令将单个kubectl logs
pod 名称作为参数,但通过使用您可以向它传递多个pod 名称。自由使用命令来调试管道;如果我当前的命名空间中有这些 pod:xargs
echo
$ kubectl get pods -o custom-columns=name:.metadata.name
name
c069609c6193930cd1182e1936d8f0aebf72bc22265099c6a4af791cd2zkt8r
catalog-operator-6b8c45596c-262w9
olm-operator-56cf65dbf9-qwkjh
operatorhubio-catalog-48kgv
packageserver-54878d5cbb-flv2z
packageserver-54878d5cbb-t9tgr
Run Code Online (Sandbox Code Playgroud)
然后运行这个命令:
kubectl get pods | grep Running | awk '{print $1}' | xargs echo kubectl logs
Run Code Online (Sandbox Code Playgroud)
生产:
kubectl logs catalog-operator-6b8c45596c-262w9 olm-operator-56cf65dbf9-qwkjh operatorhubio-catalog-48kgv packageserver-54878d5cbb-flv2z packageserver-54878d5cbb-t9tgr
Run Code Online (Sandbox Code Playgroud)
为了做你想做的事,你需要安排kubectl logs
使用一个参数多次调用。您可以通过添加-n1
到xargs
命令行来做到这一点。保留echo
命令,运行:
kubectl get pods | grep Running | awk '{print $1}' | xargs -n1 echo kubectl logs
Run Code Online (Sandbox Code Playgroud)
让我们:
kubectl logs catalog-operator-6b8c45596c-262w9
kubectl logs olm-operator-56cf65dbf9-qwkjh
kubectl logs operatorhubio-catalog-48kgv
kubectl logs packageserver-54878d5cbb-flv2z
kubectl logs packageserver-54878d5cbb-t9tgr
Run Code Online (Sandbox Code Playgroud)
这样看起来比较合理。如果我们删除 echo 并运行:
kubectl get pods | grep Running | awk '{print $1}' | xargs -n1 kubectl logs | grep value
Run Code Online (Sandbox Code Playgroud)
然后你就会得到你想要的结果。您可能需要添加--prefix
参数,kubectl logs
以便知道哪个 pod 生成了匹配:
kubectl get pods | grep Running | awk '{print $1}' | xargs -n1 kubectl logs --prefix | grep value
Run Code Online (Sandbox Code Playgroud)
与您的问题没有直接关系,但您可能会失去它grep
:
kubectl get pods | awk '/Running/ {print $1}' | xargs -n1 kubectl logs --prefix | grep value
Run Code Online (Sandbox Code Playgroud)
甚至失去awk
:
kubectl get pods --field-selector=status.phase==Running -o name | xargs -n1 kubectl logs --prefix | grep value
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1520 次 |
最近记录: |