Kubernetes探针踩坑记
1. 荒腔走板
最近一两个月生产K8s集群频繁出现短时503 Service Temporarily Unavailable,还不能主动复现,相当郁闷,压力山大。
HTTP 5xx响应状态码用于定义服务端错误。
- 500 Internal Server Error: 所请求的服务器遇到意外的情况并阻止其执行请求,通常针对单个请求,整个站点有时还是提供服务。
- 502 Bad Gateway Error 暗示连接链路中某个服务器下线或者不可用;
- 503 Service Unavailable 意味着托管您的应用程序的实际Web服务器上存在问题。
2. 排查记录
- 基本上每隔2-3天出现一次,每次2-3分钟,此时整站503;
- 因为不能主动复现,8月26日排查相应时间段的EFK日志:
impala连接问题
,大数据运维同事排查到webapp发起impala的请求与impala集群时钟未对齐,导致webapp impalaODBC Driver连不上impala集群;
进入k8s集群节点,确实部分节点的时钟对齐服务未启动,不定时出现比北京时间慢2,3分钟的情况,这个确实可以解释时间差导致的impala连接认证失败。
- 8月26日同步所有k8s节点的时钟,之后接近一周,并未出现问题;
- 9月3日又出现一次短时503无服务,EFK日志显示依旧是
impala连接问题
,此处大数据同事未能定位具体原因,暂时定义为偶发/抖动?
3.思考和推演
故障现场每次只有impala连接问题,我也搞不懂impala连接问题竟然会导致webapp serice下线。
我们的webapp兼具toB和toC业务,站点强相关于mongodb、 弱相关于impala:impala即使连不上,只是不能查,站点sso+订单相关的写入操作应该还可用。
回想起前几天看到的k8s探针,糟糕,我们的就绪探针好像探测了impala
// ASP.NetCore上暴露的的探测逻辑: impala && mongodb
services.AddHealthChecks()
.AddCheck<ImpalaHealthCheck>(nameof(ImpalaHealthCheck), tags: new[] { "readyz" })
.AddCheck<MongoHealthCheck>(nameof(MongoHealthCheck), tags: new[] { "readyz" });
app.UseHealthChecks("/readyz", new HealthCheckOptions
{
Predicate = (check) => check.Tags.Contains("readyz")
});
强烈推测是: 就绪探针3次探测impala失败,Pod将会被标记为Unready,该Pod将从webapp服务负载均衡器移除,不再分配流量,导致nginx无实际意义的后端服务,站点503。
迅速找一个beta环境,断开impala连接,验证猜想。
4.问题回顾
bugfix不是我正向推断出来的,而是纯靠经验推演出来的,倒不是有明确推断思路,也算给大家提前踩坑了。
docker的健康检查只能探测,K83存活、就绪探针不仅有探测,还有决策能力。
这里我们的k8s就绪探测使用策略出现了问题:
webapp的弱依赖impala有问题,而下线了整个webapp服务,我们应该只探测强依赖,强依赖有问题,才表明容器未就绪,这也是就绪探针的初衷。
强烈建议根据webapp结构合理设置探针参数,避免不切实际的认定失败导致的频繁重启或服务下线。
Kubernetes探针踩坑记的更多相关文章
- IdentityServer 部署踩坑记
IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目,踩了几个坑,在此记录分享一下. 部署架构 项目是 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 【踩坑记】从HybridApp到ReactNative
前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...
- Spark踩坑记——共享变量
[TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记
情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...
- HttpWebRequest 改为 HttpClient 踩坑记-请求头设置
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...
- vue踩坑记
vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...
随机推荐
- TortoiseGit的使用(一)
博客园换了新颜,立刻给我的感觉就是还不如原来的老古董界面呢.没办法呀,毕竟主要是习惯了.咱也不吐槽了,慢慢地,习惯就好,博客园也在逐步改善. 目录 Git和TortoiseGit下载安装 稍微笼统地介 ...
- Oracle创建主键优劣
创建主键方式 一个表的主键是唯一标识,不能有重复,不允许为空. 一个表的主键可以由一个字段或多个字段共同组成. -- 列级,表级建立主键 1.create table constraint_test ...
- 总结vue知识体系之实用技巧
vue 作为目前前端三大框架之一,对于前端开发者可以说是必备技能.那么怎么系统地学习和掌握 vue 呢?为此,我做了简单的知识体系体系总结,不足之处请各位大佬多多包涵和指正,如果喜欢的可以点个小赞!本 ...
- storcli 命令(更新Ing)
help [root@centos7]# storcli -h Storage Command Line Tool Ver 007.0606.0000.0000 Mar , (c)Copyright ...
- NOIP真题索引
NOIP真题索引 NOIP2019 Day 1 格雷码 括号树 树上的数 Day 2 Emiya 家今天的饭 划分 树的重心 NOIP2018 Day 1 铺设道路 货币系统 赛道修建 Day 2 旅 ...
- 【算法•日更•第十二期】信息奥赛一本通1585:【例 1】Amount of Degrees题解
废话不多说,直接上题: 1585: [例 1]Amount of Degrees 时间限制: 1000 ms 内存限制: 524288 KB提交数: 130 通过数: 68 [ ...
- 技术分享丨数据仓库的建模与ETL实践技巧
摘要:如何搭建数据仓库,在这个过程中都应该遵循哪些方法和原则,项目实践中有哪些技巧. 一.数据仓库的“心脏” 首先来谈谈数据模型.模型是现实世界特征的模拟和抽象,比如地图.建筑设计沙盘,飞机模型等等. ...
- C++置换的玩笑
小蒜头又调皮了.这一次,姐姐的实验报告惨遭毒手. 姐姐的实验报告上原本记录着从 1 到 n 的序列,任意两个数字间用空格间隔.但是“坑姐”的蒜头居然把数字间的空格都给删掉了,整个数字序列变成一个长度为 ...
- JavaScript设计模式之命令模式【命令解耦】
在讲解命令模式之前我们先来了解一个生活中的命令模式场景: 场景1: 医院看病抓药: 当你因为肾虚到医院看医生,医生一番操作之后得出结论:要吃个疗程[夏桑菊].[小柴胡](药名纯属虚构,真的肾虚就找医生 ...
- JDBC驱动程序分类
JDBC驱动程序分类 JDBC驱动程序:各个数据库厂商根据JDBC的规范制作的 JDBC 实现类的类库 JDBC驱动程序总共有四种类型: 第一类:JDBC-ODBC桥. 第二类:部分本地API部分Ja ...