etcd备份和还原

etcd 是 一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。
etcd 被设计为能承受机器失败。etcd 集群自动从临时失败(例如,机器重启)中恢复,而且对于一个有 N 个成员的集群能容许 (N-1)/2 的持续失败。当一个成员持续失败时,不管是因为硬件失败或者磁盘损坏,它丢失到集群的访问。如果集群持续丢失超过 (N-1)/2 的成员,则它只能悲惨的失败,无可救药的失去法定人数(quorum)。一旦法定人数丢失,集群无法达到一致而因此无法继续接收更新。
为了从灾难失败中恢复,etcd v3 提供快照和修复工具来重建集群而不丢失 v3 键数据。

获取etcd key

查找etcd 所在位置

whereis etcd

输出内容

etcd: /etc/etcd.env /usr/local/bin/etcd

打开 /etc/etcd.env 配置文件
查看配置参数

cat /etc/etcd.env
# 找到参数
ETCD_TRUSTED_CA_FILE=/etc/ssl/etcd/ssl/ca.pem
ETCD_CERT_FILE=/etc/ssl/etcd/ssl/member-node1.pem
ETCD_KEY_FILE=/etc/ssl/etcd/ssl/member-node1-key.pem
ETCDCTL_ENDPOINTS=https://127.0.0.1:2379

快照备份

检查etcd是否正常

ETCDCTL_API=3 etcdctl \
--cacert=/etc/ssl/etcd/ssl/ca.pem \
--cert=/etc/ssl/etcd/ssl/member-node1.pem \
--key=/etc/ssl/etcd/ssl/member-node1-key.pem \
--endpoints=https://127.0.0.1:2379 endpoint health  

创建快照

ETCDCTL_API=3 etcdctl \
--cacert=/etc/ssl/etcd/ssl/ca.pem \
--cert=/etc/ssl/etcd/ssl/member-node1.pem \
--key=/etc/ssl/etcd/ssl/member-node1-key.pem \
--endpoints=https://127.0.0.1:2379 snapshot save snapshot.db

恢复备份

停止所有 Master 上 kube-apiserver 服务

systemctl stop kube-apiserver  
# 确认 kube-apiserver 服务是否停止 
ps -ef | grep kube-apiserver

停止集群中所有 ETCD 服务

systemctl stop etcd

移除所有 ETCD 存储目录下数据

mv /var/lib/etcd/member /var/lib/etcd/member.bak

恢复备份

ETCDCTL_API=3 etcdctl snapshot restore ./snapshot.db \
  --name etcd1 \
  --initial-cluster "etcd1=https://127.0.0.1:2379,etcd2=https://127.0.0.2:2379,etcd3=https://127.0.0.3:2379" \
  --initial-cluster-token etcd-cluster \
  --initial-advertise-peer-urls https://127.0.0.1:2380 \
  --data-dir=/var/lib/etcd/default.etcd

启动etcd

systemctl start etcd

检查k8s是否正常

kubectl get cs
Last Updated:
Contributors: jobcher