当前位置 博文首页 > 山间漫步人生路的博客:ETCD的备份以及数据恢复
Etcd备份
备份一个etcd即可
#!/usr/bin/env bashdate;
ETCDCTL_API=3 /opt/etcd/bin/etcdctl \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/server.pem \
--key=/opt/etcd/ssl/server-key.pem \
--endpoints="192.168.30.88:2379" \
snapshot save /data/etcd_backup_dir/etcd-snapshot-`date +%Y%m%d`.db
# 备份保留30天
find /data/etcd_backup_dir/ -name *.db -mtime +30 -exec rm -f {} \;
停止 Master 上 kube-apiserver 服务
systemctl stop kube-apiserver
确认 kube-apiserver 服务是否停止
ps -ef | grep kube-apiserver
停止集群中所有 ETCD 服务
systemctl stop etcd
移除所有 ETCD 存储目录下数据
$ mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak
拷贝 ETCD 备份快照
scp /data/etcd_backup_dir/etcd-snapshot-20210126.db root@192.168.111.62:/var/lib/etcd_backup/
scp /data/etcd_backup_dir/etcd-snapshot-20210126.db root@192.168.111.61:/var/lib/etcd_backup/
恢复备份 在每个节点上执行一次
(此处的端口号是2380)
#master上
ETCDCTL_API=3 /opt/etcd/bin/etcdctl snapshot restore /data/etcd_backup_dir/etcd-snapshot-20210126.db \
--name etcd-1 \
--initial-cluster "etcd-1=https://192.168.111.60:2380,etcd-2=https://192.168.111.61:2380,etcd-3=https://192.168.111.62:2380" \
--initial-cluster-token etcd-cluster \
--initial-advertise-peer-urls https://192.168.111.60:2380 \
--data-dir=/var/lib/etcd/default.etcd
#node1上
ETCDCTL_API=3 /opt/etcd/bin/etcdctl snapshot restore /var/lib/etcd_backup/etcd-snapshot-20210126.db \
--name etcd-2 \
--initial-cluster "etcd-1=https://192.168.111.60:2380,etcd-2=https://192.168.111.61:2380,etcd-3=https://192.168.111.62:2380" \
--initial-cluster-token etcd-cluster \
--initial-advertise-peer-urls https://192.168.111.61:2380 \
--data-dir=/var/lib/etcd/default.etcd
#node2上
ETCDCTL_API=3 /opt/etcd/bin/etcdctl snapshot restore /var/lib/etcd_backup/etcd-snapshot-20210126.db \
--name etcd-3 \
--initial-cluster "etcd-1=https://192.168.111.60:2380,etcd-2=https://192.168.111.61:2380,etcd-3=https://192.168.111.62:2380" \
--initial-cluster-token etcd-cluster \
--initial-advertise-peer-urls https://192.168.111.62:2380 \
--data-dir=/var/lib/etcd/default.etcd
启动ETCD
systemctl start etcd
三台 ETCD 启动完成,检查 ETCD 集群状态
(此处的端口号是2379)
ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints=https://192.168.111.60:2379,https://192.168.111.61:2379,https://192.168.111.62:2379 endpoint health
三台 ETCD 全部健康,分别到每台 Master 启动 kube-apiserver
$ systemctl start kube-apiserver
检查 Kubernetes 集群是否恢复正常
$ kubectl get cs
Kubernetes 集群备份主要是备份 ETCD 集群。而恢复时,主要考虑恢复整个顺序:
停止kube-apiserver --> 停止ETCD --> 恢复数据 --> 启动ETCD --> 启动kube-apiserver