Kubernetes-etcd备份恢复

目录
  • 使用etcdctl备份与恢复
    • 简介
    • 集群信息
    • etcdctl安装
      • 下载
      • 安装
      • 同步到其他节点
      • 配置环境变量
      • 查看集群状态
      • 查看所有key
      • 查看指定key
    • 备份
      • 所有节点创建备份目录
      • 备份etcd数据
    • 恢复
      • 删除资源
      • 所有master节点停止etcd
      • 所有master节点备份原有数据
      • master01恢复
      • master02恢复
      • master03恢复
      • 所有节点启动etcd
    • 验证
    • 增加备份脚本

使用etcdctl备份与恢复

简介

**etcdctl** 是用于管理和操作 etcd 数据库的命令行工具。etcd 是一个高可用的分布式键值存储系统,广泛用于存储和管理配置数据。etcdctl 提供了备份和恢复 etcd 数据库的功能,这对于数据保护和系统迁移至关重要

本次 etcd 集群由三个节点组成,采用高可用配置。备份操作只需在任意一个节点上进行,因为所有节点的数据是同步的。然而,恢复数据时需要在每个节点上进行恢复操作。

集群信息

安装方式 版本
kubeadm 1.23.17

etcdctl安装

下载

wget https://gh.monlor.com/https://github.com/etcd-io/etcd/releases/download/v3.4.30/etcd-v3.4.30-linux-amd64.tar.gz

安装

tar -zxf etcd-v3.4.30-linux-amd64.tar.gz
mv etcd-v3.4.30-linux-amd64/etcdctl /usr/local/bin
chmod +x /usr/local/bin/

同步到其他节点

scp -r  /usr/local/bin/etcdctl  master02:/usr/local/bin/
scp -r  /usr/local/bin/etcdctl  master03:/usr/local/bin/

配置环境变量

vi ~/.bashrc
export ETCDCTL_API=3
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/peer.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/peer.key
export ETCDCTL_ENDPOINTS=192.168.1.31:2379,192.168.1.32:2379,192.168.1.33:2379source ~/.bashrc

查看集群状态

ETCDCTL_API=3 \
ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt \
ETCDCTL_CERT=/etc/kubernetes/pki/etcd/peer.crt \
ETCDCTL_KEY=/etc/kubernetes/pki/etcd/peer.key \
ETCDCTL_ENDPOINTS=192.168.1.161:2379,192.168.1.162:2379,192.168.1.163:2379 \
etcdctl --write-out=table endpoint health#执行结果
+--------------------+--------+-------------+-------+
|      ENDPOINT      | HEALTH |    TOOK     | ERROR |
+--------------------+--------+-------------+-------+
| 192.168.1.162:2379 |   true | 14.612588ms |       |
| 192.168.1.161:2379 |   true | 21.240783ms |       |
| 192.168.1.163:2379 |   true | 20.533771ms |       |
+--------------------+--------+-------------+-------+

查看所有key

ETCDCTL_API=3 \
ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt \
ETCDCTL_CERT=/etc/kubernetes/pki/etcd/peer.crt \
ETCDCTL_KEY=/etc/kubernetes/pki/etcd/peer.key \
ETCDCTL_ENDPOINTS=192.168.1.161:2379,192.168.1.162:2379,192.168.1.163:2379 \
etcdctl get /  --prefix --keys-only

查看指定key

ETCDCTL_API=3 \
ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt \
ETCDCTL_CERT=/etc/kubernetes/pki/etcd/peer.crt \
ETCDCTL_KEY=/etc/kubernetes/pki/etcd/peer.key \
ETCDCTL_ENDPOINTS=192.168.1.161:2379,192.168.1.162:2379,192.168.1.163:2379 \
etcdctl get /registry/namespaces/default

备份

所有节点创建备份目录


mkdir -p /opt/etcd_backup/

备份etcd数据

注意:etcdctl 进行快照操作时必须连接到 一个特定的 etcd 节点,而不是多个节点 ,否则会出现 snapshot must be requested to one selected node”的错误 如下所示

指定单个节点备份

ETCDCTL_API=3 \
ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt \
ETCDCTL_CERT=/etc/kubernetes/pki/etcd/peer.crt \
ETCDCTL_KEY=/etc/kubernetes/pki/etcd/peer.key \
ETCDCTL_ENDPOINTS=192.168.1.161:2379 \
etcdctl snapshot save /opt/etcd_backup/snap-etcd-$(date +%F-%H-%M-%S).db

快照已成功保存到指定路径 /opt/etcd_backup/snap-etcd-2024-09-06-10-21-42.db

恢复

删除资源

我们删除掉defualt下和ops下的资源

[root@master01 ~]# kubectl delete deployments.apps  nginx
deployment.apps "nginx" deleted
[root@master01 ~]# kubectl -n ops delete deployments.apps redis-single 
deployment.apps "redis-single" deleted

所有master节点停止etcd

mv /etc/kubernetes/manifests/etcd.yaml /home/

所有master节点备份原有数据

[root@master01 home]# mv /var/lib/etcd/ /var/lib/etcd-$(date +%F-%H-%M-%S)-backup/
[root@master01 home]# ls /var/lib/etcd-2024-09-06-10-45-19-backup
member

master01恢复

ETCDCTL_API=3 etcdctl snapshot restore  /opt/etcd_backup/snap-etcd-2024-09-06-11-12-02.db \
--cacert=/etc/kubernetes/pki/etcd/ca.crt  \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key  \
--data-dir=/var/lib/etcd/   \
--endpoints=https://127.0.0.1:2379 \
--initial-cluster=master01=https://192.168.1.161:2380,master02=https://192.168.1.162:2380,master03=https://192.168.1.163:2380 \
--name=master01 \
--initial-advertise-peer-urls=https://192.168.1.161:2380

恢复成功如下

[root@master01 ~]# ls /var/lib/etcd
member

发送快照文件到其他master节点

scp  /opt/etcd_backup/snap-etcd-2024-09-06-11-12-02.db   master02:/opt/etcd_backup/
scp  /opt/etcd_backup/snap-etcd-2024-09-06-11-12-02.db   master03:/opt/etcd_backup/

master02恢复

注意修改主机名称和urls地址

ETCDCTL_API=3 etcdctl snapshot restore  /opt/etcd_backup/snap-etcd-2024-09-06-11-12-02.db \
--cacert=/etc/kubernetes/pki/etcd/ca.crt  \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key  \
--data-dir=/var/lib/etcd/   \
--endpoints=https://127.0.0.1:2379 \
--initial-cluster=master01=https://192.168.1.161:2380,master02=https://192.168.1.162:2380,master03=https://192.168.1.163:2380 \
--name=master02 \
--initial-advertise-peer-urls=https://192.168.1.162:2380

master03恢复

ETCDCTL_API=3 etcdctl snapshot restore  /opt/etcd_backup/snap-etcd-2024-09-06-11-12-02.db \
--cacert=/etc/kubernetes/pki/etcd/ca.crt  \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key  \
--data-dir=/var/lib/etcd/   \
--endpoints=https://127.0.0.1:2379 \
--initial-cluster=master01=https://192.168.1.161:2380,master02=https://192.168.1.162:2380,master03=https://192.168.1.163:2380 \
--name=master03 \
--initial-advertise-peer-urls=https://192.168.1.163:2380

所有节点启动etcd

mv /home/etcd.yaml  /etc/kubernetes/manifests/

验证

可以看到我们删除的资源已经恢复了

增加备份脚本

[root@master01 scpipt]# cat etcd_backup.sh 
#!/bin/bash# 定义环境变量
ETCDCTL_API=3
ETCD_CACERT="/etc/kubernetes/pki/etcd/ca.crt"
ETCD_CERT="/etc/kubernetes/pki/etcd/peer.crt"
ETCD_KEY="/etc/kubernetes/pki/etcd/peer.key"
ETCD_ENDPOINTS="192.168.1.161:2379"  # 可以根据需要添加更多端点# 定义备份目录和文件名
BACKUP_DIR="/opt/etcd_backup"
BACKUP_FILE="snap-etcd-$(date +%F-%H-%M-%S).db"
BACKUP_PATH="${BACKUP_DIR}/${BACKUP_FILE}"# 创建备份目录(如果不存在)
mkdir -p "${BACKUP_DIR}"# 执行备份操作
ETCDCTL_CACERT="${ETCD_CACERT}" \
ETCDCTL_CERT="${ETCD_CERT}" \
ETCDCTL_KEY="${ETCD_KEY}" \
ETCDCTL_ENDPOINTS="${ETCD_ENDPOINTS}" \
etcdctl snapshot save "${BACKUP_PATH}"# 检查备份是否成功
if [ $? -eq 0 ]; thenecho "Backup successfully created at ${BACKUP_PATH}"
elseecho "Backup failed"exit 1
fi

每周三晚上12点执行备份脚本:

[root@master01 scpipt]# crontab -e
0 0 * * 4 /scpipt/etcd_backup.sh

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

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

相关文章

使用 Android Lua Helper 在VSCODE中调试安卓Lua应用

一、VSCODE 与 Android Lua Helper 的功能特点 Visual Studio Code(VSCODE)是一款功能强大的代码编辑器,它以其高度可定制的界面、强大的扩展生态系统、流畅的性能表现以及对众多编程语言的天然支持而备受开发者青睐。在众多的开发场景中,VSCODE 都展现出了卓越的性能和灵活…

【git】No user exists for uid 1000 fatal: 无法读取远程仓库。

一、问题今天拉取代码时,突然报错 二、处理过程 1、检查用户信息 $ id -u1000用户的id是对的 那是因为什么呢2、重启终端 发现还是不行3、重启电脑 发现还是不行三、解决方案 最终重新生效环境变量 $ source ~/.bashrc然后重新执行拉取更新 $ git fetchremote: Enumerating ob…

最罕见的性格,在程序员里却最常见?它就是。。

当然,性格测试也不绝对准确,毕竟谁还没有一点儿 “逆反” 心理呢?大家好,我是程序员鱼皮。不知道大家有没有了解过 MBTI?这是目前特别流行的人格测试,可以帮助你更了解自己。 MBTI 将人格分为 4 个维度,每个维度有 2 个选项:比如在精力来源这点,就分为内倾和外倾(俗称…

etcd集群新增节点和移除节点

etcd集群新增节点和删除节点 现在的集群信息是: 新增节点1、下载etcd二进制包wget https://github.com/etcd-io/etcd/releases/download/v3.5.15/etcd-v3.5.15-linux-amd64.tar.gz2、创建etcd目录mkdir -p /data/etcd/{data,ssl,bin}3、解压并移动etcd命令至etcd目录tar zxf …

My SQL 列转行操作

原表结构如下,我们可以发现,“日运输量”和“车次”是在同一张表中相互独立的两个字段,即独立的两列数据,下面,我将系统中的测试数据以及代码全部放出来,以解释列转行的操作方法 原表数据库查询代码:1 SELECT 2 yzrq AS 运作日期, 3 DATE_FORMAT( yzrq, %Y-%m )…

VS中 调试逐语句和逐过程的区别

逐过程(F10)在遇到函数时,会把函数从整体上看做一条语句,不会进入函数内部;逐语句(F11)在遇到函数时,认为函数由多条语句构成,会进入函数内部。

使用 nuxi init 创建全新 Nuxt 项目

title: 使用 nuxi init 创建全新 Nuxt 项目 date: 2024/9/6 updated: 2024/9/6 author: cmdragon excerpt: 摘要:本文介绍了如何使用nuxi init命令创建全新的Nuxt.js项目,包括安装所需环境、命令使用方法、指定模板、强制克隆、启动开发服务器等步骤,并提供了完整的项目初…

KUnit:设备模拟重定向

设备模拟 有些驱动文件是需要device的,所以KUnit提供了一些设备模拟的方法,并且还提供了总线来管理设备的生命周期。 下面先以clock device模拟举例(drivers/clk/clk_test.c)首先用一个struct来模拟这个clk设备。其中clk_hw是clk的描述,rate相当于模拟设备的波特率寄存器s…

IDA 动态调试初步学习

题目 https://files.buuoj.cn/files/985826f5dda0d8665ed997a49321dd88/attachment.zip 1C这个值太小导致加密失败,所以考虑动态调试修改1C为更大的值选择调试F2下一些断点找到1C在内存中的位置F9开始调试先F7单步,观察右下角的Stack view,内存中出现1C先选中,然后按F2,然后修改…

JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的区别

JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的区别JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的异同点 一、什么是 structuredClone? 1. structuredClone 的发展 structuredClone 是在 ECMAScript 2021(ES12)标…

【c】printf()中%占位符的选取和使用: %d, %s等

格式占位符速通 格式占位符 %格式占位符 % 是在 C/C++ 语言中格式输入函数,如 scanf、printf 等函数中使用。 其意义就是起到格式占位的意思,表示在该位置有输入或者输出。规定符%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指…

kingbase——创建truncate函数

写上一篇比较round函数与truncate函数时,顺手试了一下KINGBASE数据库,应该是没有TRUNCATE这个函数,要使用估计得手动创建。创建函数如下 create or replace function sys.truncate(numeric,int4) returns numeric as declarevalue numeric;result numeric; beginvalue := l…