2 - RKE集群恢复


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

一:恢复准备

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

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

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

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

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

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

  • 创建快照目录:

  1. 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

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

  • 删除或注释掉整个addons:部分,Rancher部署和设置配置已在etcd数据库中,恢复不再需要;
  • nodes:部分添加恢复节点,注释掉其他节点;例: rancher-cluster-restore.yml
  1. nodes:
  2. - address: 52.15.238.179 # `添加恢复节点`
  3. user: ubuntu
  4. role: [ etcd, controlplane, worker ]
  5. # 注释掉其他节点;
  6. # - address: 52.15.23.24
  7. # user: ubuntu
  8. # role: [ etcd, controlplane, worker ]
  9. # - address: 52.15.238.133
  10. # user: ubuntu
  11. # role: [ etcd, controlplane, worker ]
  12. # 注释掉`addons:`部分
  13. # addons: |-
  14. # ---
  15. # kind: Namespace
  16. # apiVersion: v1
  17. # metadata:
  18. # name: cattle-system
  19. # ---
  20. ...

四:恢复ETCD数据

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

2、根据系统类型,选择运行以下命令还原etcd数据:

  1. # MacOS
  2. ./rke etcd snapshot-restore --name <snapshot>.db --config rancher-cluster-restore.yml
  3. # Linux
  4. ./rke etcd snapshot-restore --name <snapshot>.db --config rancher-cluster-restore.yml

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

五:恢复集群

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

  1. # MacOS
  2. ./rke up --config ./rancher-cluster-restore.yml
  3. # Linux
  4. ./rke up --config ./rancher-cluster-restore.yml

六:重启恢复节点

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

  1. kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml get pods --all-namespaces
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. cattle-system cattle-cluster-agent-766585f6b-kj88m 0/1 Error 6 4m
  4. cattle-system cattle-node-agent-wvhqm 0/1 Error 8 8m
  5. cattle-system rancher-78947c8548-jzlsr 0/1 Running 1 4m
  6. ingress-nginx default-http-backend-797c5bc547-f5ztd 1/1 Running 1 4m
  7. ingress-nginx nginx-ingress-controller-ljvkf 1/1 Running 1 8m
  8. kube-system canal-4pf9v 3/3 Running 3 8m
  9. kube-system cert-manager-6b47fc5fc-jnrl5 1/1 Running 1 4m
  10. kube-system kube-dns-7588d5b5f5-kgskt 3/3 Running 3 4m
  11. kube-system kube-dns-autoscaler-5db9bbb766-s698d 1/1 Running 1 4m
  12. kube-system metrics-server-97bc649d5-6w7zc 1/1 Running 1 4m
  13. 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集群节点状态:

  1. kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. 52.15.238.179 Ready controlplane,etcd,worker 1m v1.10.5
  4. 18.217.82.189 NotReady controlplane,etcd,worker 16d v1.10.5
  5. 18.222.22.56 NotReady controlplane,etcd,worker 16d v1.10.5
  6. 18.191.222.99 NotReady controlplane,etcd,worker 16d v1.10.5

八:清理旧节点

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

  1. 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

  1. nodes:
  2. - address: 52.15.238.179 # `恢复节点`
  3. user: ubuntu
  4. role: [ etcd, controlplane, worker ]
  5. - address: 52.15.23.24
  6. user: ubuntu
  7. role: [ etcd, controlplane, worker ]
  8. - address: 52.15.238.133
  9. user: ubuntu
  10. role: [ etcd, controlplane, worker ]
  11. # addons: |-
  12. # ---
  13. # kind: Namespace
  14. ...

2、更新集群

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

  1. # MacOS
  2. ./rke up --config ./rancher-cluster-restore.yml
  3. # Linux
  4. ./rke up --config ./rancher-cluster-restore.yml