frankenphp在kubernetes中健康检查应直接使用内置/healthz和/readyz端点,配置livenessprobe和readinessprobe时initialdelayseconds设3–5秒、periodseconds设5–10秒、timeoutseconds设2秒、failurethreshold设3,无需startupprobe。

FrankenPHP 部署在 Kubernetes 中的健康检查配置,核心在于两点:它不依赖 PHP-FPM 进程模型,而是以常驻 Go 应用服务器方式运行;它的 HTTP 服务由内置 Caddy 直接暴露,无需 Nginx 反向代理层。因此健康检查路径、探针语义和参数设置需适配其轻量、快速启动、单进程架构特点。
1. 健康检查端点选择
FrankenPHP 默认提供 /healthz(存活)和 /readyz(就绪)两个内置健康端点(可通过 --health-path 和 --readiness-path 自定义),响应为纯文本 OK 或 JSON,HTTP 状态码 200。
- ✅ 推荐直接使用内置端点,无需额外写 PHP 脚本
- ❌ 不要复用业务路由(如
/或/api/ping),避免受中间件、鉴权、慢查询影响 - ❌ 不要用
/ping(Caddy 默认/ping仅检查 Caddy 是否监听,不反映 PHP 运行时状态)
示例请求验证:
curl -I http://<pod-ip>:8000/healthz # 应返回 200 OK
curl http://<pod-ip>:8000/readyz # 应返回 "OK" 或 {"status":"ok"}</pod-ip></pod-ip>
2. Kubernetes 探针 YAML 配置要点
FrankenPHP 启动极快(通常
-
initialDelaySeconds不宜设为 0,建议 3–5 秒(足够冷启动,又不拖慢滚动更新) -
periodSeconds设为 5–10 秒(频率适中,避免压垮小规格 Pod) -
timeoutSeconds建议 2 秒(FrankenPHP 响应极快,超时设太长会掩盖真实卡顿) -
failureThreshold设为 3(容忍偶发网络抖动,避免误杀) -
successThreshold保持默认1即可(就绪/存活都只需一次成功即认可)
示例 Deployment 片段:
livenessProbe:
httpGet:
path: /healthz
port: 8000
httpHeaders:
- name: User-Agent
value: kube-probe
initialDelaySeconds: 3
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 3
readinessProbe:
httpGet:
path: /readyz
port: 8000
initialDelaySeconds: 4
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 3
注意:FrankenPHP 默认监听
:8000,若修改了--http地址(如--http :8080),需同步更新port字段。
3. 就绪探针可扩展性(按需)
FrankenPHP 的 /readyz 默认只检查自身是否可响应 HTTP。如需加入轻量依赖判断(例如 Redis 连通性、关键 DB 表可查),可通过自定义 PHP 脚本实现:
-
在项目中添加
readyz.php:<?php header('Content-Type: application/json; charset=utf-8'); $checks = ['frankenphp' => true]; // 检查 Redis(带超时) $redis = new Redis(); $redis->connect('redis.default.svc.cluster.local', 6379, 0.5); $checks['redis'] = $redis->ping() === '+PONG'; echo json_encode(['status' => 'ok', 'checks' => $checks]); http_response_code($checks['redis'] ? 200 : 503); -
挂载进容器,并在 FrankenPHP 配置中映射路由(如通过
Caddyfile或frankenphp.yaml):handle /readyz { php respond "OK" 200 }
⚠️ 生产环境慎加重检查:/readyz 响应必须稳定 ≤ 200ms,否则会导致 Service 流量反复摘除。
4. 启动探针(Startup Probe)一般不需要
FrankenPHP 无 JVM 预热、无 FPM master 进程初始化开销,启动即服务。除非你明确在 entrypoint 中执行耗时初始化(如生成缓存、迁移数据库),否则无需配置 startupProbe。强行加 startupProbe 反而可能因参数不合理(如 failureThreshold: 30)导致 Pod 长期卡在 Starting 状态。
如确需,可设为:
startupProbe:
httpGet:
path: /healthz
port: 8000
initialDelaySeconds: 1
periodSeconds: 3
failureThreshold: 10 # 给足 30 秒缓冲
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











