为什么 Cron 作业的成功执行会停止进一步将日志附加到文件中

问题描述

我正在从事 Openshift 项目。我使用 yaml config 配置了一个 cron 作业。在我们的应用程序中,所有日志都附加到 Persistent Volume 内的一个文件中。成功执行 cron 作业以清除文件后,不会附加更多日志。

我的观察:

  1. 最初我认为 PV 本身不是 Read-Write Many,所以我将其更改为 Read-Write Many 并且仍然观察到相同的行为。
  2. 对于 cron 作业 yaml 中提到的图像,存在一些图像问题。但我尝试了不同的图像,但仍然观察到相同的问题。

任何人都可以解释我并为以下问题找到合理的解决方案吗?

编辑:

是的,只有在打开文件时日志才被配置为 APPEND。我知道 PV 的访问模式不控制 IO 操作。

解决方法

首先您应该检查日志是如何记录在 PV 后端存储的文件中的。例如,当应用程序开始将消息记录到文件时,日志文件应该以“APPEND”模式打开。 PV访问模式,如ReadWriteMany和ReadWriteOnce,不控制应用程序视角的IO,它只考虑节点,不考虑Pod和应用程序。有关详细信息,请参阅 Access Modes

ReadWriteOnce -- the volume can be mounted as read-write by a single node
ReadOnlyMany -- the volume can be mounted read-only by many nodes
ReadWriteMany -- the volume can be mounted as read-write by many nodes

换句话说,这意味着 k8s 不确保 pod 和应用程序上的文件处理。或者IO操作取决于后端存储或文件系统特性,例如块(iscsi,ebs ...)或文件单元(nfs,glusterfs ...) IO。