Etcd 数据备份
在 Kubernetes 中,etcd 是一个重要的组件,用于存储所有的集群数据。如果想要备份 etcd 数据,可以直接备份 etcd 数据目录,通常位于 /var/lib/etcd/
。
etcd 的数据默认会存放在我们的命令工作目录中,我们发现数据所在的目录,会被分为两个文件夹中:
- snap: 存放快照数据, etcd 防止 WAL 文件过多而设置的快照,存储 etcd 数据状态。
- wal: 存放预写式日志, 最大的作用是记录了整个数据变化的全部历程。在 etcd 中,所有数据的修改在提交前,都要先写入到 WAL 中。
1 | # 备份/etc/kubernetes目录 |
数据恢复
kubeadm安装的单节点master集群,使用的API VERSION为V3
备份ETCDCTL_API为 3 的 etcd 数据到之前的备份目录下
1 | ETCDCTL_API=3 etcdctl --endpoints="https://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 /backup_$(date +%Y%m%d)/snap-$(date +%Y%m%d%H%M).db |
需要先停掉 Master 节点的 kube-apiserver 和 etcd 容器,确保 kube-apiserver 已经停止了。
备注:/etc/kubernetes/manifests 这个目录就是 master 自动运行的一些容器,将其移走或者重命名,自然就会停止了。
停掉 Master 机器的 kube-apiserver 和 etcd
1 | mv manifests manifests.bak |
查看 etcd、api 是否 up,等待全部停止
1 | docker ps | grep k8s_ |
全部停止之后变更 / var/lib/etcd
1 | mv /var/lib/etcd /var/lib/etcd.bak |
恢复 etcd 数据
1 | ETCDCTL_API=3 etcdctl --endpoints="https://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 restore /backup_20220108/snap-202201081337.db |
恢复 manifests
1 | mv manifests.bak manifests |
查看 pod 是否恢复正常