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指定了备份间隔和保留份数

1services: 2 etcd: 3 backup_config: 4 enabled: true 5 interval_hours: 1 6 retention: 30

参数说明:

1interval_hours: 1,快照创建间隔时间(以小时为单位),不加此参数,默认5分钟;不支持自定义单位和小数值。 2retention: 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 文件,文件中保存了集群的配置信息和各组件使用的证书信息(不用单独备份所有的证书)。

1cd /opt/rancher/deploy 2rke 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

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

3)复制快照文件

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

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

2020-02-26T06:45:17Z_etcd

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

1rancher-cluster.yml 2rancher-cluster.rkestate

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

1nodes: 2- address: 172.16.5.93 3 user: rancher 4 role: [ "controlplane", "etcd", "worker" ] 5 ssh_key_path: ~/.ssh/id_rsa 6#- address: 172.16.5.94 7# user: rancher 8# role: [ "controlplane", "etcd", "worker" ] 9# ssh_key_path: ~/.ssh/id_rsa 10#- address: 172.16.5.95 11# user: rancher 12# role: [ "controlplane", "etcd", "worker" ] 13# ssh_key_path: ~/.ssh/id_rsa 14 15private_registries: 16- url: reg.nexus.wmq.com 17 user: admin 18 password: "admin123" 19 is_default: true 20 21#services: 22# etcd: 23# backup_config: 24# enabled: true 25# interval_hours: 1 26# retention: 30

2.3 免密登入

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

useradd rancher -G docker

#设置密码

passwd rancher

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

vim /etc/ssh/sshd_config

1PasswordAuthentication yes 2 3# 重启ssh 4systemctl restart sshd

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

1ssh-keygen -t rsa 2ssh-copy-id rancher@172.16.5.93 3ssh-copy-id rancher@172.16.5.94 4ssh-copy-id rancher@172.16.5.95

2.4 恢复ETCD数据

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

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

1cd /opt/rancher/deploy/ 2./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主页也可以访问了。

1./kubectl --kubeconfig=kube_config_rancher-cluster.yml get nodes 2NAME STATUS ROLES AGE VERSION 3172.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,添加或者取消其他节点的注释。

1nodes: 2- address: 172.16.5.93 3 user: rancher 4 role: [ "controlplane", "etcd", "worker" ] 5 ssh_key_path: ~/.ssh/id_rsa 6- address: 172.16.5.94 7 user: rancher 8 role: [ "controlplane", "etcd", "worker" ] 9 ssh_key_path: ~/.ssh/id_rsa 10- address: 172.16.5.95 11 user: rancher 12 role: [ "controlplane", "etcd", "worker" ] 13 ssh_key_path: ~/.ssh/id_rsa 14 15private_registries: 16- url: reg.nexus.wmq.com 17 user: admin 18 password: "admin123" 19 is_default: true 20 21#system-images: 22# kubernetes: rancher/hyperkube:v1.17.2-rancher1 23# 24#services: 25# etcd: 26# backup_config: 27# enabled: true 28# interval_hours: 1 29# retention: 30

更新集群

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

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

1./kubectl --kubeconfig=kube_config_rancher-cluster.yml get nodes 2NAME STATUS ROLES AGE VERSION 3172.16.5.93 Ready controlplane,etcd,worker 24h v1.17.2 4172.16.5.94 Ready controlplane,etcd,worker 84s v1.17.2 5172.16.5.95 Ready controlplane,etcd,worker 84s v1.17.2
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Rancher RKE 集群备份与恢复 - HelloWorld