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. 计算机网…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
