长期支持版本

    社区创新版本

      容器健康状态检查

      场景说明

      在实际的生产环境中,开发者提供的应用程序或者平台提供的服务难免存在bug,因此,一套管理系统对运行的应用程序进行周期性的健康检查和修复就是不可或缺的。容器健康检查机制便添加了用户定义的对容器进行健康检查的功能。在容器创建时配置--health-cmd选项,在容器内部周期性地执行命令,通过命令的返回值来监测容器的健康状态。

      配置方法

      在容器启动时的配置:

      isula run -itd --health-cmd "echo iSulad >> /tmp/health_check_file || exit 1" --health-interval 5m --health-timeout 3s --health-exit-on-unhealthy  busybox bash
      

      可配置的选项:

      • --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-exit-on-unhealthy,默认false,检测到容器非健康时是否杀死容器。

      检查规则

      1. 容器启动后,容器状态中显示health:starting。
      2. 经过start-period时间后开始,以interval为间隔周期性在容器中执行CMD。即:当一次命令执行完毕后,经过interval时间,执行下一次命令。
      3. 若CMD命令在timeout限制的时间内执行完毕,并且返回值为0,则视为一次检查成功。否则视为一次检查失败。检查成功后,容器状态变为health:healthy。
      4. 若CMD命令连续retries次检查失败,则容器状态变为health:unhealthy。失败后容器也会继续进行健康检查。
      5. 容器状态为health:unhealthy时,任意一次检查成功会使得容器状态变为health:healthy。
      6. 设置--exit-on-unhealthy的情况下,如果容器因为非被杀死退出(退出返回值137)后,健康检查只有容器在重新启动后才会继续生效。
      7. CMD执行完毕或超时时,docker daemon会将这次检查的起始时间、返回值和标准输出记录到容器的配置文件中。最多记录5条。此外,容器的配置文件中还存储着健康检查的相关参数。
      8. 运行中的容器的健康检查状态也会被写入容器配置中。通过isula inspect可以看到。
      "Health": {
          "Status": "healthy",
          "FailingStreak": 0,
          "Log": [
              {
                  "Start": "2018-03-07T07:44:15.481414707-05:00",
                  "End": "2018-03-07T07:44:15.556908311-05:00",
                  "ExitCode": 0,
                  "Output": ""
              },
              {
                  "Start": "2018-03-07T07:44:18.557297462-05:00",
                  "End": "2018-03-07T07:44:18.63035891-05:00",
                  "ExitCode": 0,
                  "Output": ""
              },
              ......
      }
      

      使用限制

      • 容器内健康检查的状态信息最多保存5条。会保存最后得到的5条记录。
      • 容器启动时若健康检查相关参数配置为0,则按照默认值处理。
      • 带有健康检查配置的容器启动后,若iSulad daemon退出,则健康检查不会执行。iSulad daemon再次启动后,正在运行且带有健康检查配置的容器其健康状态会变为starting。之后检查规则同上。
      • 如果健康检查从第一次开始便一直失败,其状态保持与之前一致(starting),直到达到指定失败次数(--health-retries)后变为unhealthy,或者检查成功后变为healthy。
      • 对于OCI类型的runtime的容器,健康检查功能待完善。目前仅完整支持lcr类型的容器。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份