备份Kubernetes资源清单文件脚本
脚本文件
dump_yaml_by_namespace.sh
1#!/bin/bash
2
3# 作用:
4# 备份指定namespace下的kubernetes资源清单文件
5
6# ===== 变量定义 =====
7namespace=$1
8manifests=${2:-manifests}
9today=$(date +%Y%m%d)
10
11# ===== 函数定义部分 =====
12# 红色终端显示
13function red() {
14 local body=$1
15 echo -e "\033[31m${body}\033[0m"
16}
17
18# 绿色终端显示
19function green() {
20 local body=$1
21 echo -e "\033[32m${body}\033[0m"
22}
23
24# 导出yaml格式的文件
25function dump_to_yaml() {
26 local type=$1
27 green "get ${namespace} ${type}."
28 for i in $(kubectl get ${type} -n ${namespace} 2>/dev/null | awk '{if(NR!=1) print $1}'); do
29 kubectl get ${type} -n ${namespace} $i -oyaml \
30 > ${manifests}/${namespace}/${today}/${type}/${i}.yaml 2>/dev/null
31 if [ $? -ne 0 ]; then
32 red "failed to get ${namespace} ${type} $i."
33 fi
34 done
35}
36
37# 删除资源清单为空的目录
38function delete_empty_dir(){
39 green "delete empty directory."
40 # 显示空目录
41 find ${manifests} -type d -empty
42 # 删除空目录
43 find ${manifests} -type d -empty | xargs rm -rf
44}
45
46# 获取镜像列表并显示在终端
47function fn_get_images(){
48 green "get ${namespace} image"
49 if [ -f ${manifests}/${namespace}/${today}/images.txt ]; then
50 rm -f ${manifests}/${namespace}/${today}/images.txt
51 fi
52
53 grep "image:" ${manifests}/${namespace}/${today}/*/*.yaml | awk '{print $NF}' \
54 >> ${manifests}/${namespace}/${today}/images.txt
55 cat ${manifests}/${namespace}/${today}/images.txt
56}
57
58# 检测是否有输入namespace,若无输入从指定namespace列表中选取
59function check_namespace(){
60 if [ -z $namespace ]; then
61 red "namespace undefined, select namespace serial number from bellow:"
62 select ns in $(kubectl get ns | awk '{if(NR!=1) print $1}'); do
63 namespace=$ns
64 break
65 done
66 fi
67}
68
69# 准备资源清单目录
70function prepare_resource_dir(){
71 for dir in deployment daemonset cronjob configmap service secret; do
72 if [ ! -d ${manifests}/${namespace}/${today}/${dir} ]; then
73 mkdir -p ${manifests}/${namespace}/${today}/${dir}
74 fi
75 done
76}
77
78# ===== 程序执行部分 =====
79# 检查namespace
80check_namespace
81
82# 1.准备资源清单目录
83prepare_resource_dir
84
85# 2.启动备份
86for type in secret daemonset deployment cronjob configmap service; do
87 dump_to_yaml ${type}
88done
89
90# 3.删除空目录
91delete_empty_dir
92
93# 4.显示镜像列表
94fn_get_images
dump_all.sh
1#!/bin/bash
2
3backup_dir=manifests
4
5# 备份所有namespace下资源清单文件
6for ns in ${kubectl get ns | awk '{if(NR>1)print $1}'}; do
7 ./dump_yaml_by_namespace.sh $ns ${backup_dir}
8done
扩展
- 可以将脚本设置为定时任务运行,定时备份资源清单文件;
- 可以将备份上传到指定的文件服务器上,比如对象存储;
- 还可以使用第三方备份工具velero来管理kubernetes资源。
- 原文作者:黄忠德
- 原文链接:https://huangzhongde.cn/post/Kubernetes/%E5%A4%87%E4%BB%BDk8s%E8%B5%84%E6%BA%90%E6%B8%85%E5%8D%95%E6%96%87%E4%BB%B6%E8%84%9A%E6%9C%AC/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。