文档首页 > > 用户指南> 工作负载> 容器设置> 设置容器健康检查

设置容器健康检查

分享
更新时间: 2020/06/17 GMT+08:00

健康检查是指容器运行过程中,根据用户需要,定时检查容器健康状况。若不配置健康检查,如果服务出现业务异常,pod将无法感知,也不会自动重启去恢复业务。最终导致虽然pod状态显示正常,但pod中的业务异常的情况。

CCE提供了两种健康检查的探针:

  • 工作负载存活探针用于检测容器是否正常,类似于我们执行 ps 命令检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作;若容器的存活检查成功则不执行任何操作。
  • 工作负载业务探针用于检查用户业务是否就绪,不就绪则不转发流量到当前实例。一些程序的启动时间可能很长,比如要加载磁盘数据或者要依赖外部的某个模块启动完成才能提供服务。这时候程序进程在,但是并不能对外提供服务。这种场景下该检查方式就非常有用。如果容器的就绪检查失败,集群会屏蔽请求访问该容器;若检查成功,则会开放对该容器的访问。

检查方式

  • HTTP 请求检查

    HTTP 请求方式针对的是提供 HTTP/HTTPS 服务的容器,集群周期性地对该容器发起 HTTP/HTTPS GET 请求,如果 HTTP/HTTPS response 返回码属于 200~399 范围,则证明探测成功,否则探测失败。使用 HTTP 请求探测必须指定容器监听的端口和 HTTP/HTTPS 的请求路径。

    例如:提供 HTTP 服务的容器,HTTP 检查路径为 /health-check,端口为 80,主机地址为containerIP,那么集群会周期性地对容器发起如下请求:GET http://containerIP:80/health-check。如下图:

    图1 HTTP请求检查
  • TCP 端口检查

    对于提供 TCP 通信服务的容器,集群周期性地对该容器建立 TCP 连接,如果连接成功,则证明探测成功,否则探测失败。选择 TCP 端口探测方式,必须指定容器监听的端口。

    例如:我们有一个 nginx 容器,它的服务端口是 80,我们对该容器配置了 TCP 端口探测,指定探测端口为 80,那么集群会周期性地对该容器的 80 端口发起 TCP 连接,如果连接成功则证明检查成功,否则检查失败。如下图:

    图2 TCP 端口检查
  • 执行命令检查

    命令检查是一种强大的检查方式,该方式要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果命令的返回结果是 0 则检查成功,否则检查失败。

    对于上面提到的 TCP 端口检查和 HTTP 请求检查,都可以通过执行命令检查的方式来替代:

    • 对于 TCP 端口探测,我们可以写一个程序来对容器的端口进行 connect,如果 connect 成功,脚本返回 0,否则返回 -1。
    • 对于 HTTP 请求探测,我们可以写一个脚本来对容器进行 wget。

      wget http://127.0.0.1:80/health-check

      并检查 response 的返回码,如果返回码在 200~399 的范围,脚本返回 0,否则返回 -1。如下图:

      图3 执行命令检查
      • 必须把要执行的程序放在容器的镜像里面,否则会因找不到程序而执行失败。
      • 如果执行的命令是一个 shell 脚本,由于集群在执行容器里的程序时,不在终端环境下,因此不能直接指定脚本为执行命令,需要加上脚本解决器。比如脚本是 /data/scripts/health_check.sh,那么我们使用执行命令检查时,指定的程序应该是 sh /data/scripts/health_check.sh。究其原因是集群在执行容器里的程序时,不在终端环境下。

公共参数说明

表1 公共参数说明

参数

参数说明

延迟时间

延迟检查时间,单位为秒,此设置与业务程序正常启动时间相关。

例如,设置为30,表明容器启动后30秒才开始健康检查,该时间是预留给业务程序启动的时间。

超时时间

超时时间,单位为秒。

例如,设置为10,表明执行健康检查的超时等待时间为10秒,如果超过这个时间,本次健康检查就被视为失败。若设置为0或不设置,默认超时等待时间为1秒。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问