php在kubernetes中必须以fpm模式运行于独立pod,nginx与php-fpm需分离部署;健康探针需区分设计,session和文件存储须脱离本地目录;镜像构建后必须验证fpm配置及扩展加载。

PHP脚本在 Kubernetes 中不直接运行,而是作为容器内进程启动 —— 你部署的是一个装有 PHP 解释器、扩展和脚本文件的镜像,K8s 只负责调度、拉起、监控这个容器。关键不是“怎么让 PHP 跑起来”,而是“怎么让 PHP 容器健康、可扩、可连”。
PHP 容器必须用 fpm 模式,别用 apache 或 cli
Apache + mod_php 是单体进程模型,无法被 K8s 的 Pod 生命周期管理;CLI 模式只执行一次就退出,不符合长期服务要求。PHP-FPM 是唯一适合生产部署的模式,它以 master + worker 进程树形式常驻,支持平滑 reload 和动态子进程伸缩。
-
FROM php:8.2-fpm-alpine是推荐基础镜像,体积小、攻击面窄 - 必须显式安装扩展:比如
docker-php-ext-install mysqli pdo pdo_mysql,不能靠运行时动态加载(K8s 重启 Pod 后会丢失) - 禁用
www.conf中的catch_workers_output = yes,否则日志会卡在 buffer 里,kubectl logs看不到实时输出
nginx 和 php-fpm 必须分两个 Pod,不能合在一个容器里
违反单一职责原则会导致探针失效、扩缩容失衡、日志混杂。Nginx 处理静态资源和反向代理,PHP-FPM 专注执行脚本 —— 它们资源需求不同(CPU 密集 vs I/O 密集),混部会让 HPA 判定失准。
- Nginx Pod 通过
fastcgi_pass php-service:9000转发请求,php-service是 ClusterIP 类型 Service,selector 必须精准匹配 PHP Pod 的 label(如app: php-fpm) - PHP Pod 的
containerPort必须设为9000,且 Service 的targetPort与之严格一致,否则流量进不来 - 不要在 nginx 容器里
curl http://localhost:9000测试 —— 这是本地回环,实际跨 Pod 通信走的是 Service DNS,应测curl http://php-service:9000
livenessProbe 和 readinessProbe 必须分开设计
PHP-FPM 没有 HTTP 接口,httpGet 探针对它无效;TCP 探针又太粗糙,无法反映脚本执行层是否卡死。正确做法是用自定义健康端点 + FastCGI 封包探测。
- 在 PHP 应用中加一个
/healthz路由,返回 200 并检查数据库连接、临时目录写权限等业务级依赖 -
livenessProbe建议用exec执行kill -0 1(验证 master 进程存活),initialDelaySeconds至少设为 60,避免 FPM 启动慢导致误杀 -
readinessProbe必须用httpGet访问/healthz,且periodSeconds≤ 10,确保新 Pod 在真正就绪后才纳入 Service 流量
Session 和文件写入必须脱离 Pod 本地存储
Pod 重启或漂移后,/var/www/html 下的 session 文件、上传缓存、日志轮转目录全丢 —— 这不是配置问题,是架构错误。
- Session 存 Redis 或数据库,别用
session.save_handler = files;如果非得用文件,挂载PersistentVolumeClaim到/var/lib/php/sessions,并确保 PVC 支持ReadWriteMany(如 NFS 或 CephFS) - 上传目录(如
/var/www/html/uploads)同样需 PVC 挂载,且 PHP 容器启动前用 initContainer 设置好目录权限:chown -R www-data:www-data /mnt/uploads - 日志不要写到
/var/log/php-fpm.log,而是 stdout/stderr 直接输出,由 K8s 日志采集器统一处理
最常被忽略的一点:PHP 镜像构建后必须验证 php-fpm -t 和 php -m | grep mysqli 是否成功,而不是只看 docker build 是否返回 0 —— 很多扩展因 Alpine 的 musl libc 编译失败,但构建过程不报错,直到 Pod 启动时 CrashLoopBackOff 才暴露问题。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











