
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源
去关联
在上篇文章中,介绍了 Kubernetes 资源的备份工具 Velero,我们可以安全快速的备份出运行在 Kubernetes 的资源,但是 Kubernetes 本身的备份更多的依赖 etcd 备份策略,所以我们本篇文章介绍备份 etcd 数据库。
了解这两篇文章的精髓,那么玩转 Kubernetes 云环境的备份恢复就如鱼得水。
一般情况的 Kubernetes 部署分为 kubeadm 部署和二进制部署,二进制部署备份etcd 相对较为简单,所以本篇文章介绍 kubeadm 及其边缘依赖kubeadm ,比如 sealos、kubekey 部署的 etcd 备份,此种部署方式, etcd 部署在容器内部,我们就需要备份容器内部的数据。
在 master 主机或者 etcd 所在节点的主机执行如下命令,将容器中的 etcdctl
命令拷贝至本机系统 PATH
路径下。
docker cp $(docker ps | grep etcd | grep -v pause | head -1 |awk '{print $1}'):/usr/local/bin/etcdctl /usr/local/bin/
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 ,所以可以直接执行。
mkdir -pv /data/etcd-backup
这个操作一般仅需执行一次即可。
cp -r /etc/kubernetes/ /data/k8s-static-resource-backup
这个操作一般仅需执行一次即可。
cp -r /var/lib/etcd/ /data/etcd-config-backup
一般配置为定时任务,每天晚上定时备份即可。
export ETCDCTL_API=3
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 |
+----------+----------+------------+------------+
清空该目录前清注意是否有备份,没有的话需要先备份该目录,防止还原失败。若不清除该目录,则还原操作会失败。
rm -rf /var/lib/etcd
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 集群中的节点,其余是是类似的。
这是本人生产环境的备份数据,也要定期拷贝至其他备份存储上。