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