T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件

server/2024/9/25 2:54:01/

大家好,我叫秋意零

最近对公司进行日常运维工作时,出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时,业务也停了一个多小时

起因是:我的部门直系领导,叫我**删除一个 Deployemnt 资源(node-api-gateway)**说该资源不用了,因为用 go 语言重新写了一个 go-api-gateway 项目。

由于咱们管理 K8s 集群使用的 Kuboard 系统,删除 Deployemnt 资源(node-api-gateway)时,如果没有勾选下面图中的选项的话,就会默认删除对应与之同名的 Service 和 Ingress

之前将 Deployment(node-api-gateway) 使用 Go 重写了。而对应的 Ingress 名称与之前名称一致。所以删除了 Deployment(node-api-gateway)也连带删除了同名的 Ingress(node-api-gateway)应用的出口网关,导致此次事故。

如果这时咱们有备份 K8s 资源的 YAML 文件的话,直接执行 kubectl apply -f ingeess-yaml文件 命令就不会出现,业务长时间停业务的情况。

此次事情过后,第二天下午写了对应的 K8s 集群 YAML 文件备份脚本,如下:

1)定时任务

正式和测试环境一致

[root@iZ8vbg3hxkp6i8fo6a5ymnZ ~]# crontab -l
...
0 0 */1 * * /usr/bin/bash /a/k8s-yaml-all-bak/start.sh > /a/k8s-yaml-all-bak/yaml_bak.logs 2>&1 # 每1天执行一次

2)脚本功能

1. 目录结构

[root@iZ8vbg3hxkp6i8fo6a5ymnZ k8s-yaml-all-bak]# ll
总用量 764
-rw-r--r-- 1 root root    122 327 00:03 del-yaml.logs  # 删除备份yaml副本的日志
-rw-r--r-- 1 root root    155 321 10:13 resources.txt  # 记录脚本需要备份资源
-rwxr-xr-x 1 root root   2905 327 15:30 start.sh  # 脚本启动文件
-rw-r--r-- 1 root root 391299 47 00:03 yaml_bak.logs  # 脚本备份日志

2. 功能:

YAML文件备份路径:/opt/k8s_yaml_bak

备份YAML文件(方法名称:dump_yaml)

删除30天前备份的YAML文件(方法名称:del_yaml)

#/bin/bash#
# K8S_YAML_SHELL_DIR:记录脚本和resources.txt存放位置,移动是需要修改其值
# 一键备份K8s集群YAML文件脚本
# resources.txt文件,编写需要备份资源
## 定时任务示例
# 0 0 */1 * * /usr/bin/bash /a/k8s-yaml-all-bak/start.sh > /a/k8s-yaml-all-bak/yaml_bak.logs 2>&1
# 后台运行示例
# nohup /usr/bin/bash /a/k8s-yaml-all-bak/start.sh > /a/k8s-yaml-all-bak/yaml_bak.logs 2>&1 &# 当前时间
DATE=`date +%Y-%m-%d--%H-%M-%S`# 备份路径
K8S_YAML_BACKUP_DIR="/opt/k8s_yaml_bak"# 脚本存放目录
K8S_YAML_SHELL_DIR="/a/k8s-yaml-all-bak"if [ ! -d $K8S_YAML_BACKUP_DIR ];thenmkdir -p $K8S_YAML_BACKUP_DIR
fi# 获取备份资源
if [ -f ${K8S_YAML_SHELL_DIR}/resources.txt ];thenRESOURCES=`cat ${K8S_YAML_SHELL_DIR}/resources.txt`# 判断资源文件是否为空if [[ $RESOURCES == "" ]]; thenecho "${DATE} ${K8S_YAML_SHELL_DIR}/resources.txt 文件为空,请输入资源名称"exit 1fi
elseecho "resources.txt文件,不存在!"exit 1
fi# 每次备份单独创建一个家目录+时间
mkdir -p ${K8S_YAML_BACKUP_DIR}/k8s-${DATE}# 获取家目录
GET_HOME_DIR=`ls -l ${K8S_YAML_BACKUP_DIR} | tail -n 1 | awk '{print $9}'`echo "备份路径:$K8S_YAML_BACKUP_DIR/$GET_HOME_DIR"# 获取k8s名称空间
NAMESPACE=`kubectl get ns | awk '{print $1}' | tail -n +2`dump_yaml(){# 遍历NSfor NS in $NAMESPACE ;do# 创建NS备份目录mkdir -p ${K8S_YAML_BACKUP_DIR}/${GET_HOME_DIR}/${NS}# 过滤NS(kube-public、kube-system)if [[ $NS != "kube-public" && $NS != "kube-system" && $NS != "csdr" && $NS != "kube-node-lease" ]]; then# 遍历k8s资源for RESOURCE in $RESOURCES; do# 创建资源目录mkdir -p ${K8S_YAML_BACKUP_DIR}/${GET_HOME_DIR}/${NS}/${RESOURCE}# 遍历对应资源名称for RESOURCE_NAME in $(kubectl get $RESOURCE -n $NS | awk '{print $1}' | tail -n +2);doDATE_YAML=`date +%Y-%m-%d--%H:%M:%S`echo "${DATE_YAML} 导出YAML: ${NS} ${RESOURCE} ${RESOURCE_NAME} "# 导出对应名称空间下对应资源的yamlkubectl get ${RESOURCE} ${RESOURCE_NAME} -n ${NS}  -o yaml > ${K8S_YAML_BACKUP_DIR}/${GET_HOME_DIR}/$NS/${RESOURCE}/${RESOURCE_NAME}.yamlecho ""donedonefidone
}del_yaml(){for DIR_NAME in $(find $K8S_YAML_BACKUP_DIR -type d  -mtime +7);doDATE_YAML=`date +%Y-%m-%d--%H:%M:%S`echo "${DATE_YAML} 删除:$DIR_NAME" > ${K8S_YAML_SHELL_DIR}/del-yaml.logsrm -rf $DIR_NAME  >> ${K8S_YAML_SHELL_DIR}/del-yaml.logsecho ""  >> ${K8S_YAML_SHELL_DIR}/del-yaml.logsdone
}dump_yaml
del_yaml

http://www.ppmy.cn/server/14610.html

相关文章

动态规划---斐波那契数列模型

目录 一、斐波那契数列的基本概念 二、动态规划在斐波那契数列中的应用与优势 三、实际案例:使用动态规划解决斐波那契数列问题 四、动态规划问题的做题步骤 五、例题 1、第N个泰波那契数---点击跳转题目 2、三步问题----点击跳转题目 3、最小花费爬楼梯---…

深入浅出MySQL-03-【MySQL中的运算符】

前言 环境: Windows11MySQL-8.0.35 MySQL支持多种类型的运算符,可以用来连接表达式的项。运算符的类型主要包括 算术运算符、比较运算符、逻辑运算符 和 位运算符。 1.算术运算符 算术运算符包括 加、减、乘、除 和 模 运算符。 运算符作用加法-减…

ctfshow——XSS

文章目录 XSS介绍什么是xss&#xff1f;XSS危害XSS的分类常用XSSpayload web316——反射型XSSweb317——过滤<script> web318——过滤script、imgweb319——不止过滤script、imgweb320——过滤空格web321——不止过滤空格web322——不止过滤空格web323web324web 325web32…

OpenInventor/Coin3D 学习指南

简介 Coin3D是OpenInventor规范/API的开源实现&#xff0c;它提供了丰富的资源供学习OpenInventor编程&#xff0c;并以更为宽松的LGPL许可证发布。 重要类别 包括基本类型&#xff08;如向量、矩阵等&#xff09;、大多数对象的基类、用于运行时类型检查的类、字段和字段容…

Mysql备份

windows 环境备份 mysqldump -u root -p echat > backup.sql分析&#xff1a; mysqldump: 这是用于执行 MySQL 数据库备份的命令行工具。-u root: 指定连接 MySQL 数据库的用户名为 root。-p: 这是一个选项&#xff0c;表示在输入密码之后才能执行命令。在命令行中输入-p后…

【数据结构】霍夫曼树

1.概念 霍夫曼树&#xff08;Huffman Tree&#xff09;&#xff0c;又称最优二叉树&#xff0c;是一种带权路径长度最短的二叉树。在霍夫曼树中&#xff0c;叶子节点的权值通常代表字符出现的频率&#xff0c;非叶子节点的权值是其子节点权值的和。霍夫曼树广泛应用于数据压缩…

js修改路由参数+vue——js基础

最近在写看板&#xff0c;要求执行某个操作后更改路由参数&#xff0c;方便用户保存地址以便于下次直接获取对应的数据。 比如&#xff1a;原地址&#xff1a;http://localhost:4200/tvType/out 执行某个操作后&#xff0c;地址变更为&#xff1a;http://localhost:4200/tvTyp…

全国各省市建设工程类专业职称评审要求总结(欢迎补充完善、沟通交流)

全国各省市建设工程类专业职称评审要求汇总统计如下&#xff0c;总体来说北京最难&#xff0c;经济欠发达、偏远地区评审要求相对简单&#xff0c;每个地方的要求存在一定的相似性&#xff0c;但又都各具特色&#xff0c;基本上来说论文是评审的必备条件&#xff0c;但是各个地…