资讯专栏INFORMATION COLUMN

k8s--记一次“怪异”的时间修改导致的系列问题

IT那活儿 / 2236人阅读
k8s--记一次“怪异”的时间修改导致的系列问题

点击上方“IT那活儿”,关注后了解更多精彩内容!!!



 故障背景 


某日,k8s上运行的一些业务反应服务出现异常,几个业务均出现不同程度的业务慢或者业务无法使用的情况,而且访问ceph集群也出现缓慢或者mount的fs无法读取等问题。
经过简单的分析,最后汇总了各自业务问题后,我们发现了业务客户端时间与当前时间都存在相差8小时的问题,导致了业务的失败。
以下将整个事件的前因后果及分析过程与大家分享一下。


 分析过程 


1. 因为本人负责k8s的后端ceph存储,所以在接到问题的第一时间后,检查了ceph的存储情况,确实发现了有少许客户端响应超时的问题,具体如下:
2. 为了查看具体的客户端信息,登录mds服务器,运行ceph daemon mds.`hostname` dump_blocked_ops 查看具体被阻塞的客户端如下:
3. 通过以上可以看到具体的客户端为client.151504,然后通过ls命令查看具体客户端使用的目录,判断使用目录为/we***,进而锁定业务W以及客户端IP为IP-9。
ceph tell mds.`hostname` client ls |grep -E "inst|num_caps|root”
4. 因为业务使用的是容器运行,对于ceph集群来说,只能查到客户端的宿主机具体地址IP-9,具体对应的容器已经无法查到了。
于是通知管理k8s集群的同事,检查对应的IP-9主机上的W业务所使用的容器是否正常。      
5. 经过检查容器确实对ceph的目录访问出现卡顿而且ls等命令无法正常显示出。
同时进一步检查日志等情况,会发现时间偏差的告警。
6. 再进一步检查服务器时间,date显示时间与当前时间相差8小时。
于是对服务器的messages日志进行分析,发现时间被更改,而且NTP同步暂未完成。



 业务恢复 


原因确认是时间异常后,对此IP-9服务器的时间进行同步并恢复,但业务自愈性较差,于是对容器内的业务进程进行了重启恢复,重启后业务恢复正常,ceph侧的异常客户端告警warn也消失了,状态恢复为OK。



 锁定“真凶” 


虽然业务恢复,但是更改时间的根因却一直未找到,直到锁定了近期刚迁移进来的业务A

因为A主机所在的IP-8主机才出现过同样时间异常的问题,而服务异常后,我们将此服务A由IP-8主机迁移到了IP-9主机。
巧的是迁移后的第二天就再次出现了文中的上述问题,于是在询问了业务A的相关人员后,最终锁定了“真凶”就是业务A
业务A因为容器内使用的是UTC时区,所以应用date显示的时间数字与我们一般使用的CST时区在数字上相差了8小时。
但是其实两者时间是一致的,只是显示的差异问题。所以,我们的业务A相关人员就对容器里的时间进行了手动修改,然后影响到了整台宿主机。



 问题复盘 


虽然“真凶”最终抓获,但是容器更改的时间影响了宿主机,这显然是一个并不合理的解释。
因为理论上容器所拥有的权限更改时间这种类似的操作是不允许延伸到影响容器所在的宿主机的。
于是,为了进一步了解这个bug一样的设定,我们深入分析了一下容器所使用的镜像。
最终定位是因为此业务A镜像的加入集群,并未进行镜像安全相关的扫描和审核,导致使用的自有容器镜像默认具有很高的权限,进而导致了容器中更改时间影响到了宿主机。
此结论我们在经过审核的镜像中得到验证,使用date修改审核过的容器的时间,并不会影响宿主机时间。
至此,“怪异”的事件总算最终尘埃落定。而且还需提醒一下小伙伴们使用date命令时,一定要留意命令结果中显示的是CST还是UTC或者其他时区,要修正时间的话,切记要先修正了时区后,再修正时间。



本文作者:何青

本文来源:IT那活儿(上海新炬王翦团队)

分享

收藏

点赞

在看

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129665.html

相关文章

  • 一次线上频繁FGC事件和解决方式

    摘要:直接显示了一个疑似内存泄漏的问题。然后分析文件给出的信息,发现一个叫的类。文件里面说的内存泄漏的大概的意思就是说,这个类里面的存放的东西太多了,爆掉了。修改了代码将调用的地方改成了单例。修改完线上跑了一段日子,后来也没有出现过这样的问题。 问题描述:     早上去公司上班,突然就邮件一直报警,接口报异常,然后去查服务器的运行情况,发现java的cpu爆了.接着就开始排查问题 问题解决...

    Alliot 评论0 收藏0
  • k8s安装总结

    摘要:主要在文件附加下面的源我使用的是阿里的镜像,如果你使用的其他国内镜像,请找对应的镜像源然后执行下列命令,安装软件。参考资料只要用小朋友都能部署基本安装基于阿里云镜像站安装用在上快速构建测试集群 本次安装环境是Ubuntu16.04,其他环境下,shell命令会有一些不同,但步骤应该大致相同,默认docker已经安装完成 下载 下载安装下列软件 kubelet Node上运行的节点代理...

    Nosee 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<