什么是健康检查?

对于部署成功的应用来说,通过访问接口、执行特定命令等方式判断应用是否存活、正常的方式称为健康检查。

在 OpenShift 或 Kubernetes 中,健康检查都有两个探针,分别是 就绪探针(Readiness Probe) 与 存活探针(Liveness Probe):

  • 就绪探针(Readiness Probe),即指收集应用已经准备好接收流量状态的探针。通过就绪状态判断Pod是否可以纳入到Service的负载均衡列表中。当Pod处于未就绪状态时,会被自动移出Service负载均衡列表。
  • 存活探针(Liveness Probe),即指收集应用存活状态,确保应用在某种特定状态时重启Pod的探针。通过捕获特定状态,重启Pod以提高可用性。

以上两种探针可独立使用,亦可配合使用。

本文以OpenShift 3.9版本举例,新版本类似,暂不考虑新版本Kubernetes的Startup Probe

使用健康检测场景举例

以下示例均为未设置健康检测探针时的场景

  • 场景一:Pod内应用未就绪,Pod处于Running状态,Pod纳入到Service负载均衡列表中,当有流量进入时,返回服务不可用状态,如Connection Refuse。
  • 场景二:Pod内应用在某次请求中,出现异常,暂时无法提供服务,处于未就绪状态,但其仍在负载均衡列表中,当流量负载到此节点时,应用返回超时、网关异常或Connection Refuse等,Service无法感知此Pod异常,无法故障转移。
  • 场景三:Pod内应用出现死锁、假死状态,重启Pod可临时解决的场景。

针对场景一、二,使用就绪探针即可解决;针对场景三,使用存活探针即可解决。

为OpenShift上的应用添加健康检查

以下使用目前公司生产环境OpenShift 3.9环境举例,只是简单列出方法

进入Deployments进入待添加健康检查的应用,Actions-> Edit Health Checks

就绪探针与存活探针设置方式一致,都有三种探针实现类型,以就绪探针配置举例,存活探针可参考配置。

使用 容器内命令(Container Command) 类型

使用 HTTP GET请求 类型

使用 TCP Socket 类型

最终效果

添加完成后,在应用具体部署版本模板中会有健康检查探针的体现,只有健康检查通过的Pod才会提示Ready状态

OpenShift中对Kubernetes的健康检查进行了简单封闭,通过oc命令行工具查看pod,如图

period为健康检测间隔时间,OpenShift注掉了成功与失败数

注意事项

使用Web界面添加健康检测探针时,TCP SocketHTTP GET 类型的探针只能使用模板的端口号,相对而言 Container Command类型的自由度更高些。

参考文档

https://docs.openshift.com/container-platform/3.9/dev_guide/application_health.html

https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes

OpenShift添加应用健康检查功能的更多相关文章

  1. nginx的健康检查功能将挂掉的Tomcat舍弃

    1.Ngninx自带健康检查功能,能将挂掉的服务器舍弃,不在访问路径里 2.Nginx还有URL重写功能,能将接收到的请求,进行改写,再将新的URL分发到后端服务器上

  2. 23、nginx动态添加nginx_upstream_check_module健康检查模块

    nginx_upstream_check_module模块地址:https://github.com/yaoweibin/nginx_upstream_check_module 23.1.说明: 1. ...

  3. 【Azure 应用服务】App Service 运行状况健康检查功能简介 (Health check)

    通过Azure App Service门户,启用Health Check来监视应用服务的实例,当发现其中一个实例处于不健康(unhealthy)状态时,通过重新路由(即把有问题的实例从负载均衡器中移除 ...

  4. Nginx实战系列之功能篇----后端节点健康检查(转)

    公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_m ...

  5. Nginx实战系列之功能篇----后端节点健康检查

    目前,nginx对后端节点健康检查的方式主要有3种,这里列出:   1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)    官网地址: ...

  6. Nginx负载均衡中后端节点服务器健康检查的操作梳理

    正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...

  7. springboot Actuator健康检查

    通过情况下,如我们想在系统中添加一个健康检查的接口,我们怎么做呢? 我们会新建一个类,或在已存在类的基础上添加检测接口. package com.crhms.medicareopinion; impo ...

  8. Java应用在docker环境配置容器健康检查

    在<极速体验docker容器健康>一文已体验了docker容器健康检查功能,今天就来给java应用的容器加入健康检查,使应用的状态随时都可以被监控和查看. 实战环境信息 操作系统:macO ...

  9. nginx之健康检查

    正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...

随机推荐

  1. HDU100题简要题解(2040~2049)

    HDU2040 亲和数 题目链接 Problem Description 古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+2 ...

  2. Flink处理函数实战之四:窗口处理

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. Earmaster——音乐爱好者必备软件

    有很多喜爱音乐但是却由于一些"不可抗力"而没能学习到音乐基础的小伙伴,相信你们在自学乐器或是声乐的时候总会因为基础不扎实而看不懂一些复杂的乐谱,换别的曲子练习之后发现依旧看不懂,由 ...

  4. C语言模拟实现先来先服务(FCFS)和短作业优先(SJF)调度算法

    说明 该并非实现真正的处理机调度,只是通过算法模拟这两种调度算法的过程. 运行过程如下: 输入进程个数 输入各个进程的到达事件 输入各个进程的要求服务事件 选择一种调度算法 程序给出调度结果:各进程的 ...

  5. Spring Boot中的配置

    一.首先使用idea中的Spring Initializr快速创建一个SpringBoot应用,idea会联网自动创建,创建好的结构如下(一些没必要的文件都删了): 其中说一下几个文件夹和文件 sta ...

  6. iOS 搜索条使用详解

    在ios开发中搜索条的使用挺常见的,不过之前一直没用到也没细细研究,最近做外包项目的时候刚好用到,在这里记录一下使用的过程,只要理解了原理,其实还是比较简单的!上传的图片有点大,刚好可以看清楚它的使用 ...

  7. oracle sql%notfound

    SQL%NOTFOUND 是一个布尔值.与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true.否则返回fal ...

  8. 学习笔记(1):零基础掌握 Python 入门到实战-列表与元祖到底该用哪个?(二)...

    立即学习:https://edu.csdn.net/course/play/26676/338778?utm_source=blogtoedu 列表不能通过增加索引增加元素 可以使用list中的app ...

  9. python核心高级学习总结6------面向对象进阶之元类

    元类引入 在多数语言中,类就是一组用来描述如何生成对象的代码段,在python中同样如此,但是在python中把类也称为类对象,是的,你没听错,在这里你只要使用class关键字定义了类,其解释器在执行 ...

  10. Mybatis报错invalid comparison: java.util.Date and java.lang.String

    请求参数中两个属性确实都是date类型,数据库也确认是data类型,这个错误是因为 在这里把date类型的参数与单引号做了比较出现的,删除就可以正常运行了.