今天凌晨我们用阿里云服务器自建的 kubernetes 集群出现突发异常情况,博客站点(blog-web)与博客 web api(blog-api)的 pod 无法正常启动(CrashLoopBackOff)。

kubectl get pods -l app=blog-web

NAME                        READY   STATUS             RESTARTS   AGE
blog-web-79d579cd94-5t8w4 0/1 CrashLoopBackOff 10 34h
blog-web-79d579cd94-gjwct 0/1 CrashLoopBackOff 10 34h
blog-web-79d579cd94-hsgfv 1/1 Running 1 32m
blog-web-79d579cd94-jj4gt 1/1 Running 0 34h
blog-web-79d579cd94-k5rmv 1/1 Running 0 34h
blog-web-79d579cd94-mc8hs 1/1 Running 1 24h
blog-web-79d579cd94-td9pp 1/1 Running 1 32m
blog-web-79d579cd94-trpsn 0/1 CrashLoopBackOff 10 34h
blog-web-79d579cd94-w9w7v 1/1 Running 1 109m
blog-web-79d579cd94-zgrq4 1/1 Running 1 109m
blog-web-79d579cd94-zm4sh 0/1 CrashLoopBackOff 10 34h
blog-web-79d579cd94-zrqln 1/1 Running 0 34h

kubectl get pods -l app=blog-api

NAME                        READY   STATUS             RESTARTS   AGE   IP
blog-api-599bdd9787-9cpn7 0/1 CrashLoopBackOff 78 33h 192.168.139.55
blog-api-599bdd9787-zfbdh 0/1 CrashLoopBackOff 76 33h 192.168.132.239

CrashLoopBackOff 的原因是读取不到 CofigMap 挂载的 volume 中的 appsettings.Production.json 文件。

blog-web 的错误日志

failed to start container "blog-web": Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused "rootfs_linux.go:58: mounting \"/var/lib/kubelet/pods/022d72c9-a85f-4c58-bc27-c8ba414c5d5a/volume-subpaths/appsettings/blog-web/0\" to rootfs \"/var/lib/docker/overlay2/f4c8e87344c54969e041f11ef73d1617970c64f05e5415c5d5456517e208a5a0/merged\" at \"/var/lib/docker/overlay2/f4c8e87344c54969e041f11ef73d1617970c64f05e5415c5d5456517e208a5a0/merged/app/appsettings.Production.json\" caused \"no such file or directory\""": unknown

blog-api 的错误日志

OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:449: container init caused "rootfs_linux.go:58: mounting \"/var/lib/kubelet/pods/81c1715d-7ac4-469f-afa8-980b87d604b1/volume-subpaths/appsettings/blog-api/0\" to rootfs \"/var/lib/docker/overlay2/9a5dc28604d305180bc9e026db21570b22ff685d0b4db3e3df863f3dfca0f515/merged\" at \"/var/lib/docker/overlay2/9a5dc28604d305180bc9e026db21570b22ff685d0b4db3e3df863f3dfca0f515/merged/app/appsettings.Production.json\" caused \"no such file or directory\""": unknown

我们的应用容器在启动时会从 volume 中复制 appsettings.Production.json 文件到当前应用所在的文件夹,复制失败会导致容器无法启动。

blog-web 部署的 pod replica 比较多,只有部分 pod 宕机,对博客站点的访问影响不大。而 blog-api 只部署了2个 pod replica,全部宕机,本来即使 blog-api 全部宕机也不会造成致命影响,但是。。。

但是,在博客后台(i-web)的 pod 健康检查(readinessProbe与livenessProbe)中却强依赖了 blog-api(这个地方会改进),在健康检查时会请求 blog-api 进行检查,如果请求失败,i-web 的健康检查也失败,结果 blog-api pod 全部宕机最大的受害者是博客后台, i-web 的 pod 因健康检查失败全部宕机。

NAME                     READY   STATUS             RESTARTS   AGE
i-web-7996f9679b-fk6hk 0/1 CrashLoopBackOff 98 5d10h
i-web-7996f9679b-gsz2j 0/1 CrashLoopBackOff 107 5d13h
i-web-7996f9679b-xfj5d 0/1 CrashLoopBackOff 101 5d10h

从而造成从凌晨1:49左右故障发生开始,博客后台一直502,直到7:50左右才恢复。

发现故障后,我们采取的处理方法是强制删除处于 CrashLoopBackOff 状态的 pod

kubectl delete pod $1 --force --grace-period 0

旧版 pod 删除后,新 pod 都能正常启动,于是故障恢复。

这是我们自去年2月23日将生产环境切换到 k8s 之后第一次与这个 CofigMap 挂载问题相遇,到目前我们也不知道为什么会这样?但我们知道这不是百年修得同船渡的缘分,这是我们接下来面临的一个挑战——上船容易,开船难。而且,今年我们正在进行全员登船——将所有部署环境都迁移到k8s上,这个挑战将变得更大,但我们已经下定决心,2013年上云,2021年拥抱云原生。

非常抱歉,这次故障给您带来了很大的麻烦,请您谅解!园子的高可用是我们今年重点解决的一个问题,请给我们一些时间。

【故障公告】K8s CofigMap 挂载问题引发网站故障的更多相关文章

  1. 【故障公告】数据库服务器 CPU 100% 引发网站故障

    悄悄地它又突然来了 -- 数据库服务器 CPU 100% 问题,上次光临时间是 3-30 8:48,这次是 4-28 9:41. 这次我们做出了快速反应,发现后立即进行主备切换,这次一次切换成功,CP ...

  2. [故障公告]受阿里云部分ECS服务器故障影响,目前无法上传图片与文件

    抱歉!今天下午阿里云华东1可用区B的部分ECS服务器出现IO HANG问题,受此影响,我们的图片与文件上传服务器无法访问,由此给您带来麻烦,请您谅解. 16:30左右开始,我们发现图片与文件上传服务器 ...

  3. 【故障公告】博客站点再次出现故障,最终回退 .NET 5.0 恢复正常

    自从博客系统升级 .NET 5.0 之后遇到的诡异故障(一.二.三.四),今天它又出现了,就在前天刚刚故障之后, 就在昨天 .NET 5.0 正式版刚刚发布之后,出现了. 今天晚上我们在 19:30 ...

  4. 【故障公告】再次遭遇SQL语句执行超时引发网站首页访问故障

    非常抱歉,昨天 18:40~19:10 再次遭遇上次遇到的 SQL 语句执行超时引发的网站首页访问故障,由此您带来麻烦,请您谅解. 上次故障详见故障公告,上次排查下来以为是 SQL Server 参数 ...

  5. 【故障公告】SQL语句执行超时引发网站首页访问故障

    非常抱歉,今天早上 6:37~8:15 期间,由于获取网站首页博文列表的 SQL 语句出现突发的查询超时问题,造成访问网站首页时出现 500 错误,由此给您带来麻烦,请您谅解. 故障的情况是这样的. ...

  6. 【故障公告】数据库服务器 CPU 近 100% 引发的故障

    抱歉,今天上午 10:48 ~ 10:33 期间,我们所使用的数据库服务(阿里云 RDS 实例 SQL Server 2016 标准版)又出现了 CPU 近 100% 问题,由此给您带来麻烦,请您谅解 ...

  7. 【故障公告】阿里云 RDS 数据库突发 CPU 近 100% 引发全站故障

    今天晚上9点我们收到阿里云的告警通知: [阿里云监控]华东1(杭州)-云数据库RDS版<cnblogsdb> [instanceId=xxx] 于21:00 发生告警, 前往诊断 CPU使 ...

  8. 【故障公告】访问高峰数据库服务器 CPU 100% 引发全站故障

    今天上午11:10,我们又中"奖"了,我们使用的阿里云 RDS 实例(SQL Server 2016 标准版,16核32G)突发出现 CPU 100%,引发全站故障,直到 12:1 ...

  9. 【故障公告】阿里云 RDS SQL Server 数据库实例 CPU 100% 引发全站故障

    非常抱歉,今天 8:48 开始,我们使用的阿里云 RDS SQL Server 数据库实例突然出现 CPU 100%  问题,引发全站故障,由此给您带来麻烦,请您谅解. 发现故障后立即进行主备切换,和 ...

随机推荐

  1. UWP 自定义RadioButton实现Tab底部导航

    先看效果: 参照Android的实现方式用RadioButton来实现,但是Uwp的RadioButton并没有安卓的Selector选择器 下面是一个比较简单的实现,如果有同学有更好的实现,欢迎留言 ...

  2. 用Wireshark对Android应用的网络流量进行抓包

    通过Wireshark.Charles.Burpsuite等工具分析网络流量的过程,又叫做抓包. 为何需要抓包 测试手机应用(如搜狗号码通.搜狗手机浏览器)的功能时,经常遇到与网络交互的场景,这时候我 ...

  3. Java将List中的实体按照某个字段进行分组的算法

    public void test() { List<User> list = new ArrayList<>(); //User 实体 测试用 String id,name; ...

  4. 容器编排系统K8s之访问控制--用户认证

    前文我们聊到了k8s的statefulset控制器相关使用说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14201103.html:今天我们来聊一下k8 ...

  5. [LeetCode]9. Palindrome Number判断回文数字

    /* 查看网上的思路有两种: 1.每次取两边的数,然后进行比较 2.取数的倒置数,进行比较 */ public boolean isPalindrome1(int x) { if (x<0) r ...

  6. ip,子网掩码,网关以及dns简述

    ip 描述 ip地址用于标识不同的计算机身份,ip地址=网络地址+主机地址 例子 192.168.1.168(ip地址)=192.168.1.0(网络地址)+0.0.0.168(主机地址) 寻址过程 ...

  7. 深入理解CSS盒模型【转载】

    下面本文章将会从以下几个方面谈谈盒模型. 基本概念:标准模型 和IE模型 CSS如何设置这两种模型 JS如何设置获取盒模型对应的宽和高 实例题(根据盒模型解释边距重叠) BFC(边距重叠解决方案) 基 ...

  8. web页面过一段时间再次访问时显示数据库连接错误

    这个问题是我之前遇到的,过了很久才想着去解决它,因为这也没多大影响,无非就是再访问一次的问题,后来有一次观察网站的运行情况时,发现这个问题还挺严重,如果一直用,就不会出现问题,如果中间歇一会,再用就会 ...

  9. java线程与内核线程的关系,及怎么定义ThreadPoolExecutor相关参数

    p.p1 { margin: 0; font: 12px Menlo } p.p1 { margin: 0; font: 12px Menlo } p.p2 { margin: 0; font: 12 ...

  10. Docker之1---介绍和安装

    Docker介绍 Docker是一个开源项目,让应用程序布署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制. Docker利 ...