【云原生】Kubernetes中如何对etcd进行备份和还原,确保k8s集群的稳定和健壮

news2024/12/27 12:48:14

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:云原生K8S,零基础到进阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Kubernetes中etcd的详细备份用法教程
    • 一、备份前准备
      • 1.1 确定备份策略
      • 1.2 安装etcdctl工具
      • 1.3 连接到etcd集群
    • 二、etcd数据备份
      • 2.1 创建备份目录
      • 2.2 执行备份命令
      • 2.3 验证备份数据
      • 2.4 复制备份文件到安全存储位置
    • 三、etcd数据恢复
      • 3.1 停止etcd服务和K8s集群相关组件
      • 3.2 使用备份数据恢复etcd
      • 3.2.1 准备恢复环境
      • 3.2.2 清除现有etcd数据(可选)
      • 3.2.3 恢复数据
      • 3.2.4 启动etcd服务
      • 3.2.5 验证恢复
      • 3.3 恢复Kubernetes集群
      • 3.4 验证集群状态
    • 四、自动化备份与恢复
      • 4.1 自动化备份
        • 4.1.1 使用Cron作业
        • 4.1.2 使用Kubernetes CronJob
      • 4.2 自动化恢复
    • 五、最佳实践
    • 六、总结

Kubernetes中etcd的详细备份用法教程

在Kubernetes(K8s)集群中,etcd扮演着关键角色,它作为集群的分布式键值存储,负责存储Kubernetes集群的所有配置信息和状态数据。由于etcd数据的重要性,定期备份etcd数据对于确保Kubernetes集群的安全性和数据恢复能力至关重要。本教程将结合实际案例,详细介绍如何在Kubernetes环境中备份etcd数据。

一、备份前准备

1.1 确定备份策略

在进行etcd数据备份之前,首先需要确定备份策略。这包括确定备份的频率、备份的存储位置以及备份的保留周期等。建议定期进行etcd数据备份,并在多个安全的位置进行存储,以防止数据丢失。

1.2 安装etcdctl工具

etcdctl是etcd的命令行客户端工具,用于与etcd集群进行交互。以下是在Linux环境下安装etcdctl的示例步骤:

  1. 下载etcdctl

    首先,需要根据你的etcd集群版本下载相应的etcdctl工具。以etcd v3.4.13为例:

    wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz
    tar xf etcd-v3.4.13-linux-amd64.tar.gz
    mv etcd-v3.4.13-linux-amd64/etcdctl /usr/local/sbin/
    
  2. 设置环境变量

    从etcd v3开始,etcdctl默认使用v3 API。但如果你需要与旧版本的etcd集群交互,可能需要设置ETCDCTL_API环境变量。

    echo "ETCDCTL_API=3" >> ~/.bashrc
    source ~/.bashrc
    

1.3 连接到etcd集群

使用etcdctl工具连接到etcd集群。这通常涉及指定etcd的访问地址、CA证书、客户端证书和私钥。

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 \
        member list

请注意,证书和密钥的路径可能因你的Kubernetes集群配置而异。

二、etcd数据备份

2.1 创建备份目录

在本地或服务器上创建一个目录,用于存储etcd数据备份文件。

mkdir -p /opt/etcd/backup

2.2 执行备份命令

使用etcdctl工具执行数据备份命令,将集群中的数据备份到指定目录下。

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 /opt/etcd/backup/etcdbackup.db

备份命令执行后,etcdctl会输出备份过程的详细信息,并在指定目录下生成备份文件。

2.3 验证备份数据

执行以下命令,以表格形式输出验证快照信息,确认备份数据的有效性。

ETCDCTL_API=3 etcdctl --write-out=table snapshot status /opt/etcd/backup/etcdbackup.db

2.4 复制备份文件到安全存储位置

完成数据备份后,将备份文件复制到安全的存储位置,确保数据安全可靠。

cp /opt/etcd/backup/etcdbackup.db /path/to/secure/storage

三、etcd数据恢复

3.1 停止etcd服务和K8s集群相关组件

在进行数据恢复之前,需要停止etcd服务和Kubernetes集群的相关组件,以避免数据不一致的问题。

对于kubeadm方式部署的集群,etcd是通过静态Pod方式部署启动的,可以通过移动/etc/kubernetes/manifests目录下的yaml文件来停止etcd服务。

mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bck
mv /var/lib/etcd /var/lib/etcd.bck

3.2 使用备份数据恢复etcd

使用etcd的备份数据来恢复etcd集群通常涉及以下几个步骤:

3.2.1 准备恢复环境

确保你的恢复环境(无论是物理机、虚拟机还是容器)与原始etcd集群的环境相似,包括操作系统、etcd版本和网络配置等。

3.2.2 清除现有etcd数据(可选)

如果你打算在新的etcd集群实例上恢复数据,或者在同一集群但删除了旧数据的实例上恢复,请确保删除etcd的数据目录(/var/lib/etcd 或你在配置中指定的任何其他目录)。注意,这一步将删除所有现有数据,所以请确保你已经拥有可靠的备份。

rm -rf /var/lib/etcd/*

或者,如果你之前将etcd数据目录移动了位置(如前面的示例中所示),只需将其移回原位置并清空即可。

3.2.3 恢复数据

使用etcdctl的snapshot restore命令从备份文件恢复数据。这个命令需要指定备份文件的路径、恢复后etcd的数据目录以及其他可选配置。

ETCDCTL_API=3 etcdctl snapshot restore /opt/etcd/backup/etcdbackup.db \
    --data-dir=/var/lib/etcd-new \
    --name my-etcd-cluster \
    --initial-cluster my-etcd-cluster=https://127.0.0.1:2379 \
    --initial-cluster-token etcd-cluster-1 \
    --initial-advertise-peer-urls https://127.0.0.1:2380

请注意,这里有几个关键的配置项:

  • --data-dir:恢复后etcd存储数据的目录。
  • --name:etcd集群成员的名称。
  • --initial-cluster:集群成员的信息,格式为“名称=URL”。
  • --initial-cluster-token:集群的令牌,用于集群成员的验证。
  • --initial-advertise-peer-urls:本成员对集群内其他成员可访问的URLs列表。

3.2.4 启动etcd服务

根据你的etcd部署方式(如使用静态Pod、systemd服务或其他),启动etcd服务。如果你是通过kubeadm部署的Kubernetes集群,并且移动了/etc/kubernetes/manifests目录中的etcd Pod YAML文件,你需要将其移回原位置并启动Pod。

3.2.5 验证恢复

一旦etcd服务启动,使用etcdctl或其他工具检查etcd的健康状态和数据一致性。你可以使用member list命令来验证集群成员信息,或者检查特定的键值对来确认数据已经恢复。

3.3 恢复Kubernetes集群

如果etcd数据恢复成功,下一步是恢复Kubernetes集群的其他组件。这通常涉及重启apiserver、controller-manager、scheduler等核心组件,并确保它们能够正确连接到恢复后的etcd集群。

对于kubeadm部署的集群,这通常意味着你需要重新应用kubeadm的配置(使用kubeadm init phase命令)或重新启动相关的静态Pod。

3.4 验证集群状态

最后,验证Kubernetes集群的状态。使用kubectl get nodeskubectl get pods --all-namespaces等命令来检查集群的节点和Pod状态,确保它们都在正常运行中。

四、自动化备份与恢复

在实际的生产环境中,手动执行etcd的备份和恢复操作可能不够高效且容易出错。因此,实现备份和恢复的自动化是一个重要的考虑点。

4.1 自动化备份

你可以使用cron作业或Kubernetes的CronJob(如果etcd不是作为Kubernetes的一部分运行的静态Pod)来定期执行etcd的备份操作。

4.1.1 使用Cron作业

对于非Kubernetes管理的etcd实例,可以在Linux服务器上使用cron作业来定期执行备份。编辑crontab文件以添加一个新的定时任务:

crontab -e

然后添加类似以下行的任务,该任务每天凌晨1点执行etcd备份:

0 1 * * * /usr/local/sbin/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 /opt/etcd/backup/etcdbackup_$(date +\%Y\%m\%d\%H\%M).db

注意:\%在cron中是转义字符,用于表示%字面量,因为%在cron表达式中有特殊含义。

4.1.2 使用Kubernetes CronJob

如果你的etcd是作为Kubernetes集群的一部分运行的(虽然这通常不是标准做法,因为etcd通常作为静态Pod运行),你可以使用CronJob来自动化备份。但是,由于etcd的访问可能需要特定的权限和配置,这通常不是推荐的做法。相反,你可以在Kubernetes集群外部运行一个单独的Cron作业或容器来执行备份。

4.2 自动化恢复

自动化恢复通常比较复杂,因为它需要处理集群故障和恢复流程中的多个步骤。然而,你可以编写脚本来简化恢复过程,并在必要时手动触发它们。

一种常见的做法是将恢复步骤编写为一系列的shell脚本命令,这些命令可以在集群故障时手动执行,或者在某些自动化监控和恢复系统中触发。

五、最佳实践

  • 定期备份:定期备份etcd数据,确保你拥有最新的数据副本。
  • 安全存储:将备份文件存储在安全的位置,最好是异地备份,以防止单点故障。
  • 验证备份:定期验证备份文件的有效性和完整性,确保在需要时能够成功恢复。
  • 监控etcd状态:使用监控工具(如Prometheus和Grafana)来监控etcd的状态和性能,及时发现潜在问题。
  • 文档和测试:编写详细的备份和恢复文档,并进行定期测试,以确保在需要时能够迅速有效地执行恢复操作。
  • 考虑容灾策略:除了etcd的备份和恢复外,还应考虑整个Kubernetes集群的容灾策略,包括跨区域部署、高可用架构设计等。

六、总结

etcd作为Kubernetes集群的核心组件之一,其数据的可靠性和安全性至关重要。通过定期备份etcd数据并实施有效的恢复策略,可以确保在数据丢失或损坏时能够迅速恢复集群状态。本教程详细介绍了etcd备份和恢复的详细步骤,并讨论了自动化备份和恢复的方法以及最佳实践。希望这些信息能帮助你更好地管理Kubernetes集群中的etcd数据。

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

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

相关文章

互联网应用主流框架整合之Redis基础

Redis简介 在传统的Java Web项目中存储数据,主要是用关系型数据库,如MySQL、SqlServer、Oracle等等,这些数据库的数据持久化在磁盘上,而磁盘的读写速度比较慢,而一般的管理系统上又不存在瞬间的高并发场景&#xff0c…

英语疑惑之在树上

在树上,on the tree,我想这个这个介词到底该用in,on or other prep。本来我以为跟on the roof差不多,就是在物体表面,可是百度了一下,可以有on the tree, in the tree, by the tree, at the tree, under th…

vs+qt项目转qt creator

1、转换方法 打开vs工程,右键项目,Qt->Create Base .pro File 后面默认OK 如果工程有include和lib路径需要配置,则转换后的工程,需要修改pro文件 2.修改pro文件 例如转换后的工程如下: 修改后 # ------------…

掌握 R 软件在 Windows 及 Mac 上的下载安装流程

临床数据科学是一门综合利用统计学、数据挖掘、机器学习和信息技术等方法,对临床数据进行分析和解释的学科。它的目标是从海量的临床数据中挖掘出有价值的信息,以支持医疗决策,提高医疗质量,降低医疗成本,并促进医学研…

springboot高校无人车配送系统-计算机毕业设计源码90207

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

云计算专业创新人才培养体系的探索与实践

一、引言 近年来,云计算技术凭借其高效、灵活、可扩展等优势,在各行各业得到广泛应用。为满足社会对云计算人才的需求,职业院校纷纷开设云计算相关专业,并积极探索创新人才培养体系。本文基于职业院校的特点,构建了“…

【wsl】wsl + vscode 中使用 typora 打开 markdown 文件

vscode 连接好wsl 使用Open in External App 一个五星好评的插件Open in External App则可以在vscode中用typora打开md文件,不仅如此,还有设定其他应用打开相应的文件,比如chrome打开html。插件食用方法也比较简单,安装后&#…

Stable Diffusion绘画 | 图生图-涂鸦

涂鸦的参数与「图生图」Tab 是完全一致的,只是没有蒙版的设置。 它不再局限在某一块小区域的蒙版修改,而是对整个画面进行修改。 可以将它理解成一个能够用画笔随意绘画的图生图功能。 实操 在图片中,用画笔画一个眼镜形状,正…

土壤中微生物碳氮磷含量测定

微生物量碳(MBC) 指土壤中体积小于5000μm的活的和死的微生物体内碳的总和。它是土壤碳库中的一个重要组成部分,虽然占比较小,但对土壤有效养分和生物化学转化过程具有重要影响。 微生物量氮(MBN) 指土壤中体积小于5000μm的活的和死的生物体(不含活体…

完美主义 —— 软件工程生产力最大的阻力

此文大部分内容来自翻译,原地址在文末 简介 在毫无意识的情况下,完美主义常常让我们遭受损失。我们可能认为花这么多精力来确保结果是 “完美的” 感觉很棒的,但最终,我们永远不会达成完美,而我们的工作会变成无休止的…

架构DBA

写一篇很费心力,大家觉得好,就点下广告支持下吧! 如何选择国产数据库?再论国产数据库的选择DBA搞钱之路 做为一名中年DBA来说,从2002年毕业来,享受国家经济高速发展的时期,路过2008年经济危机,错过了房地产致富之路! 焦虑与不安伴随多年,不是几年,而是十几年! 小仙我,不是名…

制造知识普及(九)--企业内部物料编码(IPN)与制造商物料编码(MPN)

在日常的物料管理业务逻辑中,一物一码是物料管理的基本的业务规则,不管物料从产品开发还是仓库管理,甚至成本核算,都要遵循这个原则,才能保证产品数据的准确性,才具备唯一追溯的可行性。大部分企业都是这种…

Android进阶之路 - 字体加粗,定制化字体粗度

在客户端中不论是PC端,还是移动端主要价值之一就体现在用户交互方面,也就是用户体验了,接下来讲的是很常见的字体加粗问题 UI大找茬 深入浅出字体、字体库TextView文本渐变字体阴影、文字阴影字体加粗 - 定制化字体粗度 在开发中经常会遇到…

【SQL Server】端口安全配置:SQL Server的安全最佳实践与防火墙规则配置

目录 SQL Server 安全最佳实践 防火墙规则配置 示例:配置 Windows 防火墙规则 加密连接 示例代码:使用加密连接 安全注意事项 SQL Server 安全最佳实践 在进行任何网络或数据库系统的部署时,确保安全是至关重要的。SQL Server&#xf…

语法检测在线英语怎么做?5个检测技巧教会你

相信大家平时在撰写文章、报告或是任何形式的书面材料时,都会发现语法错误会很大程度地影响信息的传达和读者的理解。尤其是对于非母语的写作者来说,语法问题更是棘手。 但得益于语法检测在线免费工具的出现,现在可就再也不需要为语法错误而…

10款超好用的图纸加密软件推荐,2024企业常用图纸加密软件分享

在现代企业中,设计图纸和敏感数据的安全性至关重要。一旦图纸泄露,可能会对企业造成不可估量的损失。因此,选择一款高效、可靠的图纸加密软件显得尤为重要。 1. 安秉图纸加密软件 安秉图纸加密软件是一款专为保护工程图纸和设计文件安全的软…

【youcans动手学模型】YOLO5 (上)环境配置与测试

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】YOLO5 (上)环境配置与测试 1. YOLO 简介2. YOLOv5 简介3. YOLOv5 下载4. 配置 PyCharm 环境5. 运行 YOLOv5 推理 1. YOLO 简介 YOLO (You Only Look On…

【溯源反制】反制攻击者-蚁剑低版本

目录 安装 攻击者获取防守方的权限 防守方反制攻击者 防守方获取攻击者的shell权限 安装 安装蚁剑2.0.7版本 链接:https://pan.baidu.com/s/1t40UxkZ2XuSWG6VCdGzvDw?pwd8888 提取码:8888 下载好后先打开Loader文件夹下的.exe文件,打…

2.如何定制 Dcat-admin list 中显示的信息

操作在xxxController.php文件中的 protected function grid() 中进行 定制显示的内容 protected function grid(){return Grid::make(new Robot(), function (Grid $grid) {// ->sortable() 新增一个排序的按钮在列标题中$grid->column(id)->sortable();// 正常字符…

STM32-OTA升级

一、OTA(Over-The-Air) OTA(Over-The-Air)是一种通过无线通信方式,为设备分发新软件、配置甚至更新加密密钥的技术。它允许中心位置向所有用户发送更新,确保每个接收者都无法拒绝、破坏或改变这些更新&…