manifests/backups/daemonset+cronjob/cfg.yml
songtianlun ba98dbb1b8 feat: add cronjob for node backups
- Create a cronjob to back up node1 data to node8
- Define schedule for daily backups at 3:00 AM
- Include error handling and notifications via Feishu
- Use SSH and rsync for secure and efficient data transfer

This commit introduces a new cronjob that automates the backup process
for node1 to node8, enabling easier management and recovery of data.
The setup includes necessary security measures and proper logging of backups,
ensuring smoother operation and notifications in case of failures.
2025-04-22 14:04:42 +08:00

81 lines
2.8 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: backup-script
namespace: backup-system
data:
backup.sh: |
#!/bin/bash
set -e
# 获取环境变量
MINIO_ENDPOINT="${MINIO_ENDPOINT}"
MINIO_ACCESS_KEY="${MINIO_ACCESS_KEY}"
MINIO_SECRET_KEY="${MINIO_SECRET_KEY}"
MINIO_BUCKET="${MINIO_BUCKET}"
MINIO_SUBPATH="${MINIO_SUBPATH:-backups}"
BACKUPS_TO_KEEP="${BACKUPS_TO_KEEP:-7}"
# 获取主机名
HOSTNAME=$(hostname)
# 检查 /data/local-csi 路径是否存在
if [ ! -d "/data/local-csi" ]; then
echo "目录 /data/local-csi 不存在,退出备份"
exit 0
fi
# 检查目录下是否有至少一个子目录
DIR_COUNT=$(find /data/local-csi -mindepth 1 -maxdepth 1 -type d | wc -l)
if [ "$DIR_COUNT" -eq 0 ]; then
echo "目录 /data/local-csi 中没有子目录,退出备份"
exit 0
fi
# 配置 MinIO 客户端
mc alias set local-minio $MINIO_ENDPOINT $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
# 遍历所有目录
find /data/local-csi -mindepth 1 -maxdepth 1 -type d | while read dir; do
DIR_NAME=$(basename "$dir")
TIMESTAMP=$(date +%Y-%m-%d-%H-%M-%S)
BACKUP_NAME="backup-${DIR_NAME}-${TIMESTAMP}.tar.gz"
BACKUP_PATH="/tmp/${BACKUP_NAME}"
echo "正在备份目录: $dir"
# 创建备份压缩包
tar -czf "$BACKUP_PATH" -C "/data/local-csi" "$DIR_NAME"
# 上传到 MinIO
BACKUP_TARGET_PATH="${MINIO_SUBPATH}/${HOSTNAME}/${DIR_NAME}/"
echo "上传备份 $BACKUP_PATH 到 MinIO 路径: $BACKUP_TARGET_PATH"
# 确保目标目录存在
mc ls "local-minio/${MINIO_BUCKET}/${BACKUP_TARGET_PATH}" > /dev/null 2>&1 || \
mc mb -p "local-minio/${MINIO_BUCKET}/${BACKUP_TARGET_PATH}"
# 上传备份文件
mc cp "$BACKUP_PATH" "local-minio/${MINIO_BUCKET}/${BACKUP_TARGET_PATH}${BACKUP_NAME}"
# 删除本地临时备份
rm "$BACKUP_PATH"
# 清理旧备份
echo "清理旧备份,保留最新的 $BACKUPS_TO_KEEP 个文件"
BACKUP_COUNT=$(mc ls "local-minio/${MINIO_BUCKET}/${BACKUP_TARGET_PATH}" | wc -l)
if [ "$BACKUP_COUNT" -gt "$BACKUPS_TO_KEEP" ]; then
# 列出备份并按时间排序,删除最老的备份
mc ls --json "local-minio/${MINIO_BUCKET}/${BACKUP_TARGET_PATH}" | \
jq -r '. | select(.type=="file") | [.key, .lastModified] | @tsv' | \
sort -k2 | head -n $(($BACKUP_COUNT - $BACKUPS_TO_KEEP)) | \
while read file_info; do
FILE=$(echo "$file_info" | cut -f1)
echo "删除旧备份: $FILE"
mc rm "local-minio/${MINIO_BUCKET}/${BACKUP_TARGET_PATH}${FILE}"
done
fi
done
echo "备份完成"