Laravel项目迁移Kubernetes:PHP-FPM、NGINX与队列Worker部署咨询
Laravel项目迁移Kubernetes部署方案建议
一、NGINX + PHP-FPM部署模式选择
1. 单Pod双容器模式(Sidecar)
- 优势:Pod内NGINX与PHP-FPM共享同一存储卷,无需额外同步代码,请求链路更短(同Pod内通信),资源调度更紧密。
- 实现要点:
- 优先用init容器提前将Laravel代码同步到共享卷,或直接构建包含完整代码的基础镜像,替代当前“PHP-FPM启动后复制文件到共享卷”的方案,减少容器启动开销
- Pod内定义两个容器:NGINX容器挂载代码卷,配置反向代理至
localhost:9000;PHP-FPM容器同样挂载代码卷,直接处理请求
2. 双Pod单容器模式
- 优势:NGINX与PHP-FPM可独立扩缩容,比如根据请求量单独调整PHP-FPM实例数,NGINX可作为Ingress Controller或独立服务层存在。
- 实现要点:
- PHP-FPM Pod挂载代码卷,通过Service暴露给NGINX
- NGINX Pod配置反向代理指向PHP-FPM的Service地址
- 适合场景:流量波动大,需独立调整两类组件实例数的场景
二、Laravel队列Worker部署优化
不需要保留Supervisor容器,Kubernetes自身的Pod管理机制可替代其进程守护功能:
- 直接用Pod运行队列Worker:创建独立的Deployment(需固定标识时用StatefulSet),容器启动命令直接执行
php artisan queue:work redis --queue=high,default --tries=3(根据实际队列驱动调整参数) - 多队列处理方案:
- 同一Deployment内启动多个容器,每个容器对应一个队列的启动命令
- 创建多个独立Deployment,分别对应不同优先级队列,方便独立扩缩容
- 进程监控与重启:通过Kubernetes的
livenessProbe和readinessProbe监控Worker状态,比如检查进程存活情况,或通过Laravel队列状态接口判断,异常时自动重启Pod - 日志管理:将Worker日志直接输出到容器stdout/stderr,利用K8s日志收集组件(如ELK、Loki)统一收集,无需依赖Supervisor的日志功能
三、额外部署建议
- 代码管理:推荐将Laravel代码打包到镜像中,而非依赖共享卷,每个Pod启动直接使用镜像内代码,避免卷同步问题,更符合K8s镜像化部署理念
- 配置管理:用K8s ConfigMap存储
.env配置文件(敏感信息用Secret),挂载到容器环境变量或指定路径 - 队列驱动:若使用Redis作为队列驱动,确保Redis Service配置正确,Worker Pod可正常访问
内容的提问来源于stack exchange,提问作者David Pires
相关产品推荐
相关产品推荐

