Rancher RKE K8s 集群 etcd 恢复
Posted catoop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于Rancher RKE K8s 集群 etcd 恢复的主要内容,如果未能解决你的问题,请参考以下文章
rke高可用部署K8S集群及rancher server 高可用
rancher2.4平台导入的k8s集群无法监控etcd解决办法