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

大家好,我叫秋意零

最近对公司进行日常运维工作时,出现了一个 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.hqwc.cn/news/637662.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件杯 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向&#xff0c…

MultiHeadAttention在Tensorflow中的实现原理

前言 通过这篇文章,你可以学习到Tensorflow实现MultiHeadAttention的底层原理。 一、MultiHeadAttention的本质内涵 1.Self_Atention机制 MultiHeadAttention是Self_Atention的多头堆嵌,有必要对Self_Atention机制进行一次深入浅出的理解,这…

牛客NC357 矩阵第K小【中等 堆 Java、Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/c754e7a920614cba9b8b692ba9b20b5d 核心 堆,或者叫优先级队列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改&#xff…

【网站项目】“最多跑一次”小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

微软如何打造数字零售力航母系列科普01 --- Azure顾问(AZURE Advisor)简介

Azure顾问(AZURE Advisor)简介 目录 一、什么是AZURE顾问(AZURE Advisor)? 二、常见问题 三、接下来的步骤 一、什么是AZURE顾问? AZURE顾问是一种数字云助手,可帮助您遵循最佳实践来优化Az…

Java面试八股之marshalling和demarshalling

marshalling和demarshalling Marshalling(序列化)是将内存中的对象状态转化为适合传输或存储的格式(如字节流、JSON、XML),以便进行网络通信、持久化存储或跨平台/语言交互操作。Demarshalling(反序列化&a…

Java Record

Java Record 1.Java Record的作用与特性2.Java Record 如何使用创建和使用RecordRecord 的 MethodRecord 的构造方法Record 的 extends 和 implements 3.Record 和 Lombok4.Record类和java.lang.Class类5.instanceof判断Record类型6.Local Record与嵌套Record Java14 中预览(Ja…

深度学习-优化策略

1.使用众所周知的梯度下降法。 (1).批量梯度下降法:每次参数更新使用所有的样本(2).随机梯度下降法:每次参数更新只使用一次样本(3).小批量梯度下降法:每次参数更新使用…

20.Unity飞机大战游戏

1任务:使背景图动起来 2任务:飞机换帧动画 3任务:让飞机发射子弹 4任务:敌机出现 5任务:控制飞机 6任务:游戏碰撞逻辑 7任务:另外两种类型的敌机 8任务:拾取奖励物品换枪 9…

强固型工业电脑在码头智能闸口、OCR(箱号识别)、集装箱卡车车载电脑行业应用

集装箱卡车车载电脑应用 背景介绍 针对码头集装箱卡车的调度运用, 结合码头TOS系统设计出了各种平台的车载电脑(VT系列)和车载LED显示屏(VLD系列),同时提供各种安装支架,把车载电脑固定到狭小的驾驶室中;同时提供了各种天线选择(…

【Linux】NFS网络文件系统搭建

一、服务端配置 #软件包安装 [roothadoop01 ~]# yum install rpcbind nfs-utils.x86_64 -y [roothadoop01 ~]# mkdir /share#配置文件修改 #格式为 共享资源路径 [主机地址] [选项] # [roothadoop01 ~]# vi /etc/exports /share 192.168.10.0/24(rw,sync,no_root_squash) #…

VBA技术资料MF144:将PDF首页作为对象插入工作表

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…