Write by lyc at 2021-7-12
Ucloud ETCD 备份

etcd 备份与恢复

1.二进制部署方式备份

备份:

选择 1~2 个 etcd 节点来执行备份动作,使备份数据冗余。

1
2
3
4
5
6
7
8
9
10
# 创建备份目录
$ mkdir -p /data/backup/etcd_backup

# 备份
$ ETCDCTL_API=3 /opt/etcd/bin/etcdctl \
snapshot save /data/backup/etcd_backup/snap_`date "+%Y%m%d%H%M%S"`.db \
--endpoints=https://192.168.100.190:2379 \
--cacert=/opt/etcd/ssl/ca.pem \
--cert=/opt/etcd/ssl/server.pem \
--key=/opt/etcd/ssl/server-key.pem

恢复:

先暂停所有节点的 kube-apiserver(可选) 和 etcd,防止有数据写入 etcd 集群

1
2
3
systemctl stop kube-apiserver 
systemctl stop etcd
mv /var/lib/etcd/default.etcd /var/lib/etcd/default.etcd.bak

依次在每个 etcd 节点上执行恢复动作

1
2
3
4
5
6
7
# 注意修改以下节点实际信息
ETCDCTL_API=3 /opt/etcd/bin/etcdctl snapshot restore snap.db \
--name etcd-1 \
--initial-cluster="etcd-1=https://192.168.100.190:2380,etcd-2=https://192.168.100.191:2380,etcd-3=https://192.168.100.192:2380" \
--initial-cluster-token=etcd-cluster \
--initial-advertise-peer-urls=https://192.168.100.190:2380 \
--data-dir=/var/lib/etcd/default.etcd

启动所有节点的 kube-apiserveretcd

1
2
systemctl start kube-apiserver 
systemctl start etcd

2.kubeadm 部署方式备份

备份:

1
2
3
4
5
6
ETCDCTL_API=3 etcdctl \
snapshot save 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

恢复:

先暂停 kube-apiserver 和 etcd 容器

1
2
mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
mv /var/lib/etcd/ /var/lib/etcd.bak

恢复

1
2
3
ETCDCTL_API=3 etcdctl \
snapshot restore snap.db \
--data-dir=/var/lib/etcd

启动kube-apiserver和etcd容器

1
mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests