写在前面
HealthCheck 不仅是对应用程序内运行情况、数据流通情况进行检查,还包括应用程序对外部服务或依赖资源的健康检查。
健康检查通常是以 暴露应用程序的HTTP端点 的形式实施,可用于配置健康探测的的场景有 :
- 容器或负载均衡器 探测应用状态,执行既定策略,例如:容器探测到应用unhealthy可终止后续的滚动部署或者重启容器;负载均衡器探测到实例unhealthy能将请求路由到健康的运行实例。
- 对应用程序种依赖的第三方服务进行健康探测,比如redis、database、外部服务接口
- 内存、硬盘、网络等物理依赖资源的探测
HealthCheck提供对外暴露程序运行状态的机制。
容器HEALTHCHECK指令
一般情况下我们很容易知道容器 正在运行running , 但容器作为相对独立的应用执行环境,有时候并不知道容器是否 以预期方式正确运作working
Dockerfile HEALTHCHECK指令提供了探测容器以预期工作的轮询机制,轮询内容可由应用自身决定。
具体而言:通过在容器内运行shell命令来探测容器健康状态,以Shell命令的退出码表示容器健康状态:
0 指示容器健康
1 指示容器不健康
2 指示不使用这个退出码
// 可定义轮询interval、探测超时timeout、 重试retries参数轮询探测HEALTHCHECK [OPTIONS] CMD command
Every Linux or Unix command executed by the shel