每天定时备份指定namespace下yaml到指定目录中

目录:

/yaml_bak

备份脚本:

# cat /yaml_bak/get-k8syaml.sh



#!/bin/bash

source /etc/profile


set -e

useage(){
    echo "useage:"
    echo "  dumpk8s.sh DUMPDIR [NAMESPACE]"
}

if [ $# -lt 1 ];then
    useage
    exit
fi

DUMPDIR=$1
NAMESPACE=$2

list_names(){
    /usr/bin/kubectl -n "${1}" get "${2}" -o custom-columns='NAME:metadata.name' --no-headers
}

dump_workload(){
    local NAMESPACE=$1
    local WORKLOAD_NAME=$2
    local i
    mkdir -p "${DUMPDIR}/${NAMESPACE}/${WORKLOAD_NAME}"
    mapfile -t WORKLOADS < <(list_names "${NAMESPACE}" "${WORKLOAD_NAME}")
    for ((i=1;i<=${#WORKLOADS[@]};i++ )); do
        WORKLOAD="${WORKLOADS[$i-1]}"
        echo "Dumping ${NAMESPACE} ${WORKLOAD_NAME} ${WORKLOAD}"
        /usr/bin/kubectl -n "${NAMESPACE}" get "${WORKLOAD_NAME}" "${WORKLOAD}" -o yaml --export > "${DUMPDIR}/${NAMESPACE}/${WORKLOAD_NAME}/${WORKLOAD}.yaml" 2>/dev/null
    done
}

if [ -z "${NAMESPACE}" ];then
mapfile -t WORKLOAD_NAMES < <(/usr/bin/kubectl api-resources -oname --namespaced=false | grep -vE "(componentstatuses|authentication.k8s.io|authorization.k8s.io)")
NAMESPACE="default"
else
mapfile -t WORKLOAD_NAMES < <(/usr/bin/kubectl api-resources -oname --namespaced=true | grep -vE "(bindings|secrets|authorization.k8s.io)")
fi
mkdir -p "${DUMPDIR}/${NAMESPACE}"
for ((i=1;i<=${#WORKLOAD_NAMES[@]};i++ )); do
    WORKLOAD_NAME="${WORKLOAD_NAMES[$i-1]}"
    dump_workload "${NAMESPACE}" "${WORKLOAD_NAME}"
done

echo "Done"

执行备份脚本

# cat cron.sh 
#!/bin/bash
###计划任务调用备份脚本

source /etc/profile;/bin/bash /yaml_bak/get-k8syaml.sh /yaml_bak/`date +%Y%m%d` qa

计划任务

# k8s yaml bak
03 02 * * * ./etc/profile;/bin/bash /yaml_bak/cron.sh > /yaml_bak/log

执行结果

 可以看到qa namespace下所有的资源yaml都备份下来了

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐