记一次Kubernete集群崩毁恢复经历

事故说明:

k8s集群资源有限,在同一时刻内进行大量滚动升级。造成整个集群cpu,io,内存同一时刻飙到最高,导致集群里面4台机器死机,需要人手重启,重启后,对应的calico pod 出现 pullImageErr的状态。

处理步骤

1,尝试删除calico pod,没有任何帮助

2,登录calico pod ,用docker images没有发现calico镜像,利用docker pull重新拉取,docker没有执行任何拉取,直接报镜像 is update to date. 用docker rmi删除镜像,又报无法认得镜像

3,利用systemctl status docker -l ,显示calico镜像某些层不存在。

4,通过 systemctl status docker -l 定位到docker 存放文件的地方,例如在 /data/docker,先systemclt stop docker停调docker服务,利用rm -rf /data/docker把该文件夹里面的所有文件删除,再重启systemclt start docker,用docker images和docker ps没有查询到任何记录。

5,回到 master节点,删除没有办法启动的 calico pod ,触发重新建pod,重新触发拉取镜像,此时可以选择等待,也可以直接去到对应的node节点手动拉取对应的镜像。

6,如果一切正常calico pod 转变成running状态,利用calicoctl node status可以看到对应的节点已经建立了连接

7,此时以为已经排除了故障,但发现 coreDns的pod 一直是crash状态,利用kubectl log 查看日志,发现出现如下提示

     github.com/coredns/coredns/plugin/kubernetes/controller.go:317: Failed to list *v1.Endpoints timeout

     在网上尝试了多种方法,都没有办法解决     

8,最后找到建立coreDns和calico的yaml,直接kubectl delete -f   删除全部的calico pod和 coreDns pod,删除过程中遇到了机器僵死情况,直接重启了机器。

  9, 机器重启后,发现整个集群所有节点都是notready状态,利用systemcl status kube-proxy,发现kube-proxy无法连接到虚拟IP,我们的集群是通过连接keepalive来做master负载均衡的,这个虚拟IP就是keepalive里面的来源,目标就是对应的master节点的IP。运行相应的命令在对应的master节点绑定虚拟IP

 10,绑定后一切正常,coreDns正常重建,calico  pod也正常,整个集群恢复

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值