重要提示 此方法直接使用RKE进行集群恢复,它适用于RKE创建并导入的集群或者RKE部署的local集群

一:恢复准备

1、需要在进行操作的主机上提前安装RKERKE下载安装kubectl
2、在开始还原之前,请确保已停止旧集群节点上的所有kubernetes服务。
3、建议创建三个全新节点作为集群恢复的目标节点。有关节点要求,请参阅HA安装。您也可以使用现有节点,清除Kubernetes和Rancher配置,这将破坏这些节点上的数据请做好备份,点击了解节点初始化

二:准备恢复节点并复制最新快照

假设集群中一个或者多个etcd节点发生故障,或者整个集群数据丢失,则需要进行etcd集群恢复。

添加恢复节点并复制最新快照:

  1. 恢复节点可以是全新的节点,或者是之前集群中经过初始化的某个节点;

  2. 通过远程终端登录恢复节点

  3. 创建快照目录:

    mkdir -p /opt/rke/etcd-snapshots/
  4. 复制备份的最新快照/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

对副本配置文件进行以下修改:

  • 删除或注释掉整个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:
#     name: cattle-system
#   ---
...

四:恢复ETCD数据

1、打开shell终端,切换到RKE二进制文件所在的目录,并且上一步修改的rancher-cluster-restore.yml文件也需要放在同一路径下。

2、根据系统类型,选择运行以下命令还原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.yml

RKE将在恢复节点上创建包含已还原数据的ETCD容器,此容器将保持运行状态,但无法完成etcd初始化。

五:恢复集群

通过RKE在恢复节点节点上启动集群。根据系统类型,选择运行以下命令运行集群:

# MacOS
./rke up --config ./rancher-cluster-restore.yml
# Linux
./rke up --config ./rancher-cluster-restore.yml

六:重启恢复节点

恢复节点重启后,检查Kubernetes Pods的状态

kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml  get pods --all-namespaces

NAMESPACE       NAME                                    READY     STATUS    RESTARTS   AGE
cattle-system   cattle-cluster-agent-766585f6b-kj88m    0/1       Error     6          4m
cattle-system   cattle-node-agent-wvhqm                 0/1       Error     8          8m
cattle-system   rancher-78947c8548-jzlsr                0/1       Running   1          4m
ingress-nginx   default-http-backend-797c5bc547-f5ztd   1/1       Running   1          4m
ingress-nginx   nginx-ingress-controller-ljvkf          1/1       Running   1          8m
kube-system     canal-4pf9v                             3/3       Running   3          8m
kube-system     cert-manager-6b47fc5fc-jnrl5            1/1       Running   1          4m
kube-system     kube-dns-7588d5b5f5-kgskt               3/3       Running   3          4m
kube-system     kube-dns-autoscaler-5db9bbb766-s698d    1/1       Running   1          4m
kube-system     metrics-server-97bc649d5-6w7zc          1/1       Running   1          4m
kube-system     tiller-deploy-56c4cf647b-j4whh          1/1       Running   1          4m

直到Rancher服务器启动并且DNS/负载均衡器指向新集群,cattle-cluster-agent和cattle-node-agentpods将处于Error或者CrashLoopBackOff状态。

七:查看节点状态

RKE运行完成后会创建kubectl的配置文件kube_config_rancher-cluster-restore.yml,可通过这个配置文件查询K8S集群节点状态:

kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml  get nodes

NAME            STATUS    ROLES                      AGE       VERSION
52.15.238.179   Ready     controlplane,etcd,worker    1m       v1.10.5
18.217.82.189   NotReady  controlplane,etcd,worker   16d       v1.10.5
18.222.22.56    NotReady  controlplane,etcd,worker   16d       v1.10.5
18.191.222.99   NotReady  controlplane,etcd,worker   16d       v1.10.5

八:清理旧节点

通过kubectl从集群中删除旧节点

kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml  delete node 18.217.82.189 18.222.22.56 18.191.222.99

九:添加其他节点

1、编辑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
...

2、更新集群

根据系统类型,选择运行以下命令更新集群:

# MacOS
./rke up --config ./rancher-cluster-restore.yml
# Linux
./rke up --config ./rancher-cluster-restore.yml