如何在Kubernetes作业中从所有pod获取日志



我正在使用Kubernetes作业来运行测试;shell脚本运行作业并具有设置/拆卸逻辑。该作业具有

  • restartPolicy: Never
  • backoffLimit: 2

这意味着如果作业失败,它将制作一个新的pod并重试一次。

作业完成后,我想转储作业中所有pod的日志。但当我做时

kubectl logs job/my-test

我只从其中一个pod获取日志,前缀为Found 2 pods, using pod/my-test-ntb4w

--all-containers=true标志并没有为我提供来自所有pod的日志。

如何在shell脚本中从作业中的所有pod获取日志?

作为参考,请查看kubectl logs-帮助:

-- kubectl logs job/my-job
# Return snapshot logs from first container of a job named hello
kubectl logs job/hello -- will provide output only for one pod/container

-- while using (either label or selector) it gives you more flexible way to deal with your resources
# -l, --selector='': Selector (label query) to filter on.

或者,您可以添加自定义标签或使用工作描述中的_标签/选择器

labels:
controller-uid: 55d965d0-0016-42ba-b4f5-120c1a78798b
job-name: pi

您可以在文档中找到相当类似的情况:一次检查所有作业的输出并运行示例作业。

在使用bash时,您也可以尝试:

pods=$(kubectl get pods --selector=job-name=pi --output=jsonpath='{.items[*].metadata.name}')
for pod in $pods ; do kubectl logs $pod ; done 

对于处理k8s对象非常有用的命令:

kubectl get pods,jobs --show-labels
NAME           READY   STATUS      RESTARTS   AGE   LABELS
pod/pi-25vcd   0/1     Completed   0          97s   controller-uid=55d965d0-0016-42ba-b4f5-120c1a78798b,job-name=pi

使用--selector而不仅仅是job/my-test似乎可以从所有pod中获取日志:

kubectl logs --selector job-name=my-test

最新更新