Kubernetes 如何从已完成的cronjob中保留/访问自定义日志文件?

Kubernetes 如何从已完成的cronjob中保留/访问自定义日志文件?,kubernetes,openshift,Kubernetes,Openshift,我有一个cronjob,它正在完成并输出几个日志文件 我想保存这些文件,并能够在pod成功后访问它们 我发现我可以使用oclogs-f访问标准输出,但我确实需要访问日志文件 我知道Openshift 2显然有一个环境变量位置Openshift_LOG_DIR,日志文件被写入其中,但Openshift 3.5似乎没有这个位置 pod成功并完成后,我从CronJob记录和访问日志的最佳方式是什么?在作业运行到完成后,pod终止,但不会自动删除。由于它已经完成,您需要使用-a查看它。一旦您拥有了Pod

我有一个cronjob,它正在完成并输出几个日志文件

我想保存这些文件,并能够在pod成功后访问它们

我发现我可以使用
oclogs-f
访问标准输出,但我确实需要访问日志文件

我知道Openshift 2显然有一个环境变量位置Openshift_LOG_DIR,日志文件被写入其中,但Openshift 3.5似乎没有这个位置


pod成功并完成后,我从CronJob记录和访问日志的最佳方式是什么?

作业运行到完成后,
pod
终止,但不会自动删除。由于它已经完成,您需要使用
-a
查看它。一旦您拥有了
Pod
名称,
kubectl日志
就会按照您的预期工作

$ kubectl get pods -a
NAME                                    READY     STATUS      RESTARTS   AGE
curator-1499817660-6rzmf                0/1       Completed   0          28d
$ kubectl logs curator-1499817660-6rzmf
2017-07-12 00:01:10,409 INFO ...

确保所有日志都发送到stdout/stderr,而不是发送到文件。如果很难将应用程序更改为不写入文件,则将日志文件的路径更改为
/proc/1/fd/1
@GrahamDumpleton好的,因此如果我将文件日志更改为/proc/1/fs/1/log.errors。然后如何访问它们?而不是
/proc/1/fs/1/log。如果使用该选项,则会出现错误。日志文件必须调用
/proc/1/fs/1
。不要在末尾添加
log.errors
。这是一个文件路径,不是目录。如果操作正确,它们应该出现在
oc日志
output中。@GrahamDumpleton我有一个删除列表文件,需要在CronJob pod完成运行后访问该文件。如果不将其转储到stdout/stderr,就没有办法做到这一点吗?我的理解是,作业的结果需要上传到容器上下文之外的某个地方。因此存储在附加的持久卷中,上载到S3或其他内容。我需要查看应用程序将要编写的自定义文件,不是stdout和stderr。
Pod
也将在容器中保留所有文件,因此您应该能够像
kubectl cp-curator-1499817660-6rzmf:var/log/myoutput.txt/tmp/myoutput.txt
我对rsh或cp
机器没有任何运气:~user1$oc rsh test-job-1502326800-f2qwv错误:无法执行到完整吊舱中的容器;当前阶段已成功
我对OpenShift CLI不是100%熟悉,但假设
rsh
正在尝试在流程中执行一些不起作用的操作。您需要将文件从Pod中复制出来(例如
kubectl cp
)。OpenShift CLI是否支持这一点?如果没有,您可以使用
kubectl
?OpenShift CLI支持它。我试着运行它,但什么也没发生(没有错误,但也没有复制文件)