k8s集群etcd备份与恢复

本文介绍了如何在K8s集群中使用etcd进行数据备份,包括安装etcd、设置API版本、创建备份目录并执行备份命令。同时详细说明了如何在etcd节点上进行数据恢复,以及恢复过程中需要注意的步骤和操作顺序。

一、前言

     k8s集群使用etcd集群存储数据,如果etcd集群崩溃了,k8s集群的数据就会全部丢失,所以需要日常进行etcd集群数据的备份,预防etcd集群崩溃后可以使用数据备份进行恢复,也可用于重建k8s集群进行数据恢复

二、备份

    先安装etcd服务,k8s集群使用的pod部署etcd集群

   yum -y install etcd

   更改etcd api版本为v3(临时生效,重启后会失效)

   export ETCDCTL_API=3

   永久生效

   vi /etc/profile

export ETCDCTL_API=3    #在末尾加入该配置

使配置生效 

source /etc/profile 

   查看是否生效

   etcdctl version

   

 etcd集群数据备份,只需在一个节点上执行备份即可,因为用的是pod部署所以直接调用etcd接口进行备份

 netstat -tlpn

创建备份存放目录

mkdir -p /opt/etcd/backup/ 

执行备份命令

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

ls -ll  /opt/etcd/backup/

三、恢复 

    etcd集群数据恢复需要在每个etcd的节点执行数据备份的恢复,执行恢复前需要先停止etcd服务和k8s组件服务apiserver、controller-manager、scheduler即manifests目录下的所有由yaml启动的服务

ls /etc/kubernetes/manifests/

 因为是通过pod的方式直接部署,将该目录更改名称所有服务就会停止

mv /etc/kubernetes/manifests  /etc/kubernetes/manifests.bak

再把原来的etcd数据目录也备份,以免恢复出问题需要还原

mv /var/lib/etcd /var/lib/etcd.bck

恢复etcd备份数据

ETCDCTL_API=3 etcdctl snapshot restore /opt/etcd/backup/etcdbackup.db --data-dir=/var/lib/etcd

 以上恢复操作需要在每个etcd节点均需执行,执行完成后在恢复etcd和k8s组件服务的运行

将etcd和k8s组件服务恢复运行

mv /etc/kubernetes/manifests.bak  /etc/kubernetes/manifests 

Kubernetes 中进行 etcd备份恢复操作是保障集群元数据安全的重要措施。etcdKubernetes 集群的核心组件之一,用于存储集群的状态信息和配置数据。因此,定期备份 etcd 数据可以防止数据丢失,并在发生故障时实现快速恢复。以下是基于 etcd v3.5.9 的备份恢复流程说明。 ### 一、etcd 备份 etcd 提供了内置的快照功能,可用于备份集群状态。以下是一个使用 `etcdctl` 命令行工具进行备份的示例: ```bash ETCDCTL_API=3 etcdctl \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \ --key=/etc/kubernetes/pki/apiserver-etcd-client.key \ --endpoints=https://<etcd-host>:2379 \ snapshot save /backup/etcd-snapshot.db ``` 其中 `<etcd-host>` 是 etcd 集群的一个健康节点地址。此命令会将当前 etcd 集群的状态保存为一个快照文件 `etcd-snapshot.db`,并输出快照的哈希值、版本号、键值对数量和文件大小等信息[^2]。 为了实现自动化备份,可以使用 Kubernetes 的 CronJob 资源定期执行上述命令,确保 etcd 数据的持续保护。 ### 二、etcd 恢复 当需要恢复 etcd 数据时,可以通过 `etcdctl` 的快照恢复功能来完成。假设当前 etcd 集群已经无法正常运行,则可以使用如下命令恢复数据: ```bash ETCDCTL_API=3 etcdctl \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \ --key=/etc/kubernetes/pki/apiserver-etcd-client.key \ snapshot restore /backup/etcd-snapshot.db \ --data-dir=/var/lib/etcd-from-backup ``` 此命令将快照文件 `etcd-snapshot.db` 恢复到指定的数据目录 `/var/lib/etcd-from-backup` 中。恢复完成后,需要更新 etcd 的配置文件(如 `/etc/kubernetes/manifests/etcd.yaml`),将数据目录指向新的位置,并重启 etcd 服务以应用更改。 ### 三、跨节点迁移版本一致性 如果需要在不同节点之间迁移 etcd 数据或确保所有节点使用相同的 etcd 版本(如 v3.5.9),可以通过 `scp` 命令复制快照文件和 etcd 二进制文件: ```bash scp /backup/etcd-snapshot.db user@remote-host:/backup/ scp -r /opt/etcd-v3.5.9-linux-amd64/ user@remote-host:/opt/ ``` 此操作确保了目标节点拥有源节点一致的 etcd 版本和数据快照,从而实现了 etcd 的跨节点迁移和版本一致性维护[^3]。 ### 四、使用 Docker 快速部署 etcd 对于测试环境或快速部署需求,可以使用 Docker 容器化方式快速启动一个带有证书的 etcd 实例。以下是一个简单的 Docker 命令示例: ```bash docker run -d \ --name etcd \ -p 2379:2379 \ -v $(pwd)/certs:/certs \ quay.io/coreos/etcd:v3.5.9 \ etcd \ --name my-etcd \ --data-dir /etcd-data \ --listen-client-urls https://0.0.0.0:2379 \ --advertise-client-urls https://localhost:2379 \ --cert-file /certs/server.crt \ --key-file /certs/server.key \ --trusted-ca-file /certs/ca.crt \ --client-cert-auth ``` 此命令启动了一个带有 TLS 证书的 etcd 容器,并监听 2379 端口。通过这种方式,可以在短时间内快速搭建起一个安全的 etcd 环境用于测试或开发目的[^4]。 ### 五、验证 etcd 快照内容 在执行备份恢复操作后,可以通过以下命令验证快照中的数据是否完整: ```bash ETCDCTL_API=3 etcdctl \ --cacert=./ca.crt \ --cert=./server.crt \ --key=./server.key \ --endpoints=localhost:2389 \ get / --prefix --keys-only ``` 此命令将列出 etcd 中的所有键,有助于确认快照中是否包含了预期的数据[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值