备份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