注意: 利用 etcd 备份可还原集群中的资源对象,但集群中应用所挂载的持久化存储的备份与还原,依赖存储系统的备份还原能力。集群操作需谨慎!集群操作需谨慎!集群操作需谨慎!
使用 kk 部署的 k8s 集群 etcd 默认每天有备份,可以根据需求调整备份周期,对于备份数据,可以定期上传到对象存储。(每个备份目录中包含snapshot.db文件)
测试内容
1. 新建 etcd 备份
2. 整体删除 wordpress 命名空间
3. 利用 etcd 备份对集群进行还原,并验证 wordpress 命名空间是否被恢复
测试步骤:
1.新建备份
bash /usr/local/bin/kube-scripts/etcd-backup.sh
etcd-2024-05-29-16-40-21 为新建备份
2.删除 wordpress 命名空间 (本次为测试操作,正式环境禁止执行该高危操作)
3.还原集群数据
注意: 使用同一份备份数据对集群进行还原,将备份 etcd-2024-05-29-16-40-21 同步到多有 etcd 节点
暂停集群所有 control-plan 节点相关服务 (kubelet、docker、etcd)
systemctl stop kubelet
systemctl stop docker
systemctl stop etcd
将所有etcd节点原始数据目录备份(目的为清空etcd数据目录,为恢复数据做准备)
mkdir -p /var/lib/etcd-bak
mv /var/lib/etcd/* /var/lib/etcd-bak/
在每个 etcd 节点上执行数据还原
## 还原命令中的参数从 /etc/etcd.env 文件中获取
# node1
etcdctl snapshot restore /var/backups/kube_etcd/etcd-2024-05-29-16-40-21/snapshot.db \
--name=etcd-node1 --endpoints=https://192.168.6.4:2379 \
--initial-cluster=etcd-node1=https://192.168.6.4:2380,etcd-node2=https://192.168.6.5:2380,etcd-node3=https://192.168.6.6:2380 \
--initial-advertise-peer-urls=https://192.168.6.4:2380 \
--initial-cluster-token=k8s_etcd \
--data-dir=/var/lib/etcd
# node2
etcdctl snapshot restore /home/ubuntu/etcd-2024-05-29-16-40-21/snapshot.db \
--name=etcd-node2 --endpoints=https://192.168.6.5:2379 \
--initial-cluster=etcd-node1=https://192.168.6.4:2380,etcd-node2=https://192.168.6.5:2380,etcd-node3=https://192.168.6.6:2380 \
--initial-advertise-peer-urls=https://192.168.6.5:2380 \
--initial-cluster-token=k8s_etcd \
--data-dir=/var/lib/etcd
# node3
etcdctl snapshot restore /home/ubuntu/etcd-2024-05-29-16-40-21/snapshot.db \
--name=etcd-node3 --endpoints=https://192.168.6.6:2379 \
--initial-cluster=etcd-node1=https://192.168.6.4:2380,etcd-node2=https://192.168.6.5:2380,etcd-node3=https://192.168.6.6:2380 \
--initial-advertise-peer-urls=https://192.168.6.6:2380 \
--initial-cluster-token=k8s_etcd \
--data-dir=/var/lib/etcd
重启所有 etcd 节点 etcd 服务 (注意: 3 节点 etcd 应同时启动两台 etcd ,集群才可恢复正常)
检查 etcd 集群状态
export ETCDCTL_CACERT=/etc/ssl/etcd/ssl/ca.pem
export ETCDCTL_KEY=/etc/ssl/etcd/ssl/admin-node3-key.pem
export ETCDCTL_CERT=/etc/ssl/etcd/ssl/admin-node3.pem
export ETCDCTL_ENDPOINTS=https://192.168.6.4:2379,https://192.168.6.5:2379,https://192.168.6.6:2379
etcd 集群状态正常后,重启集群 control-plan 节点服务 (docker,kubelet)
systemctl restart docker
systemctl restart kubelet
检查集群状态及 wordpress 命名空间状态