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. 5招详解linux之openEuler /centos7防火墙基本使用指南

    防火墙是一种防火墙管理解决方案,可用于许多 Linux 发行版,它充当 Linux 内核提供的 iptables 数据包筛选系统的前端.在本指南中,将介绍如何为服务器设置防火墙,并向你展示使用管理工具 ...

  2. HTML基础-04

    定位 定位:通过定位可以将元素摆放在页面中任意位置 语法:position属性设置元素的定位 可选值:static:默认值,开启定位 relative开启相对定位 absolute开启绝对定位 fix ...

  3. 转行做程序员,培训or自学?过来人亲身经历良心分享

    大家好,我是良许. 熟悉我的朋友应该知道我是学机械出身的,但是毕业后就自学转行成了一名 Linux 应用开发工程师了.我之前也做了几个跟转行相关的视频,有兴趣的小伙伴可以去看看. 在本文里,我将给大家 ...

  4. linux驱动之内核多线程(一)

    本文摘自http://www.cnblogs.com/zhuyp1015/archive/2012/06/11/2545624.html Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进 ...

  5. install-newton部署安装--------控制节点

    #################################################################################################### ...

  6. php使用curl来获取远程图片

    本文章来介绍php使用curl来获取远程图片实现方法,有需要了解采集远程图片的朋友不防进入参考. curl要求php环境支持才行. 可以运行phpinfo()函数是否支持,一般要将php.ini中;e ...

  7. Shell编程—基础脚本

    1. 使用多个命令 如果要两个命令或者多个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开. 2. 创建 shell 脚本文件 例如: #!/bin/bash # This script dis ...

  8. Java数据结构——图的DFS和BFS

    1.图的DFS: 即Breadth First Search,深度优先搜索是从起始顶点开始,递归访问其所有邻近节点,比如A节点是其第一个邻近节点,而B节点又是A的一个邻近节点,则DFS访问A节点后再访 ...

  9. Java算法——分治法

         一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简 ...

  10. 3、Entity Framework Core 3.1入门教程-设定字段属性

    本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上自己的一些理解. 视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR ...