我们的Laravel应用在Kubernetes中有两个不同的Pod,

  • 在端口80上运行的一个正在运行的apache,(CMD / usr / sbin / apache2ctl -D FOREGROUND)
  • 和另一个正在运行的 worker (Laravel Horizo​​n)(CMD php / var / www / artisan horizo​​n)

  • 问题是,当我检查地平线仪表板时,它显示为“ Activity ”,并且在“待处理的作业”部分中可以看到这些作业,但它们从未真正执行过。他们只是闲坐在那里。

    现在,当我在运行apache的Pod中手动进行SSH并手动运行命令'php artisan horizo​​n'时,它将实际执行所有待处理的作业。

    我已经确保以下几点:
  • 两个Pod都使用相同的Redis数据库服务
  • 连接
  • Horizo​​n前缀对于两个Pod都是相同的
  • 最佳答案

    经过几天的努力,我得到了这个问题的答案。

    在docker环境中将Redis用作缓存,队列或广播代理时,我们需要确保正确定义以下环境变量,并且在所有pod中它们必须相同。

  • CACHE_PREFIX
  • REDIS_PREFIX
  • REDIS_CACHE_DB
  • HORIZON_PREFIX

  • 希望这将帮助其他尝试使用Kubernetes和Docker部署Laravel应用程序的人。

    09-05 14:27