OpsCanary
kubernetesobservabilityPractitioner

Stop Your Kubernetes Health Checks from Waking Services: Here’s How

5 min read CNCF BlogJul 29, 2026Reviewed for accuracy
Share
PractitionerHands-on experience recommended

Kubernetes health checks are essential for maintaining service availability, but they can also create unnecessary overhead by waking services that should remain idle. This is particularly problematic in a scale-to-zero deployment strategy, where services can scale down to zero replicas when not in use. The ProbeResponse feature addresses this issue by allowing your services to genuinely stay idle while still responding to health checks appropriately.

The ProbeResponse feature integrates directly with the resolver, intercepting incoming traffic when your service is scaled to zero. You can define specific rules for health check responses. If a request matches a probe rule, the resolver responds directly with a predefined status code and body, without notifying the operator to scale up the service. For instance, you can configure a GET request to respond with a 200 OK status and a JSON body indicating the service is healthy, while a HEAD request can return a 204 status for readiness checks. This way, your service remains at zero replicas, saving resources and costs.

In production, implementing ProbeResponse can significantly reduce unnecessary scaling events, but it requires careful configuration. Ensure you define your probe rules accurately to match the expected health check paths. The version of Kubernetes you are using may also impact how this feature behaves, so keep an eye on updates and changes in functionality. Remember, while this feature is powerful, it’s essential to monitor your services to ensure they are responding correctly to health checks without inadvertently causing issues.

Key takeaways

  • Leverage the ProbeResponse feature to prevent unnecessary scaling of services.
  • Define probe rules that match your health check paths accurately.
  • Use specific HTTP methods like GET and HEAD to control health check responses.
  • Configure response status codes and bodies to maintain service idleness.
  • Monitor services closely to ensure health checks are functioning as intended.

Why it matters

In production, unnecessary scaling can lead to increased costs and resource wastage. By managing health checks effectively, you can maintain efficiency and optimize resource usage.

Code examples

YAML
1probeResponse:
2  - method: GET
3    path:
4      type: PathPrefix
5      value: /healthz
6    response:
7      status: 200
8      body: '{"ok":true}'
9  - method: HEAD
10    path:
11      type: Exact
12      value: /ready
13    response:
14      status: 204
15      body: '{}'

When NOT to use this

The official docs don't call out specific anti-patterns here. Use your judgment based on your scale and requirements.

Want the complete reference?

Read official docs

Test what you just learned

Quiz questions written from this article

Take the quiz →
Better StackSponsor

Unified observability — logs, uptime monitoring, and on-call in one place. Used by 50,000+ engineering teams to ship faster and sleep better.

Try Better Stack free →

Get the daily digest

One email. 5 articles. Every morning.

No spam. Unsubscribe anytime.