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

执行效果




相关推荐
柳鲲鹏8 分钟前
LINUX高通平台交叉编译地图软件GDAL
linux
fei_sun17 分钟前
路径MTU发现
linux·运维·网络
云烟成雨TD1 小时前
Kubernetes 系列【4】基础概念
云原生·容器·kubernetes
假如梵高是飞行员1 小时前
WSL2 从 img 镜像文件启动特定 Linux 发行版完整指南
linux·windows·wsl
瓶中怪3 小时前
ROS2 机器人软件系统
linux·c++·python·ubuntu·vmware·ros2·机器人软件开发
iangyu3 小时前
linux配置时间同步
linux·运维·服务器
云烟成雨TD3 小时前
Kubernetes 系列【3】使用 kubeadm 创建 K8s 集群
云原生·容器·kubernetes
天空'之城3 小时前
Linux 系统编程 04:进程基础
linux·开发语言·进程基础
从零开始的代码生活_3 小时前
NAT、代理服务与内网穿透详解
linux·服务器·网络·c++·http·智能路由器
灯厂码农3 小时前
C语言内存管理——内存对齐与共用体union
linux·服务器·c语言