容器健康检查详解

我们容器集群内核基于kubernetes,kubernetes支持对容器进行周期性的探测,根据探测结果来决定判断容器的健康状态,并执行额外的操作。当我们创建服务时,在容器参数页的高级设置选项里面,可以为容器设置健康检查。

健康检查类别

  1. 容器存活检查。该检查方式用于检测容器是否活着,类似于我们执行ps检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作,检查成功则不执行任何操作。
  2. 容器就绪检查。该检查方式用于检测容器是否准备好开始处理用户请求,一些程序的启动时间可能很长,比如要加载磁盘数据或者依赖外部的某个模块启动完成时才提供服务,这时候程序进程在,但是并不能对外提供服务。这种场合下该检查方式就非常有用。如果容器的就绪检查失败,集群会屏蔽请求访问该容器,否则会放开对该容器的访问。

健康检查方式

TCP端口探测

TCP端口探测的原理是,对于提供TCP通信服务的容器,集群周期性地对该容器建立TCP连接,如果连接成功,则认为探测成功,否则认为探测失败。选择TCP端口探测方式,必须指定容器监听的端口。比如我们有一个redis容器,它的服务端口是6379,我们对该容器配置了TCP端口探测,指定探测端口为6379,那么集群会周期性地对该容器的6379端口发起TCP连接,如果连接成功则认为检查成功,否则认为检查失败。

HTTP请求探测

HTTP请求探测针对的是提供HTTP或者HTTPS服务的容器,集群周期性地对该容器发起HTTP/HTTPS GET请求,如果HTTP/HTTPS response返回码的范围在200~399,则认为探测成功,否则认为探测失败。使用HTTP请求探测必须指定容器监听的端口和HTTP/HTTPS的请求路径。举个例子,我们的容器提供了HTTP服务,服务端口为80,我们的HTTP检查路径为/health-check,那么集群会周期性地对容器发起 GET http://containerIP:80/health-check 请求。

执行命令检查

执行命令检查是一种强大的检查方式,该方式要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果命令的返回结果是0则认为检查成功,否则认为检查失败。 对于上面提到的TCP端口探测和HTTP请求探测,都可以通过执行命令检查的方式来替代:

  1. 对于TCP端口探测,我们可以写一个程序来对容器的端口进行connect,如果connect成功,脚本返回0,否则返回-1。
  2. 对于HTTP请求探测,我们可以写一个脚本来对容器进行wget,wget http://127.0.0.1:80/health-check,并检查返回的response,如果code在200~399的范围,脚本返回0,否则返回-1。

注意: 必须把要执行的程序放在容器的镜像里面,否则会因找不到程序而执行失败。

注意: 如果执行的命令是一个shell脚本,不能直接指定脚本作为执行命令,需要加上脚本的解释器。比如我们脚本是/data/scripts/health_check.sh,那么我们使用执行命令检查时,指定的程序应该是 "sh /data/scripts/health_check.sh"。究其原因,是因为集群在执行容器里的程序时,不在终端环境。

其它公共参数

  1. 启动延时,单位秒。该参数指定了容器启动后,多久开始探测。例如启动延时设置成5,那么健康检查将在容器启动5秒后开始。
  2. 间隔时间,单位秒。该参数指定了健康检查的频率。例如间隔时间设置成10,那么集群会每隔10s检查一次。
  3. 响应超时,单位秒。该参数指定了健康探测的超时时间,对应到TCP端口探测、HTTP请求探测、执行命令检查三种方式,分别表示TCP连接超时时间、HTTP请求响应超时时间,以及执行命令的超时时间。
  4. 健康阈值,单位次数。该参数指定了健康检查连续成功多少次后,才判定容器是健康的。例如健康阈值设置成3,只有满足连续三次探测都成功才认为容器是健康的。 注意: 如果健康检查的类型为存活检查,那么健康阈值只能是1,用户设置成其它值将被视为无效,因为只要探测成功一次,我们就能确定容器是存活的。
  5. 不健康阈值,单位次数。该参数指定了健康检查连续失败多少次后,才判断容器是不健康的。例如不健康阈值设置成3,只有满足连续三次都探测失败了,才认为容器是不健康的。

相关推荐

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端之路

mysqldump之跳过指定表

背景 目前系统中对于业务数据做了备份以作为数据校验,比如期初数据期末数据进行对比监控,因此产生了大量的备份表。备份表单表数据随着业务的增长而持续增长。导致晚间备...

1927
来自专栏about云

hadoop入门:第六章YARN文档概述

1.YARN 结构 文档简介: Yarn的基本思想是拆分资源管理的功能,作业调度/监控到单独的守护进程 ? 英文网址: http://hadoop...

2976
来自专栏乐沙弥的世界

实验一:SQL server 2005高可用性之----日志传送

如转载,请注明出处:http://blog.csdn.net/robinson_0612/archive/2009/10/31/4751070.aspx

872
来自专栏云计算

Docker 业务流程的概述以及用处

[本文由Yaron Parasol编写]

1986
来自专栏hadoop学习笔记

DKhadoop安装包下载与DKM监控参数说明

前阶段用了差不多两周的时间把DKhadoop的运行环境搭建以及安装的各个操作都介绍了一遍。关于DKhadoop安装包下载也只是顺带说了一下,但好像大快搜索的服务...

633
来自专栏肖洒的博客

TCP/IP(一)

IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因...

582
来自专栏性能与架构

nginx 负载均衡

例如目前有两台服务器,一个nginx服务器,一个web服务器(例如tomcat),nginx负责把所有请求转发到web服务器 ? 配置如下 server { ...

3673
来自专栏Hadoop实操

如何修改CDH集群元数据库地址

在生产环境CDH集群中会遇到元数据库的迁移,迁移后数据库的IP地址发生变化或是元数据库做主备,在主节点挂掉后,我们需要将数据库CDH集群中的元数据库地址指向新的...

1342
来自专栏不想当开发的产品不是好测试

性能测试 -- 实际例子

1、环境申请搭建,压测机器的申请; 2、压测场景设计和思考; 3、压测脚本的编写和修改; 4、压测开始,调试,开始正式压测; 5、压测结果分析,定位问题,重新压...

1735
来自专栏日常工作总结

Redis运维总结

【持久化设置】 对于redis,有两种持久化方式:rdb和aof rdb:后台定期生成一个dump文件,保存当前redis内存中所有的数据 aof:类似日志,记...

1224

扫码关注云+社区