Describe the bug
Description
The worker deployment template (charts/langfuse/templates/worker/deployment.yaml) has a livenessProbe but no readinessProbe.
Problem
Without a readinessProbe, during rollouts or pod restarts, Kubernetes keeps the worker pod in Service endpoints immediately after the
container starts — before it has established connections to ClickHouse, PostgreSQL, and Redis. This causes connection refused errors
for requests routed to the not-yet-ready pod.
The web deployment (charts/langfuse/templates/web/deployment.yaml) already has a readinessProbe, but the worker does not.
Suggested fix
Add a readinessProbe to the worker deployment template:
readinessProbe:
httpGet:
path: /api/health
port: http
initialDelaySeconds: 30
periodSeconds: 15
timeoutSeconds: 10
failureThreshold: 3
successThreshold: 1
Environment
- Chart version: langfuse-k8s (latest main branch)
- Kubernetes: 1.28+
To reproduce
To reproduce
- Deploy langfuse using the helm chart with worker replicas >= 1
- Trigger a rollout (helm upgrade or kubectl rollout restart)
- During rollout, the new worker pod receives traffic immediately before ClickHouse/PostgreSQL connections are established
- Observe connection refused errors in worker logs during the first 20-30 seconds after container start
Chart version and values.yaml configuration
Chart version and values.yaml configuration
Chart: langfuse-k8s (latest main branch)
Default values.yaml — no readinessProbe configured for worker
Relevant section in templates/worker/deployment.yaml:
- livenessProbe exists (exec: ps aux | grep node)
- readinessProbe is missing
For comparison, templates/web/deployment.yaml already has readinessProbe configured.
Kubernetes Status
During rollout, new worker pod shows Running/Ready immediately after container starts,
even though internal connections (ClickHouse, PostgreSQL, Redis) are not yet established.
This is because without readinessProbe, kubelet marks the pod Ready as soon as
all containers are running — it has no health check to gate readiness.
Logs
Worker logs during rollout (first 20-30s after start):
ClickHouse query failed with non-retryable error: upstream connect error or disconnect/reset
before headers. retried and the latest reset reason: remote connection failure,
transport failure reason: delayed connect error: Connection refused
ClickhouseWriter.flush observations upstream connect error or disconnect/reset before headers.
Additional information
The web deployment already has a readinessProbe on /api/public/ready. The worker exposes /api/health which can serve the same purpose. Suggested fix is to add a readinessProbe with httpGet on /api/health port http.
Are you interested to contribute a fix for this bug?
Yes
Describe the bug
Description
The worker deployment template (charts/langfuse/templates/worker/deployment.yaml) has a livenessProbe but no readinessProbe.
Problem
Without a readinessProbe, during rollouts or pod restarts, Kubernetes keeps the worker pod in Service endpoints immediately after the
container starts — before it has established connections to ClickHouse, PostgreSQL, and Redis. This causes connection refused errors
for requests routed to the not-yet-ready pod.
The web deployment (charts/langfuse/templates/web/deployment.yaml) already has a readinessProbe, but the worker does not.
Suggested fix
Add a readinessProbe to the worker deployment template:
readinessProbe:
httpGet:
path: /api/health
port: http
initialDelaySeconds: 30
periodSeconds: 15
timeoutSeconds: 10
failureThreshold: 3
successThreshold: 1
Environment
To reproduce
To reproduce
Chart version and values.yaml configuration
Chart version and values.yaml configuration
Chart: langfuse-k8s (latest main branch)
Default values.yaml — no readinessProbe configured for worker
Relevant section in templates/worker/deployment.yaml:
For comparison, templates/web/deployment.yaml already has readinessProbe configured.
Kubernetes Status
During rollout, new worker pod shows Running/Ready immediately after container starts,
even though internal connections (ClickHouse, PostgreSQL, Redis) are not yet established.
This is because without readinessProbe, kubelet marks the pod Ready as soon as
all containers are running — it has no health check to gate readiness.
Logs
Worker logs during rollout (first 20-30s after start):
ClickHouse query failed with non-retryable error: upstream connect error or disconnect/reset
before headers. retried and the latest reset reason: remote connection failure,
transport failure reason: delayed connect error: Connection refused
ClickhouseWriter.flush observations upstream connect error or disconnect/reset before headers.
Additional information
The web deployment already has a readinessProbe on /api/public/ready. The worker exposes /api/health which can serve the same purpose. Suggested fix is to add a readinessProbe with httpGet on /api/health port http.
Are you interested to contribute a fix for this bug?
Yes