2 - RKE集群恢复


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

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

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

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

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

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

    • 创建快照目录:

      • 如果使用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. # role: [ etcd, controlplane, worker ]
    11. # 注释掉`addons:`部分
    12. # addons: |-
    13. # ---
    14. # kind: Namespace
    15. # metadata:
    16. # name: cattle-system
    17. # ---
    18. ...

    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

    五:恢复集群

    六:重启恢复节点

    恢复节点重启后,检查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 tiller-deploy-56c4cf647b-j4whh 1/1 Running 1 4m

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

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

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