etcd 是一个开源的分布式键值存储,用于保存和管理分布式系统保持运行所需的关键信息。最值得注意的是,它管理流行的容器编排平台 Kubernetes 的配置数据、状态数据和元数据。
简单来说:
- etcd 是一个键 — 值数据存储。
- 配置数据和有关群集状态的信息位于其中。
- 容错和分布式
- etcd 旨在成为有关集群的最终事实来源。
- 例如→当用户运行 “kubectl get pods” 命令时,他们从存储在 etcd 中的值中得到答案。
现在我们知道什么是 etcd 数据存储。🎇 ✨
现在让我们学习如何从备份中进行备份和还原
-
安装 etcdctl :
etcdctl:一个用于与 etcd 服务器交互的命令行工具etcdctl version
如果安装了 etcdctl,您将看到如下所示的输出:
controlplane $ etcdctl version
etcdctl version: 3.5.0
API version: 3.5
如果没有,它将给出**“找不到命令”**错误。
您可以按照此 URL 中提供的步骤安装 etcdctl。您可以找到 Linux、MacOS 和 Docker 的安装指南。
- 获取端点和证书信息:
打开位于 :/etc/kubernetes/manifests 位置的 etcd 文件
我们可以使用以下命令检索有关端点的信息:
controlplane $ cat /etc/kubernetes/manifests/etcd.yaml | grep listen
- --listen-client-urls=https://127.0.0.1:2379,https://172.30.1.2:2379
- --listen-metrics-urls=http://127.0.0.1:2381
只需检查“— — 侦听客户端网址”的值。
我们可以使用以下命令获取证书信息。
controlplane $ cat /etc/kubernetes/manifests/etcd.yaml | grep file
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
seccompProfile:
只需检查“ — —* 证书**文件”、“— — 密钥文件”和“— — 受信任的文件”的值。*
如何备份 ETCD 数据存储?😈😏
现在我们有了所需的所有信息。我们可以通过使用以下命令来备份 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 save backup.db
需要把ETCDCTL_API=3** 放在命令的开头
etcdctl 用来与 etcd 对话的 API 版本可以通过 ETCDCTL_API 环境变量设置为版本 2 或 3。但是,我们需要确保它是 v3 API 的默认,以便拍摄快照。
在拍摄 etcd 的快照之前,让我们创建一个 pod 来验证。
使用以下命令:
kubectl run podbeforesnapshot --image=nginx
现在让我们运行快照保存命令并将快照另存为*“backup.db”*:
现在成功地备份了 etcd 😄
现在让我们学习恢复 ETCD 数据存储
如何从备份文件恢复 ETCD 数据存储?🤔🤔
- 在拍摄 etcd 的快照之前,让我们创建一个 pod 来验证。
使用以下命令:
kubectl run podaftersnapshot --image=nginx
现在,我们可以继续实际恢复 etcd。
想象一下 etcd 不知何故失败了,我们需要将其恢复到上次保存的状态。我们知道我们有一个备份.db我们之前保存了备份。
- 当我们使用 etcdctl 恢复保存的快照时,我们使用的命令和证书文件几乎与拍摄 etcd 快照时使用的命令和证书文件相同。
但是这一次,我们需要提供一个新的数据目录(“— — data-dir”),我们将在其中从备份.db数据库中复制集群数据。
ETCDCTL_API=3 etcdctl --data-dir="/var/lib/etcd-backup"
--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 backup.db
- 现在我们需要将 etcd yaml 文件中的 etcd 目录值替换为我们恢复备份.db数据存储的上述位置
**替换以下文件“/etc/kubernetes/*****manifests/etcd.yaml”***中的值:
现在我们已经成功地记录了所有值。只需给一些时间并通过运行以下命令验证整个集群:
controlplane $ kubectl get pods
NAME READY STATUS RESTARTS AGE
podbeforesnapshot 1/1 Running 0 14m
万岁!! 🥳🥳
我们已经成功地从备份.db数据存储😎😎中恢复了 etcd