记一次现场故障分析总结k8s节点NotReady问题

背景

某现场19年部署一套k8s集群,docker版本1.12 ,k8s版本1.8.6,现网k8s资源池规模,生产环境58台物理机,灰环境60台虚机(后来才知道用的一套k8s资源池,通过标签区分),生产环境实例数2000左右,灰度环境实数900左右

现象

某现场在夜晚做业务升级的时候,批量更新业务包(由于微服务架构,而拆分并不完全,批量更新了十个中心的代码)同时启动副本为1的实例,再通过批量扩容的方式拉起2000左右的实例,出现现场大面积的k8s-node节点not Ready,以至于业务无法全部启动成功。

故障定位流程

由于之前现场出现过此问题,并只是伴有几个node的notReady问题,现场并没有第一时间联系我们,7点左右联系到我,我们第一时间拉取专家团队进行故障分析定位,因为早上8点需要营业,所以我在熟悉现场环境的情况下,并隐约知道这个问题与启动或扩容多个实例个数有关,再简单看了异常的节点的kubelet 日志和docker日志,快速备份节点日志后。建议现场优先恢复生产,建议先将业务应用的实例数先减少至1,保障所有业务都运行,再通过人工的方式,逐一对应用增加副本数。
一开始应该之前就曾有过这个情况(现场版本比较老,docker 1.12 k8s 1.8.6),所以将问题引向bug,但无法说明此次出现大面积的瘫痪。node节点的event:


image.png

拿到kubelet 日志 ,系统日志和docker日志以后,发现日志有以下问题


image.png

按照网上修复建议,以为是systemd的版本问题导致,但检查发现,现场的cgroup的版本还是用的cgroupfs 。
然后开始又开始翻找日志,同时在现场的测试过程中发现,容器在不使用端口映射的方式的情况下扩容并未引起节点的失联。现场采用的并不是NodePort的方式,而是hostPort方式并改动源代码能够随机在宿主机启动映射端口,也就是说每启动一个都会通过docker的方式生产iptables规则。一开始的方向觉得可能代码问题,但运行了接近3年,才出现属实说不过去。
真实原因定位:

在docker 日志中查到,有进程相互锁住,但是没查出具体的什么原因:

essage.txt:May 13 10:27:47 paas-10-239-40-157 dockerd: is currently holding the xtables lock; waiting (47s) for it to exit...\nAnother app is currently holding the xtables lock; waiting (49s) for it to exit...\nAnother app is currently holding the xtables lock; waiting (51s) for it to exit...\nAnother app is currently holding the xtables lock; waiting (53s) for it to exit...\nAnother app is currently holding the xtables lock; waiting (55s) for it to exit...\nAnother app is currently holding the xtables lock; waiting (57s) for it to exit...\n"
然后我在远程连线现场服务器时,查看top的时候发现有个进程cpu进程100%
image.png

查看服务的父进程发现是kube-proxy,检查kube-proxy的日志发现大量的进程互锁。


image.png

基本能判断由于改写了源码,容器在启动时需要映射端口由docker去修改iptables规则,
kube-proxy同时尝试修改规则,导致互锁。因为互锁时间长,docker出现了过载或没有响应时间过长,导致kublet去联系docker时联系不上。从而node节点报ContainerGcFailed的问题


image.png

就此根源问题基本排查出来了。
但针对现场还有个问题也需要排查,就是该问题应该在一开始就存在,而且之前都是几台出现,这次出现突然大面积的问题。docker发起端口映射时,采用的方式是docker -P的方式随机指定端口,它需要遍历iptables规则树获取可用端口,再写入,在iptables的规则多的情况下,这个时间耗时越来越长。大批量启动pod的时候就出现docker和kube-proxy的服务争抢iptables。当时检查iptables的规则条目有3万多
image.png

总结

导致的原因是,kube-proxy的刷新策略时间是2小时,在业务进程全停全启动时,原来的iptables规则未失效,docker遍历时间长。同时,现场3月份做了一套灰度环境,但为了节省资源,采用的是同一套k8s资源池,灰度环境的服务也启动了700多个pod,导致iptables达到瓶颈。所以再同时启动多pod的情况下,docker占用的时间延长,导致kubelet通信不到,才节点出现NotReady。这也解释了服务启动完成后就不会再出现这类情况。

建议

1.将灰度环境单独一套k8s资源池处理,解决当前iptables过大的的问题
2.应用均匀分布,在中心之间无相互影响的情况下,建议不打标签,使批量启动pod的时候不会只落在某几台上,导致docker寻址时间加长,从而kublet联系超时,而NotReady
3.拆分资源池,减少资源池内的pod运行数量。
4.取消采用该种端口映射的方式,可采用NodePort的方式,但需要修改和拆分应用配置。
5.不采用端口映射,通过ingress寻址,但会影响微服务的优雅停机和负载策略。

后记

从现场看,已经开始实行新版本的建设,目前其实简单的方式,就是拆灰度环境为单独k8s集群,然后现网增加node节点,既能够保障当前的业务承载量也能够减少该故障的发生。
对了,为啥要用端口映射,其实就是因为容器上云的相互之间的调用不全部在容器内,也有在外面的。然后采用NodePort的方式,一个应用一台宿主机起一个pod,10台宿主机只能是10个。如果还要多, 那只能复制多个应用出来,比如应用01、应用02,其实也不影响使用,影响系统的分类和拓扑。 也就是我第四条提到的方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342