Skip to content

bug: Worker deployment missing readinessProbe #377

Description

@sareetamugde-arch

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

  1. Deploy langfuse using the helm chart with worker replicas >= 1
  2. Trigger a rollout (helm upgrade or kubectl rollout restart)
  3. During rollout, the new worker pod receives traffic immediately before ClickHouse/PostgreSQL connections are established
  4. 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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions