rancher rke 集群恢复
如果 rancher 是 HA 架构部署,在 HA 架构下,rancher 的数据是保存在 rke local K8S 集群中。所以在 rancher HA 架构下只需要通过 RKE 恢复 local 集群数据,即可同时恢复 rancher 的数据。
重要提示 此方法直接使用 RKE 进行集群恢复,它适用于 RKE 创建并导入的集群或者 RKE 部署的 local 集群
恢复准备
提示
- 需要在进行操作的主机上提前安装 RKE、RKE 下载和安装 kubectl。
- 在开始还原之前,请确保已停止旧集群节点上的所有 kubernetes 服务。
- 建议创建三个全新节点作为集群恢复的目标节点。有关节点需求,请参阅HA 安装。您也可以使用现有节点,清除 Kubernetes 和 Rancher 配置,
这将破坏这些节点上的数据请做好备份
,点击了解节点初始化。
准备恢复节点并复制最新快照
假设集群中一个或者多个 etcd 节点发生故障,或者整个集群数据丢失,则需要进行 etcd 集群恢复。
添加恢复节点并复制最新快照:
恢复节点
可以是全新的节点,或者是之前集群中经过初始化的某个节点;通过远程终端登录
恢复节点
;创建快照目录:
mkdir -p /opt/rke/etcd-snapshots/
复制备份的
最新快照
到/opt/rke/etcd-snapshots/
目录- 如果使用
rke 0.2 之前版本
做的备份,需拷贝pki.bundle.tar.gz
到/opt/rke/etcd-snapshots/
目录下; - 如果使用
rke 0.2 以及以后版本
做的备份,拷贝xxx..rkestate
文件到rke 配置文件
相同目录下;
- 如果使用
设置 RKE 配置文件
创建原始 rancher-cluster.yml
文件的副本,比如:
cp rancher-cluster.yml rancher-cluster-restore.yml |
对副本配置文件进行以下修改:
注释
service
中etcd
的配置;删除或注释掉整个
addons:
部分,Rancher 部署和设置配置已在 etcd 数据库中,恢复不再需要;在
nodes:
部分添加恢复节点
,注释掉其他节点;例: rancher-cluster-restore.yml
nodes:
- address: 52.15.238.179 # `添加恢复节点`
user: ubuntu
role: [ etcd, controlplane, worker ]
# 注释掉其他节点;
# - address: 52.15.23.24
# user: ubuntu
# role: [ etcd, controlplane, worker ]
# - address: 52.15.238.133
# user: ubuntu
# role: [ etcd, controlplane, worker ]
# 注释掉 `addons:`部分
# addons: |-
# ---
# kind: Namespace
# apiVersion: v1
# metadata:
# ---
...
恢复 ETCD 数据
打开
shell 终端
,切换到 RKE 二进制文件所在的目录,并且上一步
修改的rancher-cluster-restore.yml
文件也需要放在同一路径下。根据系统类型,选择运行以下命令还原
etcd
数据:# MacOS
./rke etcd snapshot-restore --name <snapshot>.db --config rancher-cluster-restore.yml
# Linux
./rke etcd snapshot-restore --name <snapshot>.db --config rancher-cluster-restore.ymlRKE 将在
恢复节点
上创建包含已还原数据的ETCD
容器,此容器将保持运行状态,但无法完成 etcd 初始化。
恢复集群
通过 RKE 在恢复节点
节点上启动集群。根据系统类型,选择运行以下命令运行集群:
# MacOS |
查看节点状态
RKE 运行完成后会创建 kubectl
的配置文件 kube_config_rancher-cluster-restore.yml
,可通过这个配置文件查询 K8S 集群节点状态:
kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml get nodes |
清理旧节点
通过 kubectl 从集群中删除旧节点
kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml delete node 18.217.82.189 18.222.22.56 18.191.222.99 |
重启 恢复节点
恢复节点
重启后,检查 Kubernetes Pods
的状态
kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml get pods --all-namespaces |
直到 Rancher 服务器启动并且 DNS/负载均衡器指向新集群,
cattle-cluster-agent 和 cattle-node-agent
pods 将处于Error 或者 CrashLoopBackOff
状态。
删除残留文件
集群恢复有可能会导致一些组件对应的 SA 鉴权失效,通过查看 kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml get pods --all-namespaces
可以看到很多 pod 一直无法正常运行,查看 pod 日志可以看到 Authentication failed
等信息。这个时候需要删除一些旧的认证配置然后重新生成。
kubeconfig=kube_config_cluster.yml |
添加其他节点
编辑 RKE 配置文件
rancher-cluster-restore.yml
,添加或者取消其他节点的注释,addons
保持注释状态。例:rancher-cluster-restore.yml
nodes:
- address: 52.15.238.179 # `恢复节点`
user: ubuntu
role: [ etcd, controlplane, worker ]
- address: 52.15.23.24
user: ubuntu
role: [ etcd, controlplane, worker ]
- address: 52.15.238.133
user: ubuntu
role: [ etcd, controlplane, worker ]
# addons: |-
# ---
# kind: Namespace
...更新集群
根据系统类型,选择运行以下命令更新集群:
# MacOS
./rke up --config ./rancher-cluster-restore.yml
# Linux
./rke up --config ./rancher-cluster-restore.yml