Rancher RKE 集群备份与恢复

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

一、备份

参考官网备份步骤,本文采用的是 RKE HA部署的,三台服务器都是全部角色

1.1 自动备份

RKEv0.2以后默认ETCD自动备份没有开启,需要使用额外的配置参数启用etcd-snapshot服务。默认情况下,etcd-snapshot服务为具有etcd角色的每个节点获取快照,并将它们存储到本地磁盘/opt/rke/etcd-snapshot目录中。

在部署kubernetes的时候已经在rancher-cluster.yml指定了备份间隔和保留份数

services:
  etcd:
    backup_config:
      enabled: true
      interval_hours: 1
      retention: 30

参数说明:

interval_hours: 1,快照创建间隔时间(以小时为单位),不加此参数,默认5分钟;不支持自定义单位和小数值。
retention: 30,etcd备份保留份数;

如果修改这两个参数后,直接重新部署一次即可

rke up --config ./rancher-cluster.yml

注意:会重启kube-apiserver、kube-scheduler、kube-controller-manager、etcd-rolling-snapshots四个容器。不影响rancher集群的运行。自动备份会在每个etcd节点上的 /opt/rke/etcd-snapshots 目录生成备份文件,只需定时复制一份到远程存储中。

1.2 手动备份

从rke v0.2.0开始,当rke 创建集群后,会在配置文件当前目录下生成 rancher-cluster.rkestate 文件,文件中保存了集群的配置信息和各组件使用的证书信息(不用单独备份所有的证书)。

cd /opt/rancher/deploy
rke etcd snapshot-save --name etcd_back_0612_1743 --config rancher-cluster.yml

把生成的备份文件,rancher-cluster.yml,rancher-cluster.rkestate 进行备份到远程存储中。

二、恢复

参考官网恢复步骤,本文采用的是将三台全部角色都初始化(提前备份快照、rkestate文件,集群配置文件),并都安装好docker服务。

2.1 恢复准备

1)需要在进行操作的主机上提前安装RKE安装kubectl

2)准备备份的ETCD快照文件,rancher-cluster.rkestate文件,rancher-cluster.yml配置文件

3)在开始还原之前,请确保已停止旧集群节点上的所有kubernetes服务。

4)建议创建三个全新节点作为集群恢复的目标节点。也可以初始化现有三个节点。

2.2 准备文件

1)三台机器都还原初始化,安装docker(步骤略)

2)先在其中一台新机器上下载最新的版本rke和kubectl

mkdir -p /opt/rancher/deploy && cd /opt/rancher/deploy
wget https://docs.rancher.cn/download/rke/v1.0.4-rke_linux-amd64
wget https://docs.rancher.cn/download/kubernetes/linux-amd64-v1.17.3-kubectl
mv v1.0.4-rke_linux-amd64 rke
mv linux-amd64-v1.17.3-kubectl kubectl
chmod +x ./*

3)复制快照文件

mkdir -p /opt/rke/etcd-snapshots/

复制备份的最新快照到/opt/rke/etcd-snapshots/目录,可能是zip文件需解压,可能是如下文件。

2020-02-26T06:45:17Z_etcd

4)将rkestate文件,集群配置文件也放在 /opt/rancher/deploy 目录中,并重命名配置文件

rancher-cluster.yml
rancher-cluster.rkestate

修改 rancher-cluster.yml 文件,注释掉etcd部分,nodes只保留一个恢复节点。

nodes:
- address: 172.16.5.93
  user: rancher
  role: [ "controlplane", "etcd", "worker" ]
  ssh_key_path: ~/.ssh/id_rsa
#- address: 172.16.5.94
#  user: rancher
#  role: [ "controlplane", "etcd", "worker" ]
#  ssh_key_path: ~/.ssh/id_rsa
#- address: 172.16.5.95
#  user: rancher
#  role: [ "controlplane", "etcd", "worker" ]
#  ssh_key_path: ~/.ssh/id_rsa

private_registries:
- url: reg.nexus.wmq.com
  user: admin
  password: "admin123"
  is_default: true

#services:
#  etcd:
#    backup_config:
#      enabled: true
#      interval_hours: 1
#      retention: 30

2.3 免密登入

1、创建rancher账号并加入docker组(三台都执行)

useradd rancher -G docker

#设置密码

passwd rancher

2、root账户可登入(三台都执行)

vim /etc/ssh/sshd_config

PasswordAuthentication yes

# 重启ssh
systemctl restart sshd

3、root账户免登入(rke安装的节点执行)

ssh-keygen -t rsa
ssh-copy-id rancher@172.16.5.93
ssh-copy-id rancher@172.16.5.94
ssh-copy-id rancher@172.16.5.95

2.4 恢复ETCD数据

切换到RKE二进制文件所在的目录,并且修改的rancher-cluster-restore.yml文件也需要放在同一路径下。

运行以下命令还原etcd数据:

cd /opt/rancher/deploy/
./rke etcd snapshot-restore --name 2020-02-26T06:45:17Z_etcd --config rancher-cluster.yml

成功会提示: INFO[0100] Finished restoring snapshot [2020-02-26T06:45:17Z_etcd] on all etcd hosts

查看集群节点正常,rancher主页也可以访问了。

./kubectl --kubeconfig=kube_config_rancher-cluster.yml get nodes
NAME          STATUS   ROLES                      AGE   VERSION
172.16.5.93   Ready    controlplane,etcd,worker   23h   v1.17.2

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

cattle-cluster-agentcattle-node-agentpods将处于Error或者CrashLoopBackOff状态。查看日志显示如下错误:

ERROR: https://rancher.qaz123.wmq.com/ping is not accessible (Failed to connect to rancher.qaz123.wmq.com port 443: Connection timed out)

2.5 恢复集群

通过RKE在恢复节点上启动集群。运行以下命令运行集群:

./rke up --config ./rancher-cluster.yml

然后重启恢复节点主机

reboot

重启后,检查Kubernetes Pods的状态

./kubectl --kubeconfig=kube_config_rancher-cluster.yml get pods -A

注意:看节点状态,如果发现其余的残留主机,可以执行下面命令删除掉NotReady 的节点

./kubectl --kubeconfig=kube_config_rancher-cluster.yml delete node 172.16.5.94 172.16.5.95

2.6 添加其他节点

确定 local 集群的 System 项目下的服务都启动正常后,继续添加其他主机。

编辑RKE配置文件rancher-cluster.yml,添加或者取消其他节点的注释。

nodes:
- address: 172.16.5.93
  user: rancher
  role: [ "controlplane", "etcd", "worker" ]
  ssh_key_path: ~/.ssh/id_rsa
- address: 172.16.5.94
  user: rancher
  role: [ "controlplane", "etcd", "worker" ]
  ssh_key_path: ~/.ssh/id_rsa
- address: 172.16.5.95
  user: rancher
  role: [ "controlplane", "etcd", "worker" ]
  ssh_key_path: ~/.ssh/id_rsa

private_registries:
- url: reg.nexus.wmq.com
  user: admin
  password: "admin123"
  is_default: true

#system-images:
#    kubernetes: rancher/hyperkube:v1.17.2-rancher1
#
#services:
#  etcd:
#    backup_config:
#      enabled: true
#      interval_hours: 1
#      retention: 30

更新集群

./rke up --config ./rancher-cluster.yml

集群启动正常后,查看集群节点状态

./kubectl --kubeconfig=kube_config_rancher-cluster.yml get nodes
NAME          STATUS   ROLES                      AGE   VERSION
172.16.5.93   Ready    controlplane,etcd,worker   24h   v1.17.2
172.16.5.94   Ready    controlplane,etcd,worker   84s   v1.17.2
172.16.5.95   Ready    controlplane,etcd,worker   84s   v1.17.2
上一篇:ORACLE 存储过程IN关键字使用问题


下一篇:windows下pycharm pro 配置远程docker中的python解释器(看了可以避坑)