K8s利用etcd定时备份集群结合钉钉机器人通知

devtools/2024/9/20 6:55:33/ 标签: kubernetes, etcd, 钉钉

在这里插入图片描述

如何通过脚本的方式进行K8s集群的备份

etcd_4">查看K8s中master节点中etcd集群的状态

kubectl get pods -n kube-system | grep etcd

image-20240913090214864

由于使用的etcd服务是K8s搭建时自身携带的,并不是独立搭建的etcd集群信息。使用 K8s 搭建集群时,etcd 是 Kubernetes 集成的一个重要组件因此需要查看此K8s中etcd的配置信息如何。执行下面的命令。

kubectl -n kube-system get pods # 首先执行这个命令查看一下master节点中etcd服务的name信息

image-20240913090804336

拿到信息之后需要将 kubectl -n kube-system describe pod 这个命令修改成上述pod的名称信息进行得到运行的日志,需要从中获取到想对应的密钥信息,此步不可缺少不然执行备份命令时候会出现备份文件停留在备份过程中状态。

kubectl -n kube-system describe pod etcd-xiaolumaster1

image-20240913091104803

此处是上述命令执行结果中详细信息做一下展示,我在下面的信息中使用了提取这个密钥信息这个标注出了信息的位置在哪里。

[root@master01 ~]# kubectl -n kube-system describe pod etcd-xiaolumaster1
Name:                 etcd-xiaolumaster1
Namespace:            kube-system
Priority:             2000001000
Priority Class Name:  system-node-critical
Node:                 xiaolumaster1/192.168.65.10
Start Time:           Thu, 12 Sep 2024 15:58:19 +0800
Labels:               component=etcdtier=control-plane
Annotations:          kubeadm.kubernetes.io/etcd.advertise-client-urls: https://192.168.65.10:2379kubernetes.io/config.hash: 891d5c4b32621c9c00025c4596a9fa98kubernetes.io/config.mirror: 891d5c4b32621c9c00025c4596a9fa98kubernetes.io/config.seen: 2024-09-12T15:54:42.469300940+08:00kubernetes.io/config.source: file
Status:               Running
SeccompProfile:       RuntimeDefault
IP:                   192.168.65.10
IPs:IP:           192.168.65.10
Controlled By:  Node/xiaolumaster1
Containers:etcd:Container ID:  containerd://53f915abc40b5adc16e3c6e722c73054fb6538620bb3a14755951a5d093f1658Image:         registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.7-0Image ID:      registry.cn-hangzhou.aliyuncs.com/google_containers/etcd@sha256:e85dab14e03d2468bedd3f908898982ed0ef2622d3764cc7746eb51555fae06ePort:          <none>Host Port:     <none>Command:etcd--advertise-client-urls=https://192.168.65.10:2379--cert-file=/etc/kubernetes/pki/etcd/server.crt    ### 提取这个密钥信息--client-cert-auth=true--data-dir=/var/lib/etcd--experimental-initial-corrupt-check=true--experimental-watch-progress-notify-interval=5s--initial-advertise-peer-urls=https://192.168.65.10:2380--initial-cluster=xiaolumaster1=https://192.168.65.10:2380--key-file=/etc/kubernetes/pki/etcd/server.key    ### 提取这个密钥信息--listen-client-urls=https://127.0.0.1:2379,https://192.168.65.10:2379--listen-metrics-urls=http://127.0.0.1:2381--listen-peer-urls=https://192.168.65.10:2380--name=xiaolumaster1--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt--peer-client-cert-auth=true--peer-key-file=/etc/kubernetes/pki/etcd/peer.key--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt--snapshot-count=10000--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt   ### 提取这个密钥信息 虽然上面有一个和这个一样的,但是不提取 --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt 这个的原因是 --trusted-ca-file:这个参数用于为 etcd 客户端连接提供 CA 证书,确保客户端能够验证服务器的身份。因此,这个 CA 证书是客户端与服务器通信时使用的。而--peer-trusted-ca-file:这个参数用于 etcd 集群内节点之间(peer-to-peer)的通信。它确保节点之间能够相互验证身份,使用的是集群内节点之间的 CA 证书。--peer-trusted-ca-file:这个参数用于 etcd 集群内节点之间(peer-to-peer)的通信。它确保节点之间能够相互验证身份,使用的是集群内节点之间的 CA 证书。State:          RunningStarted:      Thu, 12 Sep 2024 15:54:55 +0800Ready:          TrueRestart Count:  0Requests:cpu:        100mmemory:     100MiLiveness:     http-get http://127.0.0.1:2381/health%3Fexclude=NOSPACE&serializable=true delay=10s timeout=15s period=10s #success=1 #failure=8Startup:      http-get http://127.0.0.1:2381/health%3Fserializable=false delay=10s timeout=15s period=10s #success=1 #failure=24Environment:  <none>Mounts:/etc/kubernetes/pki/etcd from etcd-certs (rw)/var/lib/etcd from etcd-data (rw)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:etcd-certs:Type:          HostPath (bare host directory volume)Path:          /etc/kubernetes/pki/etcdHostPathType:  DirectoryOrCreateetcd-data:Type:          HostPath (bare host directory volume)Path:          /var/lib/etcdHostPathType:  DirectoryOrCreate
QoS Class:         Burstable
Node-Selectors:    <none>
Tolerations:       :NoExecute op=Exists
Events:Type    Reason   Age                From     Message----    ------   ----               ----     -------Normal  Killing  63m                kubelet  Stopping container etcdNormal  Pulled   16m (x4 over 47h)  kubelet  Container image "registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.7-0" already present on machineNormal  Created  16m (x4 over 47h)  kubelet  Created container etcdNormal  Started  16m (x4 over 47h)  kubelet  Started container etcd

编写备份的脚本shell文件

文件名称 backup_etcd.sh

#!/bin/bash
#时间戳,用来区分不同备份
timestamp=`date +%Y%m%d-%H%M%S`
#备份到哪个文件夹
back_dir="/opt/k8s"
#etcd集群列表
endpoints="https://192.168.65.10:2379"
#etcd证书路径
cert_file="/etc/kubernetes/pki/etcd/server.crt"
#etcd证书的key路径
key_file="/etc/kubernetes/pki/etcd/server.key"
#ca证书路径
cacert_file="/etc/kubernetes/pki/etcd/ca.crt"mkdir -p $back_dir
ETCDCTL_API=3 etcdctl \
--endpoints="${endpoints}" \
--cert=$cert_file \
--key=$key_file \
--cacert=$cacert_file \
snapshot save $back_dir/snapshot_$timestamp.db

image-20240913092023027

赋予文件执行权限并查看权限信息

这边我使用的上述路径下的文件,所以后续跟上的是这个路径在命令中。

chmod +x /opt/K8sJK/backup_etcd.sh

查看一下权限是否已经赋予

image-20240913092559723

这里给上面的权限信息做一下详细的解释

  1. 文件类型与权限: -rwxr-xr-x
    • -:表示这是一个普通文件(不是目录)。
    • rwx:文件所有者(528287,后面解释)拥有执行权限。
    • r-x:文件所属的组(89939)拥有执行权限,但没有写权限。
    • r-x:其他用户(即系统中的其他任何人)拥有执行权限,但没有写权限。
  2. 硬链接数量: 1
    • 表示有 1 个硬链接指向这个文件。

执行备份文件的命令进行备份的验证

/opt/K8sJK/backup_etcd.sh

image-20240913093018414

在配置的备份文件位置查看备份的信息,时间也可以刚好对上就是刚才的备份文件。

image-20240913093049167

对接钉钉机器人进行报备

创建一下自己的组织获取管理员身份

钉钉机器人开发平台直达链接

https://open.dingtalk.com/document/tutorial/create-a-robot

image-20240913093942315

具体的配置信息展示

image-20240913094356442

梳理开发对接钉钉的SDK功能jar包

这里采用钉钉官方旧版本SDK基础之上进行二开,后续如果需要进行持续迭代升级会考虑尝试新版本SDK风格进行二开。这里需要说明的是这个只是一个钉钉官方的小demo,二开需要根据自己的需求信息适量的修改和原创。

https://github.com/open-dingtalk/org-mini-program-tutorial-java

image-20240913125038520

钉钉官方的参考文章地址:

https://open.dingtalk.com/document/tutorial/create-a-robot

修改pom文件中旧版SDK最新地址

 <dependency><groupId>com.aliyun</groupId><artifactId>alibaba-dingtalk-service-sdk</artifactId><version>2.0.0</version>
</dependency>

定时任务与@回复消息的大体代码展示

etcd_229">定时备份etcd
/*** Copyright © 2024年 integration-projects-maven. All rights reserved.* ClassName EtcdBackupTask.java* author 舒一笑 yixiaoshu88@163.com* version 1.0.0* Description etcd定时备份逻辑实现* createTime 2024年09月11日 15:41:00*/
@Component
@Slf4j
public class EtcdBackupTask {@Value("${dingtalk.webhook}")private String dingTalkWebhook;@Value("${shell.script.path}")private String shellScriptPath;@Value("${backup.file.path}")private String backupFilePath;private final RobotsController robotsController;public EtcdBackupTask(RobotsController robotsController) {this.robotsController = robotsController;}@Scheduled(fixedRate = 60000) // 每1分钟执行一次备份public void backupEtcd() {log.info("Starting etcd backup process...");try {// 使用 ProcessBuilder 调用 shell 脚本ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", shellScriptPath);processBuilder.environment().remove("ETCDCTL_CERT");  // 移除可能存在的环境变量processBuilder.redirectErrorStream(true);Process process = processBuilder.start();// 捕获输出日志String backupLog = captureProcessOutput(process);// 等待进程完成,设置较长的超时时间,例如10分钟boolean finished = process.waitFor(10, TimeUnit.MINUTES);if (!finished) {// 如果进程未在规定时间内完成,强制终止并发送警告消息process.destroyForcibly();sendDingTalkMessage("你好,Etcd 备份失败!备份进程超时。");log.error("Etcd backup process timed out.");return;}int exitCode = process.exitValue();if (exitCode == 0) {
//                String backupFileName = getBackupFileName(backupLog);
//                log.info("Etcd backup succeeded. Backup file: " + backupFileName);
//                sendDingTalkMessage("你好,Etcd 备份成功!备份文件已保存,文件名:" + backupFileName);String backupFileName = getBackupFileName(backupLog);log.info("Etcd backup succeeded. Backup file: " + backupFileName);// 获取备份文件状态String snapshotStatus = getSnapshotStatus(backupFileName);log.info("Etcd backup snapshot status: \n" + snapshotStatus);// 将备份文件名和状态发送到钉钉sendDingTalkMessage("你好,Etcd 备份成功!备份文件已保存,文件名:" + backupFileName + "\n" + snapshotStatus);// 清理一周前的备份文件cleanOldBackups(backupFilePath);} else {log.error("Etcd backup failed with exit code: " + exitCode);log.error("Etcd backup failed. Error log: \n" + backupLog);sendDingTalkMessage("你好,Etcd 备份失败!错误信息:" +

http://www.ppmy.cn/devtools/112264.html

相关文章

Graphviz 安装并使用 (Python)

概述 Graphviz 是一款由 AT&T Research 和 Lucent Bell 实验室开源的可视化图形工具&#xff0c;可以很方便的用来绘制结构化的图形网络&#xff0c;支持多种格式输出。Graphviz 输入是一个用 dot 语言编写的绘图脚本&#xff0c;通过对输入脚本的解析&#xff0c;分析出其…

0基础跟德姆(dom)一起学AI Python进阶08-生成器,property关键字,正则表达式

* 生成器 * yield关键字 * 生成批次数据 * property关键字的用法 * 修饰方法 * 修饰类变量 * 正则表达式 * 正则表达式规则 * match() * search() * compile() --- 1.生成器入门 python """ 生成器介绍: 概述: 它指的是 generato…

医学数据分析实训 项目一 医学数据采集

项目一 医学数据采集 一、实践目的 了解医学数据的特点&#xff1b;熟悉常见的医学公共数据库的使用方法&#xff1b;掌握获取医学数据的方法&#xff1b; 二、实践平台 操作系统&#xff1a;Windows10 及以上Python 版本&#xff1a;3.8.x 及以上PyCharm 或 Anoconda 集成…

Python 的分支结构

引言 在前面的课程中&#xff0c;我们已经学习了 Python 的基本输入输出、数据类型及其转换&#xff0c;以及简单的顺序结构程序设计。本课时将介绍 Python 中的分支结构&#xff0c;主要讨论如何使用条件语句 if, elif, else 来根据不同的条件执行不同的代码块。通过两个具体的…

局域网windows下使用Git

windows下如何使用局域网进行git部署 准备工作第一步 &#xff0c;ip设置设置远程电脑的ip设置&#xff0c;如果不会设置请点击[这里](https://blog.csdn.net/Black_Friend/article/details/142170705?spm1001.2014.3001.5501)设置本地电脑的ip&#xff1a;验证 第二步&#x…

golang学习笔记14——golang性能问题的处理方法

推荐学习文档 基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学习笔记04——如何真正写好Golang代码&…

文字溢出隐藏及鼠标悬停显示效果

在本文中&#xff0c;我们将学习如何使用 CSS 和 JavaScript 实现一个简单的文字溢出隐藏效果&#xff0c;当鼠标悬停在文本上时显示完整内容。 创建 HTML 页面结构 首先&#xff0c;我们需要创建一个包含文本内容的 HTML 页面。 <!DOCTYPE html> <html lang"…

MySQL从C盘迁移到D盘

文章目录 前言一、停止MySQL服务打开服务&#xff08;方式一&#xff09;打开服务&#xff08;方式二&#xff09;停止MySQL服务 二、找到C盘中的文件文件夹1文件夹2文件夹3 三、修改文件内容1.对应文件夹12.对应文件夹3 四、 修改注册表中文件路径1.打开注册表2. 修改注册表中…

Cargo 入门

文章目录 发现宝藏1. 安装 Cargo2. 创建一个新项目1.1.打开终端1.2. 创建新项目1.3. 进入项目目录1.4. 查看项目结构 3. 构建和运行项目3.1. 构建项目3.2. 运行项目 4. 管理依赖4.1. 编辑 Cargo.toml4.2. 安装依赖4.3. 在代码中使用依赖 5. 运行测试5.1. 编写测试5.2. 运行测试…

一种没有注释的语言

原文&#xff1a;Breck Yunits - 2024.09.05 JSON 是 PLDB&#xff08;A Programming Language Database&#xff09;中唯一不支持注释的流行语言。JSON 既不支持单行注释&#xff0c;也不支持多行注释。 JSON 最初是有注释的 Douglas Crockford 在 2012 年解释了他独特的设计…

设计师私藏的 PDF 转 JPG 利器

你平常会通过扫描来发送文件吗&#xff1f;为了保证图片的清晰度一般都会采用PDF格式来转发&#xff0c;但是要插入到一些文件里的时候PDF格式不是那么好用。这时候就很需要PDF转jpg工具了。今天我就分享几款我用过的PDF转jpg的工具&#xff0c;有兴趣就接着往下看吧。 1.福昕…

【LeetCode 算法笔记】739. 每日温度

目录 问题描述暴力解法栈 问题描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0…

PPT数据可视化:Python-pptx让图表制作变得轻而易举

哈喽,大家好,我是木头左! 安装和配置python-pptx 确保你的Python环境中已经安装了python-pptx库。如果没有,可以通过pip轻松安装: pip install python-pptx安装完成后,你就已经拥有了在PPT中创建图表所需的全部工具。 创建一个简单的柱状图 让从一个基础的例子开始:…

使用python来保存键盘输入情况,可保存到sqlite3数据库

1.代码单次保存最大键盘输入数目是300,全局变量可改 2、在gui界面可以设置单次保存的名字,方便下次查找&#xff0c;录入数据库 3. gui界面有串口选择按钮,需要有硬件串口转hid模块ch9329的&#xff0c;可以直接发送串口数据来实现模拟键盘输入. 没有硬件的直接注释即可. 好…

PHP智驭未来悦享生活智慧小区物业管理小程序系统源码

智驭未来&#xff0c;悦享生活 —— 探索智慧小区物业管理小程序 一、引言&#xff1a;智慧生活的新篇章 在这个日新月异的时代&#xff0c;科技正以前所未有的速度改变着我们的生活。从智能家居到智慧城市&#xff0c;每一处都闪耀着智慧的光芒。而今天&#xff0c;我要带大家…

基于深度学习的精准农业分析

基于深度学习的精准农业分析利用深度学习技术处理和分析农业中的各种数据源&#xff0c;包括遥感影像、气象数据、土壤信息和作物生长情况&#xff0c;从而优化农业生产&#xff0c;实现资源的精确管理和农业产量的提升。 1. 精准农业的挑战 数据复杂性&#xff1a;精准农业依…

网络安全宣传周的时间,举办活动的方式和意义

网络安全宣传周是中国国家层面为提升公众网络安全意识、普及网络安全知识、推广网络安全技能而设立的一项重要活动。以下是对网络安全宣传周的时间&#xff0c;举办活动的方式和意义的介绍&#xff1a; 时间&#xff1a;国家网络安全宣传周自2014年首次举办以来&#xff0c;每…

ai 回答HFS是什么 HTTP的文件服务器是什么

HFS&#xff08;HTTP File Server&#xff09;是一个基于HTTP协议的文件服务器软件&#xff0c;它允许用户通过浏览器访问和共享计算机上的文件。HFS的特点包括界面简洁直观、易于安装和配置、支持虚拟文件系统、多种权限设置等。用户可以轻松地在本地网络或互联网上共享文件和…

Adobe Acrobat安装(CSDN_20240915)

安装步骤 1. 点击安装执行文件 2. 进入安装界面&#xff0c;点击继续 3. 点击安装 4. 等待安装 5. 安装完成后点击完成 6. 将Crack路径下的文件复制到安装路径 7以管理员身份运行 8输入目标路径 9解压完成后&#xff0c;以管理员身份运行Patch 10点击patch&#xff0c;完成破解…

linux驱动开发-地址映射

地址映射 在Linux驱动开发中&#xff0c; 地址映射是指如何将设备的物理地址映射到虚拟地址空间&#xff0c; 从而使得内核可以通过虚拟地址与设备进行交互。 这一过程在设备的初始化和操作中都是至关重要的&#xff0c; 尤其是在涉及到内存映射I/O时。 1. 地址映射的基本概念…