使用 ReadWriteMany 从 EFS 卷上的多个 Pods 写入文件时的行为不一致
Inconsistent Behaviour When Writing to a File From Multiple Pods on an EFS Volume with ReadWriteMany
我是 运行 Kubernetes 上的一个 Laravel 应用程序,目前需要从多个 pods 安装一个 storage/log 文件夹,其中所有 pods写入同一个 laravel.log
文件。为此,我使用 AWS EFS 和 EFS-Provisioner for Kubernetes 来安装存储。
在对我的应用程序的日志记录问题进行故障排除时,我注意到当我从 Pod A/B 将条目记录到 laravel.log
文件时,它同时显示在两个 Pod A/B 中我跟踪日志,但它没有显示在 Pod C 中。如果我从 Pod C 登录,它只会显示在 Pod C 中。我在容器内工作,例如使用 php artisan tinker
和 Log::error('php-fpm');
以及 tail -f /var/www/api/storage/logs/laravel.log
。如果我 echo "php-fpm" >> /var/www/api/storage/logs/laravel.log
.
会发生相同的行为
起初,我以为我可能挂载了错误的存储,但是如果我 touch test
在文件夹中,我可以在 Pod A、B、C 中看到它。我还可以看到其他日志文件使用相同的时间戳创建。
关于如何解决这个问题有什么想法吗?
编辑: 我注意到 pod A、B 都在同一个 AZ 中,它们都看到彼此的日志条目。 Pod C(和另一个 Pod D 运行 Nginx)在不同的 AZ 中 运行。我只是想概述一下,但我觉得这真的不重要。无论您从哪里连接,它都应该是相同的存储。
使用 NFS 协议访问 AWS EFS,并且根据 this stack exchange answer 从多个 NFS 客户端同时写入同一文件将被破坏。
我不确定 "fixing" NFS 本身是否存在某种方式,但您始终可以只记录到单独的文件。
我是 运行 Kubernetes 上的一个 Laravel 应用程序,目前需要从多个 pods 安装一个 storage/log 文件夹,其中所有 pods写入同一个 laravel.log
文件。为此,我使用 AWS EFS 和 EFS-Provisioner for Kubernetes 来安装存储。
在对我的应用程序的日志记录问题进行故障排除时,我注意到当我从 Pod A/B 将条目记录到 laravel.log
文件时,它同时显示在两个 Pod A/B 中我跟踪日志,但它没有显示在 Pod C 中。如果我从 Pod C 登录,它只会显示在 Pod C 中。我在容器内工作,例如使用 php artisan tinker
和 Log::error('php-fpm');
以及 tail -f /var/www/api/storage/logs/laravel.log
。如果我 echo "php-fpm" >> /var/www/api/storage/logs/laravel.log
.
起初,我以为我可能挂载了错误的存储,但是如果我 touch test
在文件夹中,我可以在 Pod A、B、C 中看到它。我还可以看到其他日志文件使用相同的时间戳创建。
关于如何解决这个问题有什么想法吗?
编辑: 我注意到 pod A、B 都在同一个 AZ 中,它们都看到彼此的日志条目。 Pod C(和另一个 Pod D 运行 Nginx)在不同的 AZ 中 运行。我只是想概述一下,但我觉得这真的不重要。无论您从哪里连接,它都应该是相同的存储。
使用 NFS 协议访问 AWS EFS,并且根据 this stack exchange answer 从多个 NFS 客户端同时写入同一文件将被破坏。
我不确定 "fixing" NFS 本身是否存在某种方式,但您始终可以只记录到单独的文件。