72 lines
2.4 KiB
Plaintext
72 lines
2.4 KiB
Plaintext
|
@node liveness
|
||
|
@chapter liveness
|
||
|
|
||
|
@anchor{ilveness_overview}
|
||
|
@section Overview
|
||
|
|
||
|
This is a cluster-specific convenience setup for enabling a Kubernetes-style liveness/readiness test as outlined in @url{https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/}.
|
||
|
|
||
|
Conceptually, it provides an application with means to:
|
||
|
|
||
|
@itemize
|
||
|
@item Run a collection of functions to validate sanity of the environment
|
||
|
@item Set a no-error state before execution of the main routine
|
||
|
@item Modify the error state during execution
|
||
|
@item Invalidating all state when execution ends
|
||
|
@end itemize
|
||
|
|
||
|
|
||
|
@section Python module
|
||
|
|
||
|
Three python methods are provided.
|
||
|
|
||
|
@subsection load
|
||
|
|
||
|
This is meant to be called after configurations and environment has been set up, but before the execution logic has commenced.
|
||
|
|
||
|
It receives a list of externally defined fully-qualified python modules. Each of these modules must implement the method @code{health(*args,**kwargs)} in its global namespace.
|
||
|
|
||
|
Any module returning @code{False} will cause a @code{RuntimeException}.
|
||
|
|
||
|
The component will not trap any other exception from the modules.
|
||
|
|
||
|
If successful, it will write the @code{pid} of the application to the specified run data folder. By default this is @code{/run/<HOSTNAME>}, but the path can be modified if desired.
|
||
|
|
||
|
|
||
|
@subsection set
|
||
|
|
||
|
This is meant to be called during the execution of the main program routine begins.
|
||
|
|
||
|
@subsubsection at startup
|
||
|
|
||
|
It should be called once at the @emph{start} of execution of the main program routine.
|
||
|
|
||
|
For one-shot routines, this would mean the start of any code only run when the module name is @code{__main__}.
|
||
|
|
||
|
For daemons, it would be just before handing over execution to the main loop.
|
||
|
|
||
|
|
||
|
@subsubsection during execution
|
||
|
|
||
|
Call @code{set(error_code=<error>, ...} any time the health state temporarily changes. Any @code{error} value other than @code{0} is considered an unhealthy state.
|
||
|
|
||
|
|
||
|
@subsubsection at shutdown
|
||
|
|
||
|
Call @code{reset(...)}, which will indicate that the state is to be considered the same as at startup.
|
||
|
|
||
|
|
||
|
@section shell
|
||
|
|
||
|
A bash script is provided for @emph{Kubernetes} to perform the health check.
|
||
|
|
||
|
It performs the following checks:
|
||
|
|
||
|
@enumerate
|
||
|
@item A numeric value exists in @file{<rundir>/<unitname>/pid}.
|
||
|
@item The numeric value is a directory in @file{/proc} (a valid pid)
|
||
|
@item The file @file{<rundir>/<unitname>/error} contains "0"
|
||
|
@end enumerate
|
||
|
|
||
|
If any of these checks fail should inditcate that the container is unhealthy.
|