etcd
DOK 提供了 Etcd 的备份/恢复命令,具体的使用可以参考 dok -h
,下面是 Etcd 备份/恢复功能实现的原理,关于 Kubernetes Etcd 的集群数据备份和恢复,也可以参考k8s的官方文档 或者是 VMware的文档。
DOK 为每个 controlplane 节点都预安装了 etcdctl 工具,路径在 /usr/bin/etcdctl
,版本跟 k8s 对应的 Etcd 的版本一致 3.4.13-0。
操作的想法是参考了这篇文章。
yum -y install etcd
ETCDCTL_API=3 etcdctl snapshot save /tmp/snap.db \
--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
# 备份文件为snap.db
mv /etc/kubernetes/manifests/{kube-apiserver.yaml,etcd.yaml} /tmp/
mv /var/lib/etcd /var/lib/etcd.bak
ETCDCTL_API=3 etcdctl snapshot restore /tmp/snap.db --data-dir=/var/lib/etcd
mv /tmp/{kube-apiserver.yaml,etcd.yaml} /etc/kubernetes/manifests
因为 Etcd 集群的数据在不同节点上是相互同步的,所以备份的时候只需要针对一个节点的数据操作就好,但是为了保险,一般都会在至少两个节点上去做备份,以防某个节点有问题,导致备份数据无法取出。
数据恢复的话,需要一般会把备份文件拷贝到所有节点,并且在所有节点上都进行一次数据恢复,数据恢复时,会把所有 kube-apiserver 以及 Etcd 都停止,先逐个把 Etcd 的数据进行恢复,然后再重新启动 Etcd,最后启动 kube-apiserver。
DOK 会自动在 ControlPlane 节点上部署一个关于 etcd 的 crontab 任务,以定期给 etcd 执行备份和清理冗余备份,默认情况下,每60分钟执行一下数据备份,最多保存1天的备份。
# 到master0查看定时任务
crontab -l