0
点赞
收藏
分享

微信扫一扫

Rancher RKE K8s 集群 etcd 恢复


背景

在 Rancher 中基于 RKE 创建的 K8s 集群,因为服务器磁盘故障,导致 3个 master 节点有2个节点的 etcd 数据文件损坏,导致整个集群不可用。

etcd 三个节点集群时,如果有 2个节点损坏,仅剩余的一个 etcd 节点是不能正常通过 etcdctl 命令操作的。

因为是基于 Rancher RKE 的集群,所以在这个问题的情况下可以直接通过其默认备份的快照文件进行 etcd 恢复,如果没有做特别配置,etcd 和集群的快照备份文件在 ​​/opt/rke/etcd-snapshots​​ 中,默认是每 12小时生成一次快照。

这个备份文件中包含两个东西:一个是 etcd 的快照 db 文件,一个是该 k8s ​​集群的状态文件​​,里面包含 kubeconfig、证书等内容。

Kubernetes 集群状态由 Kubernetes 集群中的集群配置文件 cluster.yml 和组件证书组成,由 RKE 生成。

恢复etcd步骤

在恢复 etcd 之前,请先停止该 master 服务器上的 etcd 容器 ​​docker stop etcd​​。

1、创建临时目录 ​​/home/restore/​

2、下载 etcdctl 文件,官方地址:​​https://github.com/etcd-io/etcd/releases​​

3、复制一个 ​​/opt/rke/etcd-snapshots​​​ 中的快照文件到 ​​/home/restore/​​ 中,解压缩,如下文件结构示例:

[root@k8s-dev-node1 restore]# tree
.
├── backup
│ └── c-8d6fk-rl-bmmmn_2023-01-17T19:33:26Z
├── c-8d6fk-rl-bmmmn_2023-01-17T19:33:26Z.zip
├── etc
│ └── kubernetes
│ └── c-8d6fk-rl-bmmmn_2023-01-17T19:33:26Z.rkestate
├── etcd-v3.5.7-linux-amd64
│ ├── Documentation
│ │ ├── dev-guide
│ │ │ └── apispec
│ │ │ └── swagger
│ │ │ ├── rpc.swagger.json
│ │ │ ├── v3election.swagger.json
│ │ │ └── v3lock.swagger.json
│ │ └── README.md
│ ├── etcd
│ ├── etcdctl
│ ├── etcdutl
│ ├── README-etcdctl.md
│ ├── README-etcdutl.md
│ ├── README.md
│ └── READMEv2-etcdctl.md
└── etcd-v3.5.7-linux-amd64.tar.gz

其中 ​​etcd-v3.5.7-linux-amd64.tar.gz​​​ 是下载的 etcdctl 文件压缩包,文件 ​​c-8d6fk-rl-bmmmn_2023-01-17T19:33:26Z.rkestate​​​ 是该 K8s 集群的各种内容和证书等合并的文件,文件 ​​c-8d6fk-rl-bmmmn_2023-01-17T19:33:26Z​​ 就是我们需要的 etcd 快照 db 文件。

5、删除 ​​/var/lib/etcd​​ 目录,你最好改个名或者移走别直接删了(如果这个目录存在肯定不行,下面恢复快照时 etcdctl 会自动创建)

4、在 ​​etcd-v3.5.7-linux-amd64​​ 目录中执行快照恢复命令,如下:

./etcdctl snapshot restore /home/restore/backup/c-8d6fk-rl-bmmmn_2023-01-17T19:33:26Z --data-dir="/var/lib/etcd

5、最后启动 etcd 容器,查看日志就发现已经正常了,第二个机器同理操作,如果三个 master 都坏了,只要快照文件在,分别操作后启动容器也是没问题的。

参考资料:https://www.xtplayer.cn/rancher/backup-restore/rancher-custom-cluster-restore/

(END)


举报

相关推荐

0 条评论