When deploying software with Kubernetes, you need to expose a liveness HTTP request in the application.
The Kubernetes default liveness HTTP endpoint is /healthz
, which seems to be a Google convention, z-pages.
A lot of Kubernetes deployments won’t rely on the defaults.
Here is an example Kubernetes pod configuration for a liveness check at <ip>:8080/health
:
apiVersion: v1
kind: Pod
metadata:
name: liveness-http
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: "/health"
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
When setting up a new app to be deployed on Kubernetes, ideally, the liveness endpoint is defined in a service scaffold (this is company and framework dependent), but in the case it isn’t, you just need to add a simple HTTP handler for the route configured in the yaml file. In an express app, it could look something like this:
app.get('/health', (req, res) => {
res.status(200).send('OK');
});
Notably, the default express scaffold doesn’t come with this route. You either need to remember to add this route or create a custom scaffold that includes it following your Kubernetes liveness check convention.