OpenShift添加应用健康检查功能
什么是健康检查?
对于部署成功的应用来说,通过访问接口、执行特定命令等方式判断应用是否存活、正常的方式称为健康检查。
在 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 Socket
与 HTTP 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添加应用健康检查功能的更多相关文章
- nginx的健康检查功能将挂掉的Tomcat舍弃
1.Ngninx自带健康检查功能,能将挂掉的服务器舍弃,不在访问路径里 2.Nginx还有URL重写功能,能将接收到的请求,进行改写,再将新的URL分发到后端服务器上
- 23、nginx动态添加nginx_upstream_check_module健康检查模块
nginx_upstream_check_module模块地址:https://github.com/yaoweibin/nginx_upstream_check_module 23.1.说明: 1. ...
- 【Azure 应用服务】App Service 运行状况健康检查功能简介 (Health check)
通过Azure App Service门户,启用Health Check来监视应用服务的实例,当发现其中一个实例处于不健康(unhealthy)状态时,通过重新路由(即把有问题的实例从负载均衡器中移除 ...
- Nginx实战系列之功能篇----后端节点健康检查(转)
公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_m ...
- Nginx实战系列之功能篇----后端节点健康检查
目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址: ...
- Nginx负载均衡中后端节点服务器健康检查的操作梳理
正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...
- springboot Actuator健康检查
通过情况下,如我们想在系统中添加一个健康检查的接口,我们怎么做呢? 我们会新建一个类,或在已存在类的基础上添加检测接口. package com.crhms.medicareopinion; impo ...
- Java应用在docker环境配置容器健康检查
在<极速体验docker容器健康>一文已体验了docker容器健康检查功能,今天就来给java应用的容器加入健康检查,使应用的状态随时都可以被监控和查看. 实战环境信息 操作系统:macO ...
- nginx之健康检查
正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...
随机推荐
- CTF-WEB-XTCTF-Web_php_unserialize
题目来源 XTCTF-Web_php_unserialize 题目考点:PHP代码审计.PHP正则.PHP序列化与反序列化 解题思路 题目源码 <?php class Demo { privat ...
- [原题复现][极客大挑战 2019]BuyFlag
简介 原题复现:[极客大挑战 2019]BuyFlag 考察知识点:php函数特性(is_numeric().strcmp函数()) 线上平台:https://buuoj.cn(北京联合大学公开 ...
- 面试官:小伙子,给我说一下Java 数组吧
Java 数组 Java 语言中提供的数组是用来存储固定大小的同类型元素. 1.声明数组变量 首先必须声明数组变量,才能在程序中使用数组. dataType[] arrayRefVar; // 首选的 ...
- Django解决(1146, "Table 'd42.django_session' doesn't exist")方法
执行 ./manage.py makemigrations sessions ./manage.py migrate sessions
- 「CSP-S 2020」动物园
description luogu loj(暂无数据) solution 这道题作为T2,对选手们考试开始后先通看一遍所有题目的好习惯,以及判断究竟谁才是真正的签到题的重要能力进行了较好的锻炼, 特别 ...
- vulnhub: DC 9
信息收集: root@kali:/opt/test# nmap -A -v 192.168.76.137 Starting Nmap 7.80 ( https://nmap.org ) at 2020 ...
- LNMP 一键安装脚本
这个脚本是使用shell编写,为了快速在生产环境上部署lnmp/lamp/lnmpa(Linux.Nginx/Tengine/OpenResty.MySQL/MariaDB/Percona.PHP), ...
- 蓝桥杯——快速排序(2018JavaB组第5题9分)
快速排序(18JavaB5,9') 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. impo ...
- 你知道第一个C语言C++编译器是如何诞生的吗?
当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用 C 语言编写的,有一些语言比如 Clojure,Jython 等是基于 JVM 或者说是用 Java 实现的,IronPython 等是基于 ...
- PDF文件处理助手 3.3.2版本更新
本次更新内容如下: 1.修复部分PDF在"去水印"-"文字水印"-"模式3"下识别不到的问题. 2.修复部分情况下可能无法正确加载授权的问题 ...