此方法直接使用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-agent
和cattle-node-agent
pods将处于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