使用etcd备份恢复v1.0.14rke 高可用集群
1. 背景说明
需要对原有的3节点高可用的rke集群进行迁移,原来的3个节点角色都是controlplane,etcd,worker。
利用原rke集群的etcd备份来进行集群恢复。
2. 需要的准备
2.1 新节点准备
3个新节点ip如下:192.168.0.56,192.168.0.57,192.168.0.58
硬件参数尽量与原来的3个节点保持一致,其他的基础环境配置也保持一致,例如:docker版本、内核参数、防火墙规则等。
新的3个节点,使用普通用户docker添加ssh互信。后面的所有操作都在docker用户下。
2.2 配置文件
把原集群的两个配置文件cluster.rkestate、cluster.yml,rke_linux-amd64这个二进制文件,/opt/rke/etcd-snapshots/下面的etcd备份文件(格式如:2021-02-18T15:28:28Z_etcd.zip)复制到新集群的控制节点(192.168.0.56)上。后面的所有操作都在控制节点上以普通用户权限执行。
192.168.0.56的备份恢复目录是/home/docker
下面有3个文件:
rancher-cluster-restore.rkestate (原集群的cluster.rkestate文件,包含集群的状态信息,CA证书信息)
rancher-cluster-restore.yml(原集群的cluster.yml文件,包含集群配置信息)
rke_linux-amd64(rke二进制文件,直接从原集群复制过来,保持版本一致)
# 新建etcd备份目录:
mkdir -pv /opt/rke/etcd-snapshots/
mv 2021-02-18T15:28:28Z_etcd.zip /opt/rke/etcd-snapshots/
cd /opt/rke/etcd-snapshots/
unzip 2021-02-18T15:28:28Z_etcd.zip
# 解压生成备份文件:
backup/2021-02-18T15:28:28Z_etcd
必须确保4个文件都已经在
指定的目录下,且文件名按照要求配置
刚开始我就是随便找了个目录放etcd的备份文件,且两个配置文件的文件名也不一致,出了很多错误
3. 开始恢复
开始恢复之前确保3个新的节点需要做的准备工作已经完成。如果主机之前已经使用过,可以使用如下清理脚本清理主机环境。
3.1 环境清理脚本
官方参考:https://docs.rancher.cn/docs/rancher2/cluster-admin/cleaning-cluster-nodes/_index
docker rm -f $(sudo docker ps -aq);
docker volume rm $(sudo docker volume ls -q);
rm -rf /etc/cni \
/etc/kubernetes \
/opt/cni \
/opt/rke \
/run/secrets/kubernetes.io \
/run/calico \
/run/flannel \
/var/lib/calico \
/var/lib/etcd \
/var/lib/cni \
/var/lib/kubelet \
/var/lib/rancher/rke/log \
/var/log/containers \
/var/log/pods \
/var/run/calico
for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher; do umount $mount; done
rm -f /var/lib/containerd/io.containerd.metadata.v1.bolt/meta.db
# 清理Iptables表
## 注意:如果节点Iptables有特殊配置,以下命令请谨慎操作
sudo iptables --flush
sudo iptables --flush --table nat
sudo iptables --flush --table filter
sudo iptables --table nat --delete-chain
sudo iptables --table filter --delete-chain
sudo systemctl restart containerd docker
注意:Iptables规则清理的时候,一定要小心谨慎操作,否则主机可能会连不上,只能重启。
3.2 修改配置文件
切换到docker用户,cd到/home/docker下,修改配置文件
官方参考
要点如下:
- 删除或注释掉整个addons:部分。Rancher 的部署和支持配置已经在etcd数据库中。
- 更改您的nodes部分以指向还原节点。
- 注释掉不是您的“目标节点”的节点。我们希望集群仅在该节点上启动。
PS:感觉官方文档讲的不细致,或者说细节描述的不够清晰,这里也走了很多弯路
修改后的配置文件如下:
# If you intened to deploy Kubernetes in an air-gapped environment,
# please consult the documentation on how to configure custom RKE images.
nodes:
- address: 192.168.0.56
port: "22"
internal_address: ""
role:
- controlplane
- worker
- etcd
hostname_override: ""
user: docker
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ~/.ssh/id_rsa
ssh_cert: ""
ssh_cert_path: ""
labels: {
}
taints: []
#- address: 192.168.0.57
# port: "22"
# internal_address: ""
# role:
# - controlplane
# - worker
# - etcd
# hostname_override: ""
# user: docker
# docker_socket: /var/run/docker.sock
# ssh_key: ""
# ssh_key_path: ~/.ssh/id_rsa
# ssh_cert: ""
# ssh_cert_path: ""
# labels: {}
# taints: []
#- address: 192.168.0.58
# port: "22"
# internal_address: ""
# role:
# - controlplane
# - worker
# - etcd
# hostname_override: ""
# user: docker
# docker_socket: /var/run/docker.sock
# ssh_key: ""
# ssh_key_path: ~/.ssh/id_rsa
# ssh_cert: ""
# ssh_cert_path: ""
# labels: {}
# taints: []
services:
#etcd:
# image: ""
# extra_args:
# auto-compaction-retention: 3 #(单位小时)
# # 修改空间配额为$((6*1024*1024*1024)),默认2G,最大8G
# quota-backend-bytes: '6442450944'
# extra_binds: []
# extra_env: []
# external_urls: []
# ca_cert: ""
# cert: ""
# key: ""
# path: ""
# uid: 0
# gid: 0
# snapshot: null
# retention: ""
# creation: ""
# backup_config:
# enabled: true
# interval_hours: 2 # 每1小时备份一次
# retention: 36 # 保留24个备份
kube-api:
image: ""
extra_args: {
}
extra_binds: []
extra_env: []
service_cluster_ip_range: 10.243.0.0/16
service_node_port_range: ""
pod_security_policy: false
always_pull_images: false
secrets_encryption_config: null
audit_log: null
admission_configuration: null
event_rate_limit

本文详细介绍如何使用etcd备份来恢复RKE高可用集群,包括新节点的准备、配置文件调整、etcd备份恢复步骤及集群恢复过程,并分享了过程中遇到的问题及解决方案。
最低0.47元/天 解锁文章
749

被折叠的 条评论
为什么被折叠?



