k8s集群configmap和secrets备份脚本

脚本内容

shell 复制代码
#!/bin/bash
set -euo pipefail  # 开启严格模式,脚本出错立即停止

# ====================== 配置项 ======================
BACKUP_ROOT="/backup/k8s-configs"           # 备份根目录
TIMESTAMP=$(date +%Y%m%d-%H%M%S)            # 备份时间戳
BACKUP_DIR="${BACKUP_ROOT}/${TIMESTAMP}"    # 本次备份目录
RETENTION_DAYS=7000000                        # 保留备份(天)
# ====================================================

# 颜色输出(可选,方便看日志)
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color

echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN}开始 K8s ConfigMap + Secret 全量备份${NC}"
echo -e "${GREEN}备份目录: ${BACKUP_DIR}${NC}"
echo -e "${GREEN}============================================${NC}"

# 1. 创建备份根目录
mkdir -p "${BACKUP_DIR}" || { echo -e "${RED}创建备份目录失败!${NC}"; exit 1; }

# 2. 获取集群所有命名空间
ALL_NAMESPACES=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}')
if [ -z "${ALL_NAMESPACES}" ]; then
    echo -e "${RED}获取命名空间失败,请检查 kubectl 连接!${NC}"
    exit 1
fi

# 3. 遍历所有命名空间,逐个备份
for NS in ${ALL_NAMESPACES}; do
    echo -e "\n${GREEN}→ 正在备份命名空间: ${NS}${NC}"

    # 创建该命名空间的备份子目录
    CM_DIR="${BACKUP_DIR}/${NS}/configmaps"
    SEC_DIR="${BACKUP_DIR}/${NS}/secrets"
    mkdir -p "${CM_DIR}" "${SEC_DIR}"

    # ====================== 备份 ConfigMap(每个单独文件) ======================
    echo "  └─ 备份 ConfigMap..."
    # 获取当前 ns 下所有 configmap 名称
    CM_LIST=$(kubectl get configmap -n "${NS}" -o name 2>/dev/null | cut -d'/' -f2)
    for CM in ${CM_LIST}; do
        kubectl get configmap "${CM}" -n "${NS}" -o yaml > "${CM_DIR}/${CM}.yaml"
        echo "    ✔ ${CM}.yaml"
    done

    # ====================== 备份 Secret(每个单独文件) ======================
    echo "  └─ 备份 Secret..."
    # 获取当前 ns 下所有 secret 名称
    SEC_LIST=$(kubectl get secret -n "${NS}" -o name 2>/dev/null | cut -d'/' -f2)
    for SEC in ${SEC_LIST}; do
        kubectl get secret "${SEC}" -n "${NS}" -o yaml > "${SEC_DIR}/${SEC}.yaml"
        echo "    ✔ $SEC}.yaml"
    done
done

# 4. 清理过期备份(删除7天前的目录)
echo -e "\n${GREEN}→ 清理 ${RETENTION_DAYS} 天前的旧备份...${NC}"
find "${BACKUP_ROOT}" -type d -mtime +"${RETENTION_DAYS}" -exec rm -rf {} \; 2>/dev/null

# 完成
echo -e "\n${GREEN}============================================${NC}"
echo -e "${GREEN}✅ 备份完成!所有资源已单独存储${NC}"
echo -e "${GREEN}============================================${NC}"

执行效果




相关推荐
张小姐的猫5 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
CodeMartain5 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
YuanDaima20486 小时前
Linux 进阶运维与 AI 环境实战:进程管理、网络排错与 GPU 监控
linux·运维·服务器·网络·人工智能
牛奶咖啡136 小时前
k8s容器编排技术实践——使用containerd作为容器运行时部署k8s集群
kubernetes·k8s的安装部署·开启系统的ipvs支持·安装containerd·containerd配置加速器·安装k8s的工具·安装calico网络插件
万里侯7 小时前
云原生数据备份与恢复:保障数据安全的最佳实践
微服务·容器·k8s
lolo大魔王7 小时前
Linux 数据文件处理实战:排序、搜索、压缩、归档一站式详解
linux·运维·服务器
llrraa20107 小时前
配置docker国内镜像源
运维·docker·容器
starvapour7 小时前
Ubuntu切换到Fcitx5中文输入法
linux·运维·ubuntu
lolo大魔王8 小时前
Linux的监测程序
linux·运维·github
.YYY8 小时前
RHCE--Linux循环执行的例行性任务:crontab从入门到精通
linux·运维·服务器