故障应急总让人充满心跳,有时交换机故障、有时光缆被挖断,这次却是机房意外断电。。。
背景
问题呈现
故障发生后,很多指令无法正常回显,容器的元数据也无法正常加载,故障现象主要呈现为如下3点:
故障排查
首先查询ApiServer Pod的事件日志kubectl describe pod kube-apiserver-k8s-master-6-77 -n kube-system,提示failed to reserve container name xxx: name xxx is reserved for xxx,看样子是容器名冲突了。
从Pod列表中,我们并没有发现重名的Pod,所以可能是断电的时候未能及时释放容器,需要排查底层的容器是否有名称冲突。
在了解到是Containerd容器运行时后,让其在master-6-77这个节点上通过crictl ps -a查看所有的容器,果然发现有冲突的ApiServer容器,但是状态不一样,正是由于其中一个容器的状态为Exited,kubectl才允许新的容器创建,导致这个故障。
解决方法
解决的方法其实很简单,把Exited状态的容器删除即可,操作指令如下:
将Exited状态的ApiServer容器删除
crictl rm <容器ID>
结 语
这个故障影响了集群的自动治愈,让运维人员血液加速,但总算能够快速地解决,并恢复集群的运作,本期分享就到这里,谢谢!
欢迎订阅我的公众号「SRE运维手记」,欢迎加技术交流群
文章转载自SRE运维手记。点击这里阅读原文了解更多。
CNCF概况(幻灯片)
扫描二维码联系我们!
CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请关注CNCF微信公众号。