#打卡不停更# Kubernetes 集群 ETCD 数据库备份 原创

whale_life
发布于 2022-9-23 15:08
浏览
0收藏

Kubernetes etcd 数据库备份

上篇文章中,介绍了 Kubernetes 资源的备份工具 Velero,我们可以安全快速的备份出运行在 Kubernetes 的资源,但是 Kubernetes 本身的备份更多的依赖 etcd 备份策略,所以我们本篇文章介绍备份 etcd 数据库。

了解这两篇文章的精髓,那么玩转 Kubernetes 云环境的备份恢复就如鱼得水。

一般情况的 Kubernetes 部署分为 kubeadm 部署和二进制部署,二进制部署备份etcd 相对较为简单,所以本篇文章介绍 kubeadm 及其边缘依赖kubeadm ,比如 sealos、kubekey 部署的 etcd 备份,此种部署方式, etcd 部署在容器内部,我们就需要备份容器内部的数据。

1. etcdctl 命令拷贝

在 master 主机或者 etcd 所在节点的主机执行如下命令,将容器中的 etcdctl 命令拷贝至本机系统 PATH 路径下。

  • 宿主机为 docker 环境
docker cp $(docker ps  | grep etcd | grep -v pause | head -1 |awk '{print $1}'):/usr/local/bin/etcdctl /usr/local/bin/
  • 宿主机为 containerd 环境
    nerdctl
    不能使用 kubectl cp,因为kubectl cp 本质是 kubectl exec -i -n <some-namespace> <some-pod> -- tar xf - ,是需要容器中支持 tar 命令,官方 etcd 镜像并没有 tar 命令,所以会有 command terminated with exit code 126 报错。
nerdctl cp $(nerdctl ps  | grep etcd | grep -v pause | head -1 | awk '{print $1}'):/usr/local/bin/etcdctl /usr/local/bin/

本命令支持单节点多 etcd pod ,所以可以直接执行。

2. 创建备份目录

mkdir -pv /data/etcd-backup

3. 备份静态资源配置文件

这个操作一般仅需执行一次即可。

cp -r /etc/kubernetes/ /data/k8s-static-resource-backup

4. 备份 Kubernetes etcd 配置文件

这个操作一般仅需执行一次即可。

cp -r /var/lib/etcd/   /data/etcd-config-backup

5.基于快照备份 etcd

一般配置为定时任务,每天晚上定时备份即可。

  • 声明API版本
    如果是2版本的不需要声明
export ETCDCTL_API=3
  • 备份
    将etcd节点后端快照存储到给定文件
etcdctl --endpoints 127.0.0.1:2379  --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key"  --cacert="/etc/kubernetes/pki/etcd/ca.crt"   snapshot save   /data/etcd-backup/snap-$(date +%Y-%m-%d).db
  • 查看快照状态
etcdctl snapshot status /opt/etcd-backup/snap-2022-09-01.db --write-out=table
Deprecated: Use `etcdutl snapshot status` instead.

+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| e27b7615 | 29913645 |       6585 |      40 MB |
+----------+----------+------------+------------+

etcd 还原

1.清除节点 etcd 数据目录

清空该目录前清注意是否有备份,没有的话需要先备份该目录,防止还原失败。若不清除该目录,则还原操作会失败。

rm -rf /var/lib/etcd

2.使用备份的快照文件还原数据

etcdctl snapshot restore  /opt/etcd-backup/snap-2022-09-01.db  --cacert=/etc/kubernetes/pki/etcd/ca.crt  --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key  --data-dir=/var/lib/etcd/   --endpoints=https://127.0.0.1:2379

本文章展示的是单点 etcd ,备份恢复策略,集群的也类似,只不过 endpoint 需要添加 etcd 集群中的节点,其余是是类似的。
这是本人生产环境的备份数据,也要定期拷贝至其他备份存储上。
#打卡不停更# Kubernetes 集群 ETCD 数据库备份-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
1
收藏
回复
举报
回复
    相关推荐