I have an application running in Kubernetes. To take the advantage of rolling updates with no downtime, I have to implement the proper Health Checks, so the cluster can know when the application/container is ready to handle requests.
I'm trying to use the new ASP.NET Code 2.2 Healthchecks feature.
I should return a Microsoft.Extensions.Diagnostics.HealthChecks.HealthCheckResult
struct with the status of the application.
This struct has 3 static methods that I can use to return this status:
In which situations that the app is not OK that I should use Unhealthy vs Degraded? A few examples would be good.
A "degraded" check could be used for checks that did succeed but are slow or unstable. E.g. a simple database query did succeed but took more than a second. Moving traffic to another instance is probably a good idea until the problem has resolved.
An "unhealthy" check means that the component does not work at all. E.g. a connection to the Redis cache could no be established. Restarting the instance could solve this issue.
Quoting the blog post:
A failed liveness probe says: The application has crashed. You should shut it down and restart.
A failed readiness probe says: The application is OK but not yet ready to serve traffic.
You could say that a "degraded" health check maps to the "readiness" probe and an "unhealthy" check maps to the "liveness" probe.