UNPKG

kubernetes-health

Version:

Helper library for implementing Kubernetes heath checks and graceful HTTP shutdown in Node applications

115 lines (74 loc) 2.95 kB
# kubernetes-health A helper library for implementing Kubernetes heath checks and graceful HTTP shutdown in Node applications. - [Installation](#installation) - [Usage](#usage) - [API](#api) - [Examples](#examples) - [Standalone Health Server](#standalone-health-server) - [Express](#express) - [License](#license) ## Installation Install using your preferred package manager: ```bash $ yarn add kubernetes-health $ pnpm add kubernetes-health $ npm install kubernetes-health ``` ## Usage `kubernetes-health` supports many different configuration options, can integrate with existing HTTP frameworks, can run tasks on termination, and and can gracefully handle in-flight HTTP requests. See below for more details. To get started: 1. First, create a new `Health` instance to track your application health: ```typescript import {Health} from 'kubernetes-health' const health = new Health() ``` 2. Then once your application is ready to receive requests, mark its status as ready: ```typescript health.markReady() ``` 3. You will need to expose this health status to Kubernetes via an HTTP endpoint, the easiest way to do this is to start a standalone health server with `startProbeServer()`: ```typescript import {startProbeServer} from 'kubernetes-health' startProbeServer(health) ``` This will serve the endpoints `/healthz` and `/readyz` on port 4000 (all configurable, see below). These endpoints can thus be referenced from the liveness, readiness, and startup probes. ## API [Read the API documentation.](./docs/modules.md) ## Examples ### Standalone Health Server To serve a standard Node `http.Server` for the liveness and readiness endpoints: ```typescript import {Health, startProbeServer} from 'kubernetes-health' const health = new Health() startProbeServer(health) ``` To create a new Node `http.Server`, but not automatically listen: ```typescript import {Health, createProbeServer} from 'kubernetes-health' const health = new Health() const server = createProbeServer(health) ``` ### Express To mark the application as ready when the server is listening, and gracefully handle in-flight requests during termination: ```typescript import {Health, gracefulHttpTerminatorTask} from 'kubernetes-health' import express from 'express' const health = new Health() const app = express() // ... const server = app.listen(3000, () => { health.markReady() }) health.beforeTermination(gracefulHttpTerminatorTask(server)) ``` To integrate the liveness and readiness endpoints into an existing Express application: ```typescript import {Health, createLivenessProbeListener, createReadinessProbeListener} from 'kubernetes-health' import express from 'express' const health = new Health() const app = express() app.get('/healthz', createLivenessProbeListener(health)) app.get('/readyz', createReadinessProbeListener(health)) ``` ## License MIT License, see `LICENSE`.