etcd 恢复
我长按笔记本电脑开机按钮几秒强制关机模拟服务器断电宕机,可以看到启动完 linux 后 etcd 已经死透了,此操作非常危险如果你没有备份 etcd 那你的环境就死定了。
cat recoveryetcd.sh
#!/bin/bash
#删除之前的,也不备份了!!!
rm -rf /var/lib/etcd
# 获取当前主机的 IP 地址
CURRENT_IP=$(hostname -I | cut -d' ' -f1)
#HOSTNAME=$(hostname)
HOSTNAME="master.cluster.local"
# 构建自动添加端口的 peer 地址
PEER_URL="https://${CURRENT_IP}:2380"
# 定义 etcd 集群的初始成员信息
INITIAL_CLUSTER="${HOSTNAME}=https://${CURRENT_IP}:2380"
# 定义 etcd 集群的初始成员令牌
INITIAL_CLUSTER_TOKEN="etcd-cluster"
# 设置恢复快照文件
BACKUP_FILE="/var/backups/kube_etcd/etcd-2025-07-12-02-00-06/snapshot.db"
# 设置 etcd 证书路径
CACERT="/etc/ssl/etcd/ssl/ca.pem"
CERT="/etc/ssl/etcd/ssl/admin-master.pem"
KEY="/etc/ssl/etcd/ssl/admin-master-key.pem"
ETCDCTL_API=3 etcdctl snapshot restore $BACKUP_FILE \
--name $HOSTNAME \
--cacert "$CACERT" \
--cert "$CERT" \
--key "$KEY" \
--initial-cluster "$INITIAL_CLUSTER" \
--initial-cluster-token etcd-cluster \
--initial-advertise-peer-urls "$PEER_URL" \
--data-dir=/var/lib/etcd
if [ $? -eq 0 ]; then
echo "reset successful"
else
echo "reset failed"
fi
- 注意,还原脚本中我写的上来直接删除 etcd 数据目录,因为实在启动不起来而且我也事先做好备份了。
- 脚本中的 HOSTNAME 可以在 /etc/hosts 中看到,因为我是单节点 k8s 所以只有一个,你的环境要按实际内容调整。
然后执行脚本:
我们再重启etcd
systemctl restart etcd
说明已经成功了
欢迎来撩 : 汇总all