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探针踩坑记的更多相关文章

  1. IdentityServer 部署踩坑记

    IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目,踩了几个坑,在此记录分享一下. 部署架构 项目是 ...

  2. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  3. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  4. 【踩坑记】从HybridApp到ReactNative

    前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...

  5. Spark踩坑记——共享变量

    [TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...

  6. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

  7. djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记

    情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...

  8. HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

    HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...

  9. vue踩坑记

    vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...

随机推荐

  1. C#LeetCode刷题之#633-平方数之和( Sum of Square Numbers)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3885 访问. 给定一个非负整数 c ,你要判断是否存在两个整数 ...

  2. Vue Vuex 严格模式+实例解析+dispatch/commit + state/getter

    1.严格模式 import getters from './getters' import mutations from './mutations' import actions from './ac ...

  3. IPSec传输模式下的ESP报文的装包和拆包过程

    IPSec协议定义 IPsec将IP数据包的内容在装包过程在网络层先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容. IPsec 对数据进行加密的方式 加密模式 ...

  4. geth常用命令

    转载地址 https://blog.csdn.net/qq_36124194/article/details/83686823 geth常用命令 初始化私链 geth --datadir /path/ ...

  5. RoBERTa:一个调到最优参的BERT

    RoBERTa: A Robustly Optimized BERT Pretraining Approach. Yinhan Liu, Myle Ott, Naman Goyal, et al. 2 ...

  6. HTML基础-05

    字体 文本颜色:color:red;字体分类: 衬线字体serif --字体宽度各异,有衬线 --Times.Georgia.宋体 无衬线字体sans-serif --字体宽度各异,无衬线 --Hel ...

  7. js获取当前地址信息

    var url = window.location.href; //获取当前窗口的Url; 结果:http://localhost:61768/Home/Index?id=2&age=18 v ...

  8. 题解 洛谷 P1553

    字符串入门题,读入一行字符,先将第一个数读入翻转,读入下一个字符(如果没有则退出),再将下一个数读入翻转 #include<iostream> #include<cstdio> ...

  9. redis读写分离及可用性设计

    Redis缓存架构设计 对于下面两个架构图,有如下想法: 1)redis主从复制模式,为了解决master读写压力,对master进行写操作,对slave进行读操作. 2)而在分片集群中,如果对部分分 ...

  10. 9. Technical Overview 技术概述

    9.1 Runtime Environment 运行环境 Spring Security 3.0需要Java 5.0运行时环境或更高版本.由于Spring Security的目标是以独立的方式运行,所 ...