shell常用备份脚本
来源:原创
时间:2021-09-27
作者:脚本小站
分类:SHELL
备份k8s镜像的脚本:
批量获取镜像:
kubectl get deployments.apps -o custom-columns=CONTAINER:.spec.template.spec.containers[0].name,IMAGE:.spec.template.spec.containers[0].image
单个获取镜像:
kubectl get deployments.apps <deployment-name> -o custom-columns=CONTAINER:.spec.template.spec.containers[0].name,IMAGE:.spec.template.spec.containers[0].image CONTAINER IMAGE admin 192.168.199.240/test-registry/admin:test-release-init-09071121
备份deployment的脚本:
#!/bin/bash /usr/local/bin/kubectl config use-context k8s-prd /usr/local/bin/kubectl get deployment -o yaml > /home/bin/prd/deployments-default-`date "+%Y-%m-%d-%T"`.yaml /usr/local/bin/kubectl get deployment -o yaml > /home/bin/prd/svc-default-`date "+%Y-%m-%d-%T"`.yaml
每小时备份,按天区分目录:
#!/bin/bash # 功能:每小时采集 Kubernetes 部署信息,按日期归档,自动清理30天前数据 # 安全机制:关键操作前验证路径、错误重试、日志跟踪 # ===== 核心配置 ===== OUTPUT_ROOT="/opt/k8s_deployments" # 存储根目录(按需修改) RETENTION_DAYS=30 # 目录保留天数 LOG_FILE="/var/log/k8s_deployment_clean.log" # 统一日志路径 # 创建日志文件(首次运行) mkdir -p "$(dirname "$LOG_FILE")" touch "$LOG_FILE" # 生成日期标记 CURRENT_DATE=$(date +"%Y-%m-%d") CURRENT_HOUR=$(date +"%H") FILE_NAME="eksprd-deployments-${CURRENT_DATE}-${CURRENT_HOUR}.txt" DAILY_DIR="${OUTPUT_ROOT}/${CURRENT_DATE}" # ===== 1. 数据采集 ===== mkdir -p "$DAILY_DIR" echo "[$(date +'%F %T')] 开始采集集群部署配置..." >> "$LOG_FILE" # 关键命令安全执行(错误重试) if ! kubectl get deployments.apps -A -o custom-columns=NAMESPACE:.metadata.namespace,CONTAINER:.spec.template.spec.containers[0].name,IMAGE:.spec.template.spec.containers[0].image > "${DAILY_DIR}/${FILE_NAME}" 2>> "$LOG_FILE"; then echo "[ERROR] 命令执行失败!请检查kubectl权限或集群状态" >> "$LOG_FILE" exit 1 fi # ===== 2. 旧目录清理 ===== echo "[$(date +'%F %T')] 启动历史目录清理(阈值: ${RETENTION_DAYS}天)..." >> "$LOG_FILE" find "$OUTPUT_ROOT" -mindepth 1 -maxdepth 1 -type d -mtime +"$RETENTION_DAYS" -print0 | while IFS= read -r -d $'\0' dir; do # 安全防护:确认路径在根目录下防止误删 if [[ "$dir" == "${OUTPUT_ROOT}/"* ]]; then echo "删除过期目录: $dir" >> "$LOG_FILE" rm -rf "$dir" else echo "[WARNING] 拒绝删除外部目录: $dir" >> "$LOG_FILE" fi done echo "[$(date +'%F %T')] 操作完成. 数据已保存至: ${DAILY_DIR}/${FILE_NAME}" >> "$LOG_FILE"
备份confluence应用文件脚本:
#!/bin/bash export TODAY=`date +%Y-%m-%d` export YESTERDAY=`date "+%Y-%m-%d" -d '1 day ago'` export BASEDIR=/root/confluence/files export DEST=${BASEDIR}/confluence-$TODAY export LINKDEST=${BASEDIR}/confluence-$YESTERDAY if [ ! -d $LINKDEST ]; then mkdir $LINKDEST fi rsync -av --delete --exclude="backups/*" --link-dest $LINKDEST 192.168.0.67:/var/atlassian/application-data/confluence $DEST > ${BASEDIR}/${TODAY}.log
备份confluence数据库脚本:
#!/bin/bash /usr/bin/mysqldump -h192.168.0.67 -P3308 -uconfluence -pconfluence confluence | gzip > /root/confluence/databases/confluence-`date "+%Y-%m-%d-%T"`.sql.gz
备份deployment和service脚本:将deployment和service搞到一个文件,一个控制器一个文件。
#!/bin/bash export kubectl=/usr/local/bin/kubectl export DATE=`date "+%Y-%m-%d-%H-%M-%S"` export NAMESPACE=default export BACKUP_DIR=backups-${DATE}-${NAMESPACE} kubectl config use-context dev mkdir $BACKUP_DIR for var in `kubectl get deployments.apps -n $NAMESPACE | grep -v NAME | awk '{print $1}'` do filename=$BACKUP_DIR/deployments-svc-${NAMESPACE}-${var}-${DATE}.yaml kubectl get deployments.apps -n $NAMESPACE $var -o yaml > $filename echo "---" >> $filename kubectl get svc -n $NAMESPACE $var -o yaml >> $filename done