众所周知,由于下游K3s/K8s集群的正常运转不依赖于Rancher,也就是说Rancher故障不影响下游集群里的服务,所以Rancher的单点故障容忍度是很高的。
这也是很多小伙伴使用Docker部署单节点Rancher用于管理集群的原因,然而容忍度很高却不代表真的不用考虑单点故障,单点Rancher损坏带来的麻烦也很多。
这里为大家奉上利用crontab自动备份Rancher的脚本。希望能帮到曾因Rancher单点故障而备受困扰的朋友。
备份脚本
vi rancher-backup.sh
# $PWD在crontab中是用户目录 比如root用户执行就是/root
BackupPath=$PWD
RANCHER_CONTAINER_TAG=v2.8.5
RANCHER_CONTAINER_NAME=rancher
RANCHER_VERSION=v2.8.5
DATE=$(date +%Y-%m-%d-%H-%M-%S)
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher backup Beginning, use vars: '
echo 'RANCHER_CONTAINER_TAG: ' $RANCHER_CONTAINER_TAG
echo 'RANCHER_CONTAINER_NAME: ' $RANCHER_CONTAINER_NAME
echo 'RANCHER_VERSION: ' $RANCHER_VERSION
echo 'DATE: ' $DATE
docker stop $RANCHER_CONTAINER_NAME
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher container stopped'
docker create --volumes-from $RANCHER_CONTAINER_NAME --name rancher-data-$DATE rancher/rancher:$RANCHER_CONTAINER_TAG
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher volumes created'
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher backup doing'
docker run --name busybox-backup-$DATE --volumes-from rancher-data-$DATE -v $BackupPath:/backup:z busybox tar pzcvf /backup/rancher-data-backup-$RANCHER_VERSION-$DATE.tar.gz /var/lib/rancher
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher backup tar.gz file created'
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher backup tmp resources cleaning'
docker rm rancher-data-$DATE
docker rm busybox-backup-$DATE
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher backup tmp resources clean done'
docker start $RANCHER_CONTAINER_NAME
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher container started'
echo [$(date +%Y-%m-%d\ %H:%M:%S)] 'Rancher backup success'
Crontab自动备份脚本
crontab -e
# 每天凌晨2:40执行一次
40 2 * * * sh /app/rancher/stable/rancher-backup.sh >> /app/rancher/stable/rancher-backup.log
恢复脚本
BackupPath=$PWD
RANCHER_CONTAINER_TAG=v2.8.5
RANCHER_CONTAINER_NAME=rancher
RANCHER_VERSION=v2.8.5
DATE=$(date +%Y-%m-%d-%H-%M-%S)
# 停止当前运行 Rancher Server 的容器
docker stop $RANCHER_CONTAINER_NAME
# 危险
# 该命令将删除 Rancher Server 容器中的所有当前状态数据。创建备份压缩包后保存的任何更改都将丢失。
docker run --volumes-from $RANCHER_CONTAINER_NAME -v $BackupPath:/backup \
busybox sh -c "rm /var/lib/rancher/* -rf && \
tar pzxvf /backup/rancher-data-backup-$RANCHER_CONTAINER_NAME-$DATE.tar.gz"
# 启动容器
docker start $RANCHER_CONTAINER_NAME
发表回复