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

在这里插入图片描述

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

查看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
/*** 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.xdnf.cn/news/1534503.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

多线程面试题-28问

1、查询Java有哪些线程&#xff1f; public class MultiThread {public static void main(String[] args) {// 获取 Java 线程管理 MXBeanThreadMXBean threadMXBean ManagementFactory.getThreadMXBean();// 不需要获取同步的 monitor 和 synchronizer 信息&#xff0c;仅获…

朗迪锋亮相2024年中国国际服务贸易交易会

9月12日至14日&#xff0c;2024中国国际服务贸易交易会&#xff08;以下简称“服贸会”&#xff09;在国家会议中心和首钢园区成功举办。本届服贸会由商务部和北京市人民政府共同主办&#xff0c;继续秉承“全球服务 互惠共享”的宗旨&#xff0c;与参展企业一同聚焦“共享智慧…

开源项目低代码表单FormCreate中通过接口加载远程数据选项

在开源项目低代码表单 FormCreate 中&#xff0c;fetch 属性提供了强大的功能&#xff0c;允许从远程 API 加载数据并将其应用到表单组件中。通过灵活的配置&#xff0c;fetch 可以在多种场景下发挥作用&#xff0c;从简单的选项加载到复杂的动态数据处理。 源码地址: Github …

再次进阶 舞台王者 第八季完美童模全球赛代言人【刘诗乐】赛场秀场超燃合集!

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的少女——刘诗乐迎来了她舞台生涯的璀璨时刻。 代言人——刘诗乐&#xff0c;以璀璨童星之姿&#xff0c;优雅地踏上完美童模盛宴的绚丽舞台&#xff0c;作为开…

WebGL系列教程八(GLSL着色器基础语法)

目录 1 前言2 基本原则3 基本数据类型4 顶点着色器和片元着色器4.1 声明4.2 初始化项目4.3 赋值 5 结构体5.1 声明5.2 赋值 6 函数6.1 基本结构6.2 自定义函数6.3 常用内置函数 7 精度8 其他9 总结 1 前言 通过前七讲&#xff0c;我们已经见过了WebGL中的部分基础语法&#xff…

性能诊断的方法(三):异常信息诊断方法

关于性能诊断的方法&#xff0c;我们可以按照“问题现象—直接原因—问题根源”这样一个思路去归纳。我们先从问题的现象去入手&#xff0c;包括时间的分析、资源的分析和异常信息的分析。接下来再去分析产生问题现象的直接原因是什么&#xff0c;这里我们归纳了自上而下的资源…

胤娲科技:一场前所未有的运维革命

嘿&#xff0c;朋友们&#xff0c;你们有没有想过&#xff0c;如果电信网络里突然来了位“超级大脑”&#xff0c;我们的生活会是啥样&#xff1f; 以前啊&#xff0c;网络一有点小情绪&#xff0c;运维小哥就得像侦探一样&#xff0c;层层抽丝剥茧找问题。但现在&#xff0c;大…

无需基础轻松学!三步到位,教你亲手构建个性化AI大模型!

众所周知&#xff0c;我们已经有很多免费的大模型工具可以用&#xff0c;比如&#xff1a; 文心一言&#xff1a;https://yiyan.baidu.com/ 通义千问&#xff1a;https://tongyi.aliyun.com/qianwen/ kimi&#xff1a;https://kimi.moonshot.cn/ 以及众多手机APP&#xff1…

CAPL_构建基于UDS的刷写学习—01 Hex文件的解析

前言&#xff1a; 打算写一个系列&#xff1a;CAPL_构建基于UDS的刷写学习&#xff0c;大致写一下写作的思路 1&#xff1a;本文是第1篇首先讲解基础。首先搞清楚&#xff0c;各种不同文件&#xff08;常见的S19,hex,bin,以及汽车行业主机厂自己的各种文件CBF(奇瑞特有),VBF&…

FTP传输太不靠谱了,怎么去找替代FTP软件呢?

在当今这个数据驱动的时代&#xff0c;企业对于文件传输的需求日益增长&#xff0c;而传统的FTP协议由于其在安全性、传输效率、管理便利性等方面的局限性&#xff0c;已经无法满足现代企业的需求。因此&#xff0c;寻找一种可靠的FTP替代方案成为了企业亟待解决的问题。 FTP的…

HRSC2016绘制Ground Truth

利用DOTA的脚本绘制HRSC数据集的真实框&#xff0c;首先将HRSC的标注文件转换为DOTA格式&#xff0c;然后利用DOTA的脚本绘制目标框 新建文件 进入到HRSC2016的Test目录&#xff0c;新建两个文件夹&#xff1a; mkdir DOTA_labels DOTA_labels_drawed新建3个py文件 dota_ut…

【TabBar嵌套Navigation案例-cell重用 Objective-C语言】

一、我们来说这个cell重用(重复使用)的问题啊 1.我们这个比分直播推送页面, 这个里边呢,现在这个cell,涉及到两个样式,上面呢,是Default的,下面呢,是Value1的,然后,我们在这个里边啊,我们每一组就一个cell啊,然后呢,我把这个组,多给它复制几份儿,现在是三个组…

Linux-Makefile的编写、以及编写第一个Linux程序:进度条(模拟方便下载的同时,更新图形化界面)

目录 一、Linux项目自动化构建工具-make/Makefile ​编辑 背景&#xff1a; makefile小技巧&#xff1a; 二、Linux第一个小程序&#xff0d;进度条 先导&#xff1a; 1.如何利用/r,fflush(stdout)来实现我们想要的效果&#xff1b; 2.写一个倒计时&#xff1a; 进度条…

恭喜!龙蜥社区2024年中三大奖项评选名单新鲜出炉

近日&#xff0c;在 2024 龙蜥操作系统大会上&#xff0c;龙蜥社区公布了 2024 年中三大奖项评选名单——“最佳合作伙伴奖”“最佳用户案例奖”“最佳应用实践奖&#xff08;个人&#xff09;”&#xff0c;并邀请清华大学计算机系教授、龙蜥社区高级顾问史元春&#xff0c;海…

地市专利申请及授权数据集合(2000-2023年)xlsx+dta格式

包括发明专利、实用新型、外观专利的申请和授权等。专利作为衡量一个地区科技创新能力和水平的重要指标&#xff0c;不仅反映了地方企业在技术研发、产品创新方面的活跃程度&#xff0c;也是推动产业升级、促进经济高质量发展的关键力量 一、数据介绍 数据名称&#xff1a;地…

ImportError: DLL load failed while importing _ssl: 找不到指定的模块的解决方法

ImportError: DLL load failed while importing _ssl: 找不到指定的模块的解决方法 现象解决办法 现象 在命令行中&#xff0c;可以正常导入_ssl模块&#xff0c;如下&#xff1a; Python 3.9.0 (default, Nov 15 2020, 08:30:55) [MSC v.1916 64 bit (AMD64)] :: Anaconda, …

落地扶持丨云微客山西临汾落地会销圆满收官

2024年9月6日&#xff0c;云微客落地扶持走进山西临汾红星美凯龙《助力家居行业营销数智化研讨会》&#xff0c;活动吸引了近百家家居品牌商户的参与&#xff0c;现场气氛热烈&#xff0c;签约不断&#xff0c;为当地家居行业打开短视频矩阵营销新思路。 短视频成为全行业必争…

界面控件DevExpress中文教程:如何PDF图形对象的可见性?

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 近期重要版本v24.1已正式发布&#xff0c;该版本拥有众多新产…

单机快速部署开源、免费的分布式任务调度系统——Apache DolphinScheduler

本文主要为大家介绍Apache DolphinScheduler的单机部署方式&#xff0c;方便大家快速体验。 环境准备 需要Java环境&#xff0c;这是一个老生常谈的问题&#xff0c;关于Java环境的安装与配置期望大家都可以熟练掌握。 验证java环境 java -version 下载安装包并解压 使用wg…

现代 Web 开发工具箱:Element-UI 表单组件全攻略(一)

现代 Web 开发工具箱&#xff1a;Element-UI 表单组件全攻略&#xff08;一&#xff09; 一 . Radio 单选框1.1 创建 Radio 按钮① 注册路由② 创建 radio 组件 1.2 Radio 的相关属性① 是否禁用② 是否显示边框③ 原生 name 属性④ 按钮的样式 1.3 Radio 相关事件1.4 Radio 按…