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