Непоследовательное поведение при записи в файл из нескольких модулей на томе EFS с помощью ReadWriteMany - PullRequest
0 голосов
/ 24 января 2020

Я запускаю приложение Laravel в Kubernetes, и в настоящее время у меня есть требование смонтировать папку хранилища / журнала из нескольких модулей, где все модули будут записывать в один и тот же файл laravel.log. Чтобы добиться этого, я использовал AWS EFS с EFS-Provisioner для Kubernetes для монтирования хранилища.

При устранении проблем с журналированием из моего приложения я заметил, что когда я регистрирую запись в laravel.log файл из Pod A / B, он отображается в обоих 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. Я также вижу другие файлы журналов, созданные с одинаковыми временными метками.

Есть идеи, как это исправить?

Редактировать: Я заметил, что под A, B которые оба видят записи журнала друг друга, находятся в одном и том же AZ. Pod C (и другой Pod D, работающий Nginx) работают в другом AZ. Я просто хочу обрисовать это, но я чувствую, что это действительно не должно иметь значения. Это должно быть одно и то же хранилище независимо от того, откуда вы подключаетесь.

1 Ответ

1 голос
/ 27 января 2020

AWS Доступ к EFS осуществляется по протоколу NFS, и согласно этот ответ об обмене стека одновременная запись с нескольких клиентов NFS в один и тот же файл будет повреждена.

Я не уверен есть способ «исправить» саму NFS, но вы всегда можете просто войти в отдельные файлы.

...