Skip to content
Back to skills

Gorse Worker Health Probe Fix

ASecurity

Fix Gorse worker pods stuck in not-ready state due to failing health probes. Use when: (1) gorse-worker pods show 0/1 Ready but Running status, (2) Readiness probe using pgrep fails silently, (3) Worker logs show normal operation but pod never becomes ready, (4) Using zhenghaoz/gorse-worker image. The gorse-worker container is a minimal image without pgrep or ps commands, so exec-based probes using these fail.

  • 265 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 27, 2026
devopsgoshellbashdocker

Works with

  • claude code

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add divinevideo/divine-mobile --skill gorse-worker-health-probe-fix --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Gorse Worker Health Probe Fix?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Gorse Worker Health Probe Fix
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/divinevideo-gorse-worker-health-probe-fix/badge)](https://www.skillsdirectory.com/skills/divinevideo-gorse-worker-health-probe-fix)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: gorse-worker-health-probe-fix
description: |
  Fix Gorse worker pods stuck in not-ready state due to failing health probes. Use when:
  (1) gorse-worker pods show 0/1 Ready but Running status, (2) Readiness probe using
  pgrep fails silently, (3) Worker logs show normal operation but pod never becomes ready,
  (4) Using zhenghaoz/gorse-worker image. The gorse-worker container is a minimal image
  without pgrep or ps commands, so exec-based probes using these fail.
author: Claude Code
version: 1.0.0
date: 2026-01-30
---

# Gorse Worker Health Probe Fix

## Problem
Gorse worker pods remain in not-ready state (0/1 Ready) even though the worker process
is running correctly and processing jobs. This breaks HPA scaling and service health.

## Context / Trigger Conditions
- gorse-worker pods show `0/1 Ready` but `Running` status
- Worker logs show normal operation: `"msg":"complete ranking recommendation"`
- Pod never transitions to Ready state
- Deployment uses exec-based readiness probe with `pgrep -f gorse-worker`
- Using the official `zhenghaoz/gorse-worker` Docker image

## Root Cause
The `zhenghaoz/gorse-worker` image is a minimal/distroless image that doesn't include
common utilities like `pgrep`, `ps`, or `procps`. The exec probe silently fails because
the command doesn't exist.

```yaml
# This probe FAILS silently - pgrep doesn't exist in the container
readinessProbe:
  exec:
    command: ["pgrep", "-f", "gorse-worker"]
```

## Solution
Replace the pgrep-based probe with a process check using shell built-ins that exist
in the minimal image:

```yaml
# Use kill -0 to check if PID 1 (main process) is alive
livenessProbe:
  exec:
    command: ["sh", "-c", "kill -0 1"]
  initialDelaySeconds: 30
  periodSeconds: 10
readinessProbe:
  exec:
    command: ["sh", "-c", "kill -0 1"]
  initialDelaySeconds: 10
  periodSeconds: 5
```

The `kill -0 <pid>` command checks if a process exists without sending any signal.
PID 1 is the main container process (gorse-worker).

## Verification
After applying the fix:

```bash
kubectl get pods -n gorse | grep worker
# Should show 1/1 Ready

kubectl describe pod <worker-pod> -n gorse | grep -A5 "Readiness:"
# Should show passing readiness checks
```

## Example
Kustomize patch to fix worker probes:

```yaml
patches:
  - target:
      kind: Deployment
      name: gorse-worker
    patch: |-
      - op: replace
        path: /spec/template/spec/containers/0/livenessProbe
        value:
          exec:
            command: ["sh", "-c", "kill -0 1"]
          initialDelaySeconds: 30
          periodSeconds: 10
      - op: replace
        path: /spec/template/spec/containers/0/readinessProbe
        value:
          exec:
            command: ["sh", "-c", "kill -0 1"]
          initialDelaySeconds: 10
          periodSeconds: 5
```

## Notes
- This issue affects only gorse-worker; gorse-master and gorse-server have HTTP endpoints for probes
- The worker doesn't expose any HTTP endpoints, so exec probes are required
- Alternative: use TCP probe on the gRPC port if the worker exposes one
- This pattern applies to any minimal/distroless container without procps utilities

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…