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_ENDPOINTSetcd 监听的端口,通常为 127.0.0.1:2379
  • ETCDCTL_CACERTETCDCTL_CERTETCDCTL_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-apiserverkube-controller-managerkube-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

三、备份与恢复的注意事项

  1. 备份频率:建议定期备份 etcd,并根据集群的重要性和数据变化频率确定备份频率。生产环境中的集群建议每日备份。
  2. 备份位置:将备份文件存储在安全的地方,可以考虑远程存储或云端存储。
  3. 多节点集群的恢复:如果是高可用的多节点 etcd 集群,恢复时需要对所有 etcd 节点进行操作,确保数据一致性。
  4. 测试恢复流程:定期在非生产环境中测试备份与恢复流程,确保在真正故障时能够快速、无误地恢复集群。

通过定期备份 etcd 并掌握正确的恢复方法,你可以确保 Kubernetes 集群的高可用性和数据安全性,即使在发生故障时,也能迅速恢复集群状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447530.html

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

相关文章

网站建设为什么要选择国内服务器

选择国内服务器进行网站建设,对于面向国内用户的企业来说,是一个明智的决策。以下是一些选择国内服务器的主要原因: 提升用户体验: 网站访问速度是用户体验的关键因素之一。由于物理距离较近,国内服务器通常能提供更快…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——14.哈希(1)

移情别恋c ദ്ദി˶ー̀֊ー́ ) ——14.哈希(1) unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 l o g 2 N log_2 N log2​N,即最差情况下需要比较红黑树的高度次…

prompt learning

prompt learning 对于CLIP(如上图所示)而言,对其prompt构造的更改就是在zero shot应用到下游任务的时候对其输入的label text进行一定的更改,比如将“A photo of a{obj}”改为“[V1][V2]…[Vn][Class]”这样可学习的V1-Vn的token…

利用配置错误的负载均衡器,通过XSS窃取Cookies

引言 在本文中,我们将探讨一个涉及负载均衡器漏洞利用和跨站脚本攻击(XSS)来劫取应用程序Cookies的实际场景。由于保密协议的限制,我们将省略具体名称和截图,但我们会详细分析攻击过程及其影响。通过将负载均衡器的主…

MySQL中 truncate、drop和delete的区别

MySQL中 truncate、drop和delete区别 truncate 执行速度快,删除所有数据,但是保留表结构不记录日志事务不安全,不能回滚可重置自增主键计数器 drop 执行速度较快,删除整张表数据和结构不记录日志事务不安全,不能回…

LabVIEW示波器通信及应用

基于LabVIEW平台开发的罗德与施瓦茨示波器通信与应用系统实现了示波器的远程控制及波形数据的实时分析,通过TCP/IP或USB接口与计算机通信,利用VISA技术进行指令传输,从而实现高效的数据采集与处理功能。 项目背景 随着现代电子测试需求的日益…

WordPress 禁用上传媒体图片自动生成缩略图及多尺寸图片教程

一、在 设置-媒体-媒体设置 中几个尺寸大小的设置不勾选或设置为 0&#xff0c;如下图&#xff1a; 二、找到主题文件 function.php 文件&#xff0c;打开后&#xff0c;在 <?php 后面添加如下代码&#xff1a; function.php 文件路径一般为&#xff1a;WordPress网站根目录…

使用标注工具并跑通官方yolov8分割segment自己的数据集

1.下载标注工具用于打标签 使用标注工具&#xff0c;后面会用到智能标注 点击 创建AI多边形后命令行就自动下载对应的模型 单机要选中的图像就行&#xff0c;就可以智能选中&#xff0c;双击设置标签 依次标注所有图片 &#xff0c;最后保存成json格式的文件 2.使用labelme2y…

量化投资学习

1:投资定义就是付出一定的代价&#xff0c;期望能够得到一定汇报&#xff0c;可能会出现没有回报 2&#xff1a;投资分析流派 2.1:宏观策略分析法&#xff1a;从宏观经济大方向入手&#xff0c;再应用到具体股票也叫自上而下的研究方法&#xff0c;需要理解这个趋势的核心驱动…

【AI系统】AI 学习方法与算法现状

在人工智能&#xff08;AI&#xff09;的漫长历史中&#xff0c;我们见证了从早期的规则驱动系统到现代的机器学习模型的转变。AI的学习方法是其进步的核心&#xff0c;而算法现状则反映了当前技术的高度和未来的发展方向。 Ⅰ.AI 学习方法 AI的工作原理基于深度神经网络&…

ELK:Elasticsearch、Logstash、Kibana Spring Cloud Sleuth和Spring Cloud Zipkin

〇、虚拟机中docker安装elasticsearch 、Kibana、Logstash elasticsearch导入中文分词器 Logstash修改es数据库ip及创建索引名配置 一、elasticsearch数据库的结构 和mysql作比较&#xff0c;mysql中的数据库的二维表相当于es数据库的index索引结构&#xff1b;mysql数据库的二…

电容器放电的方法

对于小容量电容&#xff0c;可以直接短接两根线进行放电对于大容量电容&#xff0c;需要串联灯泡或者用电器进行放电。 大容量电容千万不能短接&#xff0c;否则容易伤到自己。 电容器放电的方法有以下几种&#xff1a; 1. 利用自放电放电&#xff1a;有些电容器在放电后&…

ScriptViz – 斯坦福大学推出的剧本可视化AI辅助工具

ScriptViz是什么 ScriptViz是由斯坦福大学研究人员推出的一款剧本可视化辅助工具&#xff0c;基于大型电影数据库MovieNet&#xff0c;根据剧本文本和对话检索出相匹配的电影画面&#xff0c;将编剧的文字描述转换成具体的视觉图像。工具提供对视觉元素的精确控制&#xff0c;…

刷题训练之多源 BFS

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握多源 BFS算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷…

mybatisPlus对于pgSQL中UUID和UUID[]类型的交互

在PGSQL中&#xff0c;有的类型是UUID和UUID[]这种类型&#xff0c;在mybatis和这些类型交互的时候需要手动设置类型处理器才可以&#xff0c;这里记录一下类型处理器的设置 /*** UUID类型处理器*/ public class UUIDTypeHandler extends BaseTypeHandler<UUID> {/*** 获…

JavaWeb——Vue:打包部署(Nginx、目录介绍、部署及启动、访问 )

目录 打包 部署 Nginx 目录介绍 部署及启动 访问 前端 Vue 项目的最后一步是打包部署。在当前前后端分离的开发模式中&#xff0c;前端开发人员开发前端代码&#xff0c;后端开发人员开发后端代码。最终要将开发及测试完毕的前端 Vue 代码和后端代码分开部署在对应的服…

Android实现App内直接预览本地PDF文件

在App内实现直接预览pdf文件&#xff0c;而不是通过调用第三方软件&#xff0c;如WPS office等打开pdf。 主要思路&#xff1a;通过PhotoView将pdf读取为图片流进行展示。 一、首先&#xff0c;获取对本地文件读取的权限 在AndrooidManifest.xml中声明权限&#xff0c;以及页…

给定任意非空有向图 G,输出 G 中所有 K 顶点的算法,并返回 K 顶点的个数。

已知优先图 G 采用邻接矩阵存储是&#xff0c;其定义如下 typedef struct { // 图的定义 int numVertices, numEdges; // 图中实际的顶点数和边数 char VerticesList[MAXV]; // 顶点表&#xff0c;MAXV为已定义常量 int Edge[MAXV]…

champ模型部署指南

一、介绍 champ是由阿里巴巴、复旦大学和南京大学的研究人员共同提出的一种基于3D的将人物图片转换为视频动画的模型&#xff0c;该方法结合了3D参数化模型(特别是SMPL模型)和潜在扩散模型&#xff0c;能够精确地捕捉和再现人体的3D形状和动态&#xff0c;同时保持动画的时间一…

Nuxt.js 应用中的 modules:before 事件钩子详解

title: Nuxt.js 应用中的 modules:before 事件钩子详解 date: 2024/10/15 updated: 2024/10/15 author: cmdragon excerpt: modules:before 是 Nuxt.js 中一个重要的生命周期钩子,在 Nuxt 应用初始化期间被触发。该钩子允许开发者在安装用户定义的模块之前执行某些操作,如…