dubbo 协议的 K8s pod 存活探针配置
背景
某项目采用微服务架构,dubbo 框架,K8s 方式部署。
其中 HTTP 协议由网关应用统一处理,大部分应用仅提供 dubbo 协议。
目标
应用某个实例(pod)状态异常时,尝试自动重启恢复。
解决
K8s 提供了3种存活探针(livenessProbe),以实现 pod 状态异常时重启。
HTTPGetAction 首先排除了,因为上文我们说了,HTTP 访问由网关统一处理,应用本身没有 HTTP 协议。
然后是 TCPSocketAction,该探针仅能确认 dubbo 端口是否为监听状态,无法实现应用状态的的拨测。
最后是 ExecAction,该探针执行命令返回0判断 pod 存活,非0则根据pod定义的重启策略进行后续操作。
dubbo 框架从2.0.5 版本开始,支持通过 telnet 命令交互,我们可以使用 status 命令获取应用本身即应用依赖的底层服务(注册中心、数据库等)的拨测结果。
我们只需要编写一个简单的 shell 脚本,抓取 dubbo 的 status 命令结果,如果是 OK 或 WARN 则返回0,否则返回1,就可以使用 ExecAction 了。
#!/bin/bash outputfile=/tmp/dubbo_health_check
dubbo_port=$1 (echo 'status -l'; sleep 1) | nc -w 3 127.0.0.1 ${dubbo_port} -o ${outputfile} > /dev/null result=`grep summary ${outputfile}| awk '{print $4}' ` if [[ "${result}" == "OK" ]] || [[ "${result}" == "WARN" ]]
then
exit 0
else
exit 1
fi
pod yaml文件中关于存活探针的部分如下所示
#(略)
livenessProbe:
exec:
command:
- /bin/bash
- /opt/dubbo_health_check.sh
- '20800'
initialDelaySeconds: 600
timeoutSeconds: 5
periodSeconds: 60
failureThreshold: 3
#(略)
注意点
- 按 dubbo 官方文档的说法,telnet 中执行 status 返回的结果应该和 status -l 中 summary 的结果一致,实际测试并非如此,建议使用 status -l
- 频繁执行 status -l 可能会有性能上的隐患,参考 https://www.jianshu.com/p/f6376c148f2c
总结
dubbo 官方提供了与 pod 探针对齐的方法(参见下文),但是在我们这个应用中因为网关和其他一些原因限制了 HTTP 协议,因此使用了上文这种替代方案。
每个项目/团队都会有一些自己的特殊需求,本文只是提供一种思路,如果有更好的解决方案,欢迎在评论区提出讨论(●ˇ∀ˇ●)
参考
容器探针
https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
Dubbo 与 pod 探针对齐
https://dubbo.apache.org/zh/docs/references/lifecycle/brief/
Dubbo Telnet 命令
https://dubbo.apache.org/zh/docs/v3.0/references/telnet/#status
dubbo 协议的 K8s pod 存活探针配置的更多相关文章
- Kubernetes学习笔记(二):部署托管的Pod -- 存活探针、ReplicationController、ReplicaSet、DaemonSet、Job、CronJob
存活探针 Kubernetes可以通过存活探针(liveness probe)检查容器是否存活.如果探测失败,Kubernetes将定期执行探针并重新启动容器. 官方文档请见:https://kube ...
- pod健康检查(liveness probe存活探针&&readiness probe 可读性探针)
在Kubernetes集群当中,我们可以通过配置liveness probe(存活探针)和readiness probe(可读性探针)来影响容器的生存周期.参考文档:https://kubernete ...
- k8s 存活探针,滚动更新
文章原文 存活探针 Kubelet使用liveness probe(存活探针)来确定何时重启容器.例如,当应用程序处于运行状态但无法做进一步操作,liveness探针将捕获到deadlock,重启处于 ...
- 记一次k8s pod频繁重启的优化之旅
关键词:k8s.jvm.高可用 1.背景 最近有运维反馈某个微服务频繁重启,客户映像特别不好,需要我们尽快看一下. 听他说完我立马到监控平台去看这个服务的运行情况,确实重启了很多次.对于技术人员来说, ...
- 探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器?
探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器? 探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器? 线上多个服务应用陷入了死 ...
- kubernets之存活探针
一 存活探针存在的意义 1.1 kubernet通过存活探针(liveness probe)检查容器是否还在运行,可以为pod中的每个容器单独指定存活探针,如果探针执行失败,kubernets会 ...
- kubernetes的存活探针和就绪探针
1.存活探针 使用Kubernetes的一个主要好处是,可以给Kubernetes-个容器列表来由其保持容器在集群中的运行.可以通过让Kubernetes创建pod资源,为其选择一个工作节点并在该节点 ...
- 4.2 K8S超级完整安装配置
前言: 采坑 k8s有3种安装方式,如下所示: minikube:这是一个k8s集群模拟器,只有一个节点的集群,只为了测试使用,master和node都在一台机器上 直接使用带有容器功能的云平台安装: ...
- Dubbo协议与连接控制
协议参考手册 (+) (#) 推荐使用Dubbo协议 性能测试报告各协议的性能情况,请参见:性能测试报告 (+) dubbo:// (+) (#) Dubbo缺省协议采用单一长连接和NIO异步通讯,适 ...
随机推荐
- 六个好习惯让你的PCB设计更优
PCB layout工程师每天对着板子成千上万条走线,各种各样的封装,重复着拉线的工作,也许很多人会觉得是很枯燥无聊的工作内容.看似软件操作搬运工,其实设计人员在过程中要在各种设计规则之间做取舍,兼顾 ...
- 2021 CCPC女生赛
newbie,A了五题铜牌收工 比赛时和队友悠哉游哉做题,想着干饭,最后幸好没滚出铜尾. 贴一下比赛过的代码 A题 签到 队友A的,判断正反方向序列是否符合要求 /*** * @Author: _Kr ...
- vim实用插件
转载:Vim 实用插件推荐(2017) - 知乎 (zhihu.com) 1.插件管理器 ----------------------------------------- Vundle.vim - ...
- Docker 18.03导入导出
docker中分容器和镜像,简单可以理解为容器是运行中的实例,镜像是运行实例所需的静态文件. 导入导出既可以对容器做操作,也可以对镜像做操作.区别在于镜像可以随时导出,容器必须要停止之后才可以导出,否 ...
- Loto实践干货(8)loto示波器在LED台灯调光问题维修中的应用案例
Loto实践干货(8)loto示波器在LED台灯调光问题维修中的应用案例 一位客户最近觉得觉得他的LED台灯好闪, 于是拆了看看,里面的控制板是这样的: 干掉双色调光功能,只调亮度的话闪烁的状况能好转 ...
- springcloud优雅停止上下线与熔断
SpringCloud 服务优雅上下线 Spring Boot 框架使用"约定大于配置"的特性,优雅流畅的开发过程,应用部署启动方式也很优雅.但是我们通常使用的停止应用的方式是 k ...
- windows端口占用处理方法
(1)输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是8081,首先找到它.C:\Users\Administrator>netstat -ano活动 ...
- 性能工具之代码级性能测试工具ContiPerf
前言 做性能的同学一定遇到过这样的场景:应用级别的性能测试发现一个操作的响应时间很长,然后要花费很多时间去逐级排查,最后却发现罪魁祸首是代码中某个实现低效的底层算法.这种自上而下的逐级排查定位的方法, ...
- docker容器命令(一)
容器命令 创建容器:docker run 参数: -it 交互 -d 后台 –name 容器名 -p 主机端口:容器端口 (主机端口映射到docker端口) docker run --name cen ...
- .Net Core微服务——Ocelot(3):超时、熔断、限流
基本概念 超时.熔断.限流听起来好像很远,但实际上用在方方面面.很多人可能还搞不懂熔断是做什么,其实可以把熔断理解为一种防护措施.做个假设,在微服务体系下,某个下游服务响应很慢,然后随着时间推移,会有 ...