k8s ETCD数据备份与恢复
在 Kubernetes 集群中,etcd
是一个分布式键值存储,它保存着整个集群的状态,包括节点、Pod、ConfigMap、Secrets 等关键信息。因此,定期对 etcd
进行备份是非常重要的,特别是在集群发生故障或需要恢复数据的情况下。本文将介绍如何备份和恢复 Kubernetes 中的 etcd
数据。
一、备份 ETCD 数据
Kubernetes 集群使用的 etcd
通常运行在控制平面节点上。可以通过 etcdctl
工具来备份 etcd
数据。
1. 安装 etcdctl
如果 etcdctl
没有安装,可以使用以下命令安装 etcdctl
工具:
sudo apt-get install etcd-client
或者从 官方 GitHub 下载适合你的系统版本的 etcdctl
。
2. 确认 ETCD 环境变量
在控制平面节点上,etcd
的 API 通过 HTTPS 进行保护。因此,你需要指定一系列证书文件和 etcd
服务的端点。
export ETCDCTL_API=3
export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key
其中:
ETCDCTL_API=3
:使用 etcd v3 API。ETCDCTL_ENDPOINTS
:etcd
监听的端口,通常为127.0.0.1:2379
。ETCDCTL_CACERT
、ETCDCTL_CERT
和ETCDCTL_KEY
:分别为 CA 证书、服务证书和服务密钥路径。
3. 创建 etcd
备份
执行以下命令来创建 etcd
数据的快照文件:
ETCDCTL_API=3 etcdctl --endpoints=${ETCDCTL_ENDPOINTS} \--cacert=${ETCDCTL_CACERT} --cert=${ETCDCTL_CERT} --key=${ETCDCTL_KEY} \snapshot save /path/to/backup/etcd-snapshot.db
示例:
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /var/backups/etcd-snapshot-$(date +%Y-%m-%d).db
这个命令会生成一个快照文件(例如:etcd-snapshot-2024-10-12.db
),包含当前 etcd
的所有数据。
使用变量有可能提示变量冲突,最好使用–cacert=/etc/kubernetes/pki/etcd/ca.crt 这个非变量模式执行。
我是从kube-apiserver启动中找到etcd证书变量参数,然后导出来的。
4. 验证备份
备份完成后,可以通过以下命令验证备份文件的有效性:
ETCDCTL_API=3 etcdctl --write-out=table snapshot status /path/to/backup/etcd-snapshot.db
输出示例:
+---------+----------+------------+------------+
| HASH | VERSION | TOTAL KEYS | DB SIZE |
+---------+----------+------------+------------+
| abcd... | 3.4.13 | 10000 | 4.2 MB |
+---------+----------+------------+------------+
5. 定期备份
你可以使用 cron
来定期备份 etcd
数据。例如,每天凌晨备份一次:
0 2 * * * root ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /var/backups/etcd-snapshot-$(date +%Y-%m-%d).db
二、恢复 ETCD 数据
在 etcd
数据损坏或需要将集群恢复到某个时间点时,你可以通过备份文件恢复 etcd
数据。
1. 停止 Kubernetes 控制平面组件
在恢复 etcd
之前,必须先停止 Kubernetes 控制平面上的组件,包括 kube-apiserver
、kube-controller-manager
和 kube-scheduler
。
使用以下命令在控制平面节点上停止这些服务:
sudo systemctl stop kube-apiserver
sudo systemctl stop kube-controller-manager
sudo systemctl stop kube-scheduler
2. 恢复 etcd
快照
执行以下命令,将 etcd
恢复到某个快照:
ETCDCTL_API=3 etcdctl --endpoints=${ETCDCTL_ENDPOINTS} \--cacert=${ETCDCTL_CACERT} --cert=${ETCDCTL_CERT} --key=${ETCDCTL_KEY} \snapshot restore /path/to/backup/etcd-snapshot.db \--data-dir=/var/lib/etcd
示例:
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot restore /var/backups/etcd-snapshot-2024-10-12.db \--data-dir=/var/lib/etcd
--data-dir
选项指定 etcd
数据存储的目录,通常是 /var/lib/etcd
。
3. 更新 etcd
配置文件
在某些情况下,你可能需要修改 etcd
配置文件以确保其指向正确的 data-dir
和集群配置。/etc/kubernetes/manifests/etcd.yaml
通常是 etcd
的配置文件所在位置。
4. 启动控制平面组件
恢复 etcd
数据后,重新启动控制平面组件:
sudo systemctl start kube-apiserver
sudo systemctl start kube-controller-manager
sudo systemctl start kube-scheduler
5. 验证恢复
恢复完成后,检查 etcd
和 Kubernetes 集群的状态:
kubectl get nodes
kubectl get pods -n kube-system
确保集群恢复正常工作,节点和 Pod 的状态为 Ready
。
三、备份与恢复的注意事项
- 备份频率:建议定期备份
etcd
,并根据集群的重要性和数据变化频率确定备份频率。生产环境中的集群建议每日备份。 - 备份位置:将备份文件存储在安全的地方,可以考虑远程存储或云端存储。
- 多节点集群的恢复:如果是高可用的多节点
etcd
集群,恢复时需要对所有etcd
节点进行操作,确保数据一致性。 - 测试恢复流程:定期在非生产环境中测试备份与恢复流程,确保在真正故障时能够快速、无误地恢复集群。
通过定期备份 etcd
并掌握正确的恢复方法,你可以确保 Kubernetes 集群的高可用性和数据安全性,即使在发生故障时,也能迅速恢复集群状态。
相关文章:

k8s ETCD数据备份与恢复
在 Kubernetes 集群中,etcd 是一个分布式键值存储,它保存着整个集群的状态,包括节点、Pod、ConfigMap、Secrets 等关键信息。因此,定期对 etcd 进行备份是非常重要的,特别是在集群发生故障或需要恢复数据的情况下。本文…...

【C语言】循环嵌套:乘法表
循环嵌套,外层循环执行一次,内层循环执行i次。分别控制 在循环的过程中加一层循环。 多层循环属于循环嵌套、嵌套循环 #include <stdio.h> #include <math.h> /* 功能:循环嵌套 乘法表 时间:2024年10月 地点…...

基于Java微信小程序的水果销售系统详细设计和实现(源码+lw+部署文档+讲解等)
详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...

从0开始深度学习(11)——多层感知机
前面介绍了线性神经网络,但是线性模型是有可能出错的,因为线性模型意味着是单调假设,但是现实中往往很复杂。例如,我们想要根据体温预测死亡率。 对体温高于37摄氏度的人来说,温度越高风险越大。 然而,对体…...

SQL语句查询
SQL语句查询 查询产生一个虚拟表 看到的是表形式显示的结果,但结果并不真正存储 每次执行查询只是从数据表中提取数据,并按照表的形式显示出来 查询语法 SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] SELECT …...
OSI参考模型与TCP/IP模型
OSI参考模型 物理层 定义电压、接口、线缆标准、传输距离、传输介质等物理参数。数据链路层(确定范围里的某一个) MAC地址寻址网络层(确定一个范围) 网络地址层寻址、路由传输层(区分不同的程序) 数据分段…...

深度学习-26-基于PyTorch的多层感知机DNN
文章目录 1 代码分析1.1 加载数据集1.2 定义模型1.3 定义损失函数和优化器1.4 定义训练函数1.4.1 定义累加器Accumulator1.4.2 计算准确率accuracy1.4.3 评估函数evaluate_accuracy1.4.4 单轮训练函数train_epoch1.4.5 训练函数train1.2 执行训练2 整体代码3 参考附录1 代码分析…...
华为杯”第十三届中国研究生数学建模竞赛-B题:具有遗传性疾病和性状的遗传位点分析(附MATLAB代码实现)
目录 摘要: 1. 问题重述 1.1 问题背景 1.2 待解决问题 2. 符号说明 3. 问题一 3.1 问题分析 3.2 问题解决 4. 问题二 4.1 问题分析 4.2 问题解决 5. 问题三 5.1 问题分析 5.2 问题解决 6. 问题四 6.1 问题分析 6.2 问题解决 7. 总结 参考文献 代码实现 摘要: 人体的每条染色…...
滚雪球学Redis[8.2讲]:Redis的未来发展趋势:从云服务到AI与物联网的前沿探索
全文目录: 🎉前言🔄Redis在云服务中的应用🪁1. Redis作为云缓存服务🪄示例:使用AWS ElastiCache Redis实例 🎮️2. 云原生应用中的持久化与高可用 ⚙️Redis 6.x及后续版本的新特性🕹…...

针对考研的C语言学习(二叉树专题层次遍历---广度优先遍历)
层次便利需要一个队列来辅助保存节点信息 代码 #include<stdio.h> #include<stdlib.h> typedef char ElemType;//树 typedef struct trees{ElemType data;struct trees*lc;struct trees*rc; }treeNode,*Tree;//链表 typedef struct Links{Tree tree;struct Links…...

spring揭秘31-spring任务调度01-spring集成Quartz及JDKTimer定时器
文章目录 【README】【1】Quartz任务调度框架【1.1】Job调度任务【1.2】任务调度触发器Trigger【1.3】\*Quartz框架执行调度任务代码实践【1.3.1】硬编码执行Quartz调度任务【1.3.2】基于生产者模式执行quartz调度任务(推荐) 【2】spring集成Quartz【2.1…...
Kafka之资源容量评估
编写目的意义 应用场景为如果有租户需要部署kafka集群,并给出业务压力,根据业务评估kafka资源情况,如cpu 磁盘 内存 带宽等维度。为业务解决因资源过小故障和新业务部署提供了参考和计算方法,减少后续的维护成本 资源容量评估 …...

深度学习神经网络的7大分类
深度学习中的神经网络可通过其结构和功能分为多种类型,每种都针对特定的数据特征和应用场景进行了优化。 深度学习7大神经网络如下: 01 前馈神经网络(Feedforward Neural Networks, FNN): 这是最基本的神经网络形式…...
【DNF mysql8.0安装】DNF安装MySQL服务器教程
在基于Red Hat的Linux发行版中,如CentOS或Fedora,DNF(Dandified Yum)是包管理器,用于安装、更新和卸载软件包。以下是使用DNF安装MySQL服务器(也称为MySQL Community Server)的步骤:…...
决策树与随机森林在分类问题中的应用
决策树与随机森林在分类问题中的应用 分类问题是机器学习中的重要任务之一,它涉及将数据划分到预定义的类别中。在分类问题中,决策树与随机森林模型被广泛应用,凭借其直观性、强大的预测能力和稳定的泛化性能,成为了机器学习的经…...
Dmitri Shuralyov的全职开源之旅
本篇内容是根据2017年7月份Full-time Open Source 音频录制内容的整理与翻译 Dmitri Shuralyov 加入节目,谈论作为开源的全职贡献者、开发开发人员工具以及其他有趣的 Go 项目和新闻。 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. Erik St. Martin: 欢迎…...

基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)
前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对…...
创建TaskPool任务组
实现任务的函数需要使用装饰器Concurrent标注,且仅支持在.ets文件中使用。 方法: taskpool.execute(任务名,执行权重优先级) import { taskpool } from kit.ArkTS//Concurrent 只能修饰全局函数 Concurrent async function getData(params1: string,…...

一文1800字从0到1浅谈web性能测试!
什么是性能测试? web性能应该注意些什么? 性能测试,简而言之就是模仿用户对一个系统进行大批量的操作,得出系统各项性能指标和性能瓶颈,并从中发现存在的问题,通过多方协助调优的过程。而web端的性能测试…...

计算机网络基础(1)
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络基础 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 计算机网…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...