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}"

执行效果




相关推荐
MAVER1CK1 小时前
Docker容器创建好后修改容器配置
运维·docker·容器
匆匆那年9672 小时前
VSCode 远程 Linux 使用Codex
linux·ide·vscode
SWAGGY..4 小时前
Linux系统编程:(七)Makefile入门:轻松掌握编译自动化
linux·运维·自动化
开开心心就好4 小时前
免费流畅的远程控制实用工具
linux·运维·服务器·网络·智能手机·excel
黑猫学长呀6 小时前
存储宝典第2篇:盲封TT wafer是什么意思?
linux·嵌入式硬件·项目·芯片·ufs·晶圆·产测
Strugglingler6 小时前
【Linux 用户态操作 UART】
linux·uart
代码熬夜敲Q6 小时前
ENSP 网络工程实验
linux·运维·服务器
csdn_life186 小时前
OpenClaw v2026.5.12+ 高级密钥管理:使用SecretRef实现真正的隐蔽存储
linux·openclaw
Terrence Shen6 小时前
Claude Code Harness 源码学习讲义
linux·学习·ubuntu
赵药师7 小时前
dpkg: warning: files list file for package ‘libselinux1:amd64‘ missing;
linux·运维·服务器