记一次虚机强制断电 K8s 集群 etcd pod 挂掉快照丢失(没有备份)问题处理
我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ——赫尔曼·黑塞《德米安》
写在前面
- 不小心拔错电源了,虚机强制关机,开机后集群死掉了
- 记录下解决方案
- 断电导致etcd 快照数据丢失,没有备份.基本上是没办法处理
- 可以找专业的 DBA来处理数据看有没有可能恢复
- 这篇博文的解决办法是删除了 etcd 数据目录中的部分文件。
- 集群可以启动,但是 部署的环境数据都丢失了,包括CNI, 集群自带的 DNS 组件也丢了。
- 理解不足小伙伴帮忙指正
- 不管是生产还是测试,如果没做UPS电源, k8s集群 ETCD 一定要备份,ETCD 一定要备份,ETCD 一定要备份 ,重要的话说三遍。
我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ——赫尔曼·黑塞《德米安》
当前集群的状态
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
重启 docke 和 kubelet 尝试启动
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
还是不行,查看下 maser 节点的 kubelet 日志信息
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
利用 docker 查看下当前存在的 pod 信息
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
etcd 没有启动, apiservice 也没有启动。
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
尝试重新启动 etcd
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
查看启动状态
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
看一下 etcd
对应的日志
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
"msg":"failed to recover v3 backend from snapshot","error":"failed to find database snapshot file (snap: snapshot file doesn't exist)","
“msg”: “从快照恢复v3后台失败”, “error”: “未能找到数据库快照文件(snap: 快照文件不存在)”,”
断电照成数据文件损坏了,它希望从快照中恢复,但是没有快照。
额,这里没有备份,所以基本上是没有办法修复了。只能通过 kubeadm 重置集群了。
一些补救措施
如果说你希望通过一些其他的方式来启动集群,来获取一些当前集群的配置信息,下面的方式可以尝试,但是我的集群使用了下面的方法,所有的 pods 数据都丢失了,没办法最后重置集群了。
如果你想使用下面的方式,一定要备份删除的 etcd 数据文件
etcd
在 master
是一个静态 pod
,所以我们看下 yaml 文件,配置的数据文件中什么位置
1 | ┌──[root@vms81.liruilongs.github.io]-[~] |
- --data-dir=/var/lib/etcd
1 | ┌──[root@vms81.liruilongs.github.io]-[/etc/kubernetes/manifests] |
对应的数据文件,可以尝试对数据文件进行修复,如果希望集群可以快速启动,可以
1 | ┌──[root@vms81.liruilongs.github.io]-[/var/lib/etcd/member] |
备份一下数据文件
1 | ┌──[root@vms81.liruilongs.github.io]-[/var/lib/etcd] |
1 | ┌──[root@vms81.liruilongs.github.io]-[/var/lib/etcd] |
重新启动 docker 对应的镜像,或者重新启动 kubectl。
1 | ┌──[root@vms81.liruilongs.github.io]-[/var/lib/etcd] |
查看 Node 状态
1 | ┌──[root@vms81.liruilongs.github.io]-[/var/lib/etcd] |
查看集群当前所有的 Pod 。
1 | ┌──[root@vms81.liruilongs.github.io]-[~/ansible/kubevirt] |
网络相关的 pod 都不在了,而且 k8s 的 dns 组件也没有起来, 这里需要 重新配置网络,有点麻烦,正常情况下如果, 网络相关的组件没有起来, 所有节点应该都是未就绪状态。感觉有点妖。。。时间关系,我需要集群来做实验,所以通过 kubeadm
重置了
1 | ┌──[root@vms81.liruilongs.github.io]-[~/ansible] |
博文参考
记一次虚机强制断电 K8s 集群 etcd pod 挂掉快照丢失(没有备份)问题处理
https://liruilongs.github.io/2023/01/19/K8s/etcd/虚机强制断电K8s-集群-etcd-pod挂掉-问题解决/
1.K8s 集群高可用master节点ETCD全部挂掉如何恢复?
2.K8s 集群高可用master节点故障如何恢复?
3.K8s 镜像缓存管理 kube-fledged 认知
4.K8s集群故障(The connection to the server <host>:<port> was refused - did you specify the right host or port)解决
5.关于 Kubernetes中Admission Controllers(准入控制器) 认知的一些笔记
6.K8s Pod 创建埋点处理(Mutating Admission Webhook)
7.关于AI(深度学习)相关项目 K8s 部署的一些思考
8.K8s Pod 安全认知:从openshift SCC 到 PSP 弃用以及现在的 PSA