Kubesphere—— ETCD数据备份与恢复

一、ETCD基础概念及相关参数

​​​​​​​etcd是一个高可用的分布式键值对存储系统,常用于配置共享和服务发现。它由CoreOS公司发起,基于Raft算法实现,确保了强一致性和高可用性。etcd的名称源自两个概念:Linux的/etc文件夹和分布式系统。‌

etcd的基本概念

etcd使用Raft算法来解决分布式系统中的一致性问题。Raft算法通过选举过程选择一个领导者来处理所有数据操作,确保了系统的稳定性和数据一致性。etcd支持多种配置参数,包括成员名称、数据存储目录、日志目录等,这些参数可以通过命令行参数进行配置。

etcd的配置参数

etcd的配置参数包括:

  • --name:为成员指定一个易读的名称。
  • --data-dir:数据存储目录的路径。
  • --wal-dir:用于存放Write-Ahead Log的目录路径。
  • --snapshot-count:触发快照到磁盘的已提交事务数量。
  • --heartbeat-interval:心跳间隔时间(毫秒)。
  • --election-timeout:选举超时时间(毫秒)。
  • --listen-peer-urls:用于监听对等节点流量的URL列表。
  • --listen-client-urls:用于监听客户端gRPC和HTTP流量的URL列表。

etcd的使用场景和服务发现机制

etcd主要用于服务发现和配置共享。服务发现通过在etcd中注册服务并设置key TTL来实现,定时保持服务的心跳以监控健康状态。etcd作为服务存储目录,确保了强一致性和高可用性,是服务发现的三大支柱之一。

二、备份ETCD数据

Kubesphere集群使用的etcd通常运行在控制平台节点上,可以通过etcdctl工具来备份etcd数据。

1. 安装etcdctl

如果etcdctl没有安装,可以使用以下命令安装etcdctl工具。

apt-get install etcd-client

 2. 确认ETCD环境变量

在控制平台节点上,etcd 的 API 通过 HTTPS 进行保护。因此,你需要指定一系列证书文件和 etcd 服务的端点。

export ETCDCTL_API=3                #用于设置etcdctl的API版本为3         
export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379     #设置监听地址及端口,这里为监控本机地址及默认的2379端口
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt   #CA证书
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt  #客户端证书
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key   #客户端密钥

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启动中查找。

 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、 定期备份

注:该步骤可以不做

 你可以使用定时任务(crontab)来定期备份 etcd数据。例如,每天凌晨备份一次:

crontab -l   # 查看定时任务

crontab -e   # 编写定时任务


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 之前,必须先停止 kubrnetes 控制平台上的组件,包括 kube-apiserver 、kube-contronller-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 。

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

1、 备份频率:建议定期备份 etcd ,并根据集群的重要性和数据变化频率确定备份频率。生产环境中的集群建议每日备份。

2、 备份位置:将备份文件存储在安全的地方,可以考虑远程存储或云端存储。

3、 多节点集群的恢复:如果是高可用的节点 etcd 集群,恢复时需要对所有 etcd 节点进行操作,确保数据一致性。

4、 测试恢复流程 :定期在非生产环境中测试备份与恢复流程,确保在真正故障时能够快速、无误地恢复集群。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值