我正在研究一些针对 Kubernetes 和 Openshift 的备份和恢复解决方案,通常使用 Velero。因此,我不熟悉 ETCD 备份,但我想询问有关 etcd 快照恢复的粒度级别。ETCD 快照是否仅允许恢复整个集群状态?或者我们可以恢复一些特定对象,如命名空间、部署、pod、pvc 等?换句话说,ETCD 备份是否可以执行与 velero 相同的工作(除了涉及卷的内容)?
答案1
Etcd 快照和恢复不是为了部分恢复,而是全部或全部。
但是,您可以使用 etcd 快照来检索丢失的数据并在集群中重新创建它们,而无需重置 etcd。
一种方法是将 etcd 数据库恢复到工作站上的容器中。启动一个容器,例如:
docker -v $(pwd)/restore-path:/restore run --entrypoint /bin/sh -it quay.io/coreos/etcd:vX.Y.Z
恢复快照,启动 etcd,然后查询它:
etcdctl snapshot restore /restore/snapshot.db
etcd --name default --listen-client-urls http://localhost:2379 --advertise-client-urls http://localhost:2379 --listen-peer-urls http://localhost:2380 &
etcdctl get / --prefix --keys-only
您应该会取回存储在 etcd 中的对象列表。现在尝试找到要恢复的对象:
etcdctl get / --prefix --keys-only | grep my-object-name
etcdctl get /kubernetes.io/configmaps/my-namespace/lost-config --print-value-only | tee -a /restore/my-lost-config.out
此输出有点混乱,因为它会随 YAML 返回一些不可打印的字符。不过,它应该足以恢复一些对象。否则,您可以查看类似 Augher (https://github.com/jpbetz/auger),它应该可以帮您清理这些问题,如果您需要一些强大的脚本来执行此类恢复,...
答案2
如果您想要以 JSON 格式备份 etcd,以便轻松恢复到任何集群,则可以使用我开发的这个简单的备份和恢复实用程序:简单-etcd-备份-恢复
此实用程序使备份和恢复过程更轻松、更快捷。您还可以压缩/解压缩备份文件并将其上传/下载到 AWS S3 存储桶。备份文件的大小也会变小。备份文件中的数据也保持可读性。