無論如何,是否可以從運行動態命令(如 awk 和 xargs 的組合)的特定命名空間中的 pod 獲取所有日志?
kubectl get pods | grep Running | awk '{print $1}' | xargs kubectl logs | grep value
我已經嘗試了上面的命令,但它失敗了,就像kubectl logs缺少 pod 名稱:
錯誤:預期“日志 [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]”。POD 或 TYPE/NAME 是 logs 命令的必需引數。有關幫助和示例,請參閱“kubectl logs -h”
您對如何從 Running pod 獲取所有日志有任何建議嗎?
uj5u.com熱心網友回復:
想想你的管道在做什么:
該命令將單個kubectl logspod 名稱作為引數,但通過您的使用,您將傳遞多個pod 名稱。自由使用該命令來除錯您的管道;如果我在當前的命名空間中有這些 pod:xargsecho
$ 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
然后運行這個命令:
kubectl get pods | grep Running | awk '{print $1}' | xargs echo kubectl logs
產生:
kubectl logs catalog-operator-6b8c45596c-262w9 olm-operator-56cf65dbf9-qwkjh operatorhubio-catalog-48kgv packageserver-54878d5cbb-flv2z packageserver-54878d5cbb-t9tgr
為了做你想做的事,你需要安排kubectl logs用一個引數多次呼叫。您可以通過添加-n1到xargs命令列來做到這一點。保留echo命令,運行:
kubectl get pods | grep Running | awk '{print $1}' | xargs -n1 echo kubectl logs
讓我們:
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
這樣看起來更合理。如果我們放棄回聲并運行:
kubectl get pods | grep Running | awk '{print $1}' | xargs -n1 kubectl logs | grep value
然后你會得到你想要的結果。您可能需要添加--prefix引數,kubectl logs以便知道哪個 pod 生成了匹配項:
kubectl get pods | grep Running | awk '{print $1}' | xargs -n1 kubectl logs --prefix | grep value
與您的問題沒有直接關系,但您可能會丟失grep:
kubectl get pods | awk '/Running/ {print $1}' | xargs -n1 kubectl logs --prefix | grep value
甚至失去awk:
kubectl get pods --field-selector=status.phase==Running -o name | xargs -n1 kubectl logs --prefix | grep value
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/530819.html
