当前位置: 首页 > news >正文

ETCD备份

环境信息:
kubernetes v1.22.2

一、备份前准备

1.确认 etcd 集群状态

kubectl get nodes -o wide  # 检查节点状态
kubectl get pods -n kube-system | grep etcd  # 查看 etcd Pod 位置(通常在 Master 节点)

2.准备备份工具

使用官方工具 etcdctl(需与 etcd 版本匹配):

# 查看 etcd 版本(在 Master 节点执行)
kubectl describe pod -n kube-system etcd-<master-node-name> | grep "Image:"
# 下载对应版本 etcdctl(示例:v3.5.0)
wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz
tar -xzvf etcd-v3.5.0-linux-amd64.tar.gz
sudo mv etcd-v3.5.0-linux-amd64/etcdctl /usr/local/bin/
etcdctl version  # 确认版本

3.获取 etcd 证书路径

在 Master 节点上,证书通常位于 /etc/kubernetes/pki/etcd/

ls /etc/kubernetes/pki/etcd/
# 输出:ca.crt  server.crt  server.key  peer.crt  peer.key

二、备份方案

方案1: 使用 etcdctl 手动快照备份(推荐)

# 在 Master 节点执行(替换 <master-node-ip>)
ETCDCTL_API=3 etcdctl \--endpoints=https://192.168.12.211:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd-snapshot-$(date +%Y%m%d%H%M%S).db

参数说明:

  • 仅单节点进行备份
  • --endpoints:etcd 服务地址(通常为 Master 节点 IP + 2379 端口)
  • --cacert:CA 证书路径
  • --cert--key:etcd 服务端证书和私钥
  • snapshot save:保存快照到指定路径

方案2: 通过静态 Pod 直接备份(无需证书)

如果 etcd 以静态 Pod 运行(Kubeadm 部署常见):

进入pod进行手动备份

# 进入 etcd Pod 容器
kubectl exec -it -n kube-system etcd-<master-node-name> -- sh# 在容器内执行备份
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/lib/etcd/snapshot.db

将手动备份的db文件拷贝到备份文件所在目录

1、使用scp进行备份文件(测试可用)
获取etcd节点ip
kubectl get pod -A  -o wide |grep etcd
[root@master-01 ~]# kubectl get pod -A  -o wide |grep etcd
kube-system     etcd-master-01                                       1/1     Running            30 (53m ago)      23d     192.168.12.211   master-01   <none>           <none>
kube-system     etcd-master-02                                       1/1     Running            17 (53m ago)      23d     192.168.12.212   master-02   <none>           <none>
kube-system     etcd-master-03                                       1/1     Running            17 (53m ago)      23d     192.168.12.213   master-03   <none>           <none>scp root@192.168.12.212:/var/lib/etcd/snapshot.db /backup/
2、使用kubectl cp
kubectl cp -n kube-system etcd-<master-node-name>:/var/lib/etcd/snapshot.db /backup/snapshot.db  

三、验证备份文件

# 检查快照状态
[root@master-01 backup]# etcdctl snapshot status /backup/snapshot.db   --write-out=table
Deprecated: Use `etcdutl snapshot status` instead.+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 8e9865be |   494341 |       1956 |      13 MB |
+----------+----------+------------+------------+

四、自动化备份(CronJob)

创建定时备份任务:

# etcd-backup-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:name: etcd-backupnamespace: kube-system
spec:schedule: "0 2 * * *"  # 每天凌晨2点备份jobTemplate:spec:template:spec:hostNetwork: truecontainers:- name: etcd-backupimage: k8s.gcr.io/etcd:3.5.0  # 与集群 etcd 版本一致command:- /bin/sh- -c- |etcdctl --endpoints=https://<master-ip>:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/snapshot-$(date +%Y%m%d).dbvolumeMounts:- name: etcd-certsmountPath: /etc/kubernetes/pki/etcd- name: backup-dirmountPath: /backupvolumes:- name: etcd-certshostPath:path: /etc/kubernetes/pki/etcd- name: backup-dirhostPath:path: /backuprestartPolicy: OnFailure

部署命令

kubectl apply -f etcd-backup-cronjob.yaml

五、灾难恢复(从备份还原)

还原操作会覆盖 etcd 数据,务必在测试环境验证!

# 1. 停止所有 etcd 服务(所有 Master 节点)
sudo systemctl stop etcd# 2. 还原快照(在任意 Master 节点)
etcdctl snapshot restore /backup/snapshot.db \--name etcd-0 \--initial-cluster etcd-0=https://<master-ip>:2380 \--initial-cluster-token etcd-cluster-1 \--initial-advertise-peer-urls https://<master-ip>:2380 \--data-dir /var/lib/etcd-restore# 3. 替换原数据目录
sudo mv /var/lib/etcd /var/lib/etcd-old
sudo mv /var/lib/etcd-restore /var/lib/etcd
sudo chown -R etcd:etcd /var/lib/etcd# 4. 重启 etcd 服务
sudo systemctl start etcd# 5. 验证集群状态
kubectl get nodes
http://www.dtcms.com/a/327986.html

相关文章:

  • Flask + Vue.js 物联网数字大屏实现方案
  • 学习:JS[9]作用域+函数进阶+深入对象+实例成员和静态成员
  • 为什么神经网络的权重矩阵具有低秩特性?如何理解和解释?
  • [Robotics_py] 机器人运动模型 | `update`函数 | 微积分矩阵
  • 线性代数 · 矩阵 | 最小多项式
  • 有限元方法中的数值技术:行列式、求逆、矩阵方程
  • 企业高性能web服务器(1)
  • 腾讯云服务器账户转移操作详解
  • ip归属地批量查询脚本
  • vue2+elementUI实现园型动态步骤条小组件,带缩放功能
  • ENCOPIM, S.L. 参展 AUTO TECH China 2025 广州国际汽车技术展览会
  • 基于STC8单片机的RTC时钟实现:从原理到实践
  • Cloud Computing(云计算)和Sky Computing(天空计算)
  • 自然语言处理关键库解析和使用方法- FuzzyWuzzy
  • kafka初步介绍
  • mysql登录失败 ERROR1698
  • Java零基础笔记15(Java编程核心:Stream流、方法中的可变参数、Collections工具类)
  • Ceph对象池详解
  • 数据分析专栏记录之 -基础数学与统计知识
  • js高阶-总结精华版
  • 《软件工程导论》实验报告一 软件工程文档
  • 跨界重构规则方法论
  • AI重构Java开发:飞算JavaAI如何实现效率与质量的双重突破?
  • pcl 按比例去除点云的噪点
  • 自动化运维实验
  • Baumer高防护相机如何通过YoloV8深度学习模型实现纸箱的实时检测计数(C#代码UI界面版)
  • 备份单表的方法
  • 工业相机镜头选型
  • HTTPS加密与私有CA配置全攻略
  • AI智能体平台大爆发,2025AI智能体平台TOP30