我们容器集群内核基于kubernetes,kubernetes支持对容器进行周期性的探测,根据探测结果来决定判断容器的健康状态,并执行额外的操作。当我们创建服务时,在容器参数页的高级设置选项里面,可以为容器设置健康检查。
TCP端口探测的原理是,对于提供TCP通信服务的容器,集群周期性地对该容器建立TCP连接,如果连接成功,则认为探测成功,否则认为探测失败。选择TCP端口探测方式,必须指定容器监听的端口。比如我们有一个redis容器,它的服务端口是6379,我们对该容器配置了TCP端口探测,指定探测端口为6379,那么集群会周期性地对该容器的6379端口发起TCP连接,如果连接成功则认为检查成功,否则认为检查失败。
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请求探测,都可以通过执行命令检查的方式来替代:
注意: 必须把要执行的程序放在容器的镜像里面,否则会因找不到程序而执行失败。
注意: 如果执行的命令是一个shell脚本,不能直接指定脚本作为执行命令,需要加上脚本的解释器。比如我们脚本是/data/scripts/health_check.sh,那么我们使用执行命令检查时,指定的程序应该是 "sh /data/scripts/health_check.sh"。究其原因,是因为集群在执行容器里的程序时,不在终端环境。
相关推荐
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。