k8s-wrapper is a [wai](https://hackage.haskell.org/package/wai) application that is designed to wrap your service running in a k8s environment and provide the additional functionality needed for a fully-featured application to operate. It accomplishes it in several ways: 1. **Health and liveness Endpoints** — the feature provides information on the current state of the application, allowing k8s to control execution, restart application, manage rollouts and route traffic 2. **Startup and Teardown Control** — the application's statup and teardown processes are managed by `k8s-wrapper`, ensuring that your service operates smoothly 3. **Graceful Shutdown Endpoint** — This feature enables graceful shutdown of your service. 4. **Metrics Enpoint** — Metrics are exposed on a dedicated endpoint, allowing for easy monitoring of your application's performance By utilizing k8s-wrapper, you can simplify the management of your service and ensure that it runs reliably in a k8s environment # Get Started In order to use k8s application you should do: 1. All k8s-wrapper to the list of dependencies in the cabal file: ```cabal executable mega-service build-depends: base >= 4.4, k8s-wrapper, ... ... ``` 2. In the main file use: ```haskell import Network.K8s.Application as K8s main :: IO () main = do let runReadynessCheck = do -- In this function we check if the traffic can be routed to the -- application. If this function returns False traffic will not -- be routed to the application. pure True let runLivenessCheck = do -- Check if the application is in a workable state. If returns `False` -- then k8s based on it's rules may restart the application. pure True let initializeServer = do -- This function is used to initialize the service, for example -- setup connection to the databases, check config files, register metrics _ <- register ghcMetrics -- While this function is executing k8s-wrapper replies the -- status on it's interface. -- This function returns created resources that may be needed for the -- application. pure () withK8sEndpoint K8s.defConfig -- Default configuration K8sChecks{ runReadynessCheck, runLivenessCheck } initializeServer (\resources -> Warp.run application_port (yourApp resources)) ``` After settings k8s-wrapper will start the interface on the port 10120 (can be redefinen in the config), that provides endpoints: - **/started** — provides information if application is started - **/ready** — provides information if application can accept the traffic - **/health** — provides information if application is healthy - **/stop** — preStop hook — requests application teardown - `/_metrics` - output metrics for the application For the machine readable format you can check `spec.yaml` file provided with the package that provides openapi v3 definition of the endpoints.