容器健康状态检查
- --health-cmd,必选,在容器内执行的命令。返回值为0表示成功,非0表示失败。
- --health-interval,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,相邻两次命令执行的间隔时间(注:入参0s时视为default)。
- --health-timeout,默认 30s,最大为int64上限(纳秒),自定义配置最小值1s,单次检查命令执行的时间上限,超时则任务命令执行失败(注:入参0s时视为default),仅支持runtime类型为lcr的容器。
- --health-start-period,默认 0s,最大为int64上限(纳秒),自定义配置最小值1s,容器初始化时间。
- --health-retries,默认 3,最大为int32上限,健康检查失败最大的重试次数。
- 容器启动后,容器状态中显示health:starting。
- 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。
- 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功。否则视为一次检查失败。检查成功后,容器状态变为health:healthy。
- 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。
- 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。
- 设置--exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。
- CMD执行完毕或超时时,docker daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录5条。此外,容器的配置文件中还存储着健康检查的相关参数。
- 运行中的容器的健康检查状态也会被写入容器配置中。通过isula inspect可以看到。
"Status": "healthy",
"FailingStreak": 0,
"Log": [
{
"Start": "2018-03-07T07:44:15.481414707-05:00",
"ExitCode": 0,
"Output": ""
},
{
"Start": "2018-03-07T07:44:18.557297462-05:00",
"ExitCode": 0,
"Output": ""
},
......
}
- 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。
- 容器启动时若健康检查相关参数配置为0,则按照默认值处理。
- 带有健康检查配置的容器启动后,若iSulad daemon退出,则健康检查不会执行。iSulad daemon再次启动后,正在运行且带有健康检查配置的容器其健康状态会变为starting。之后检查规则同上。
- 对于OCI类型的runtime的容器,健康检查功能待完善。目前仅完整支持lcr类型的容器。