etcd 恢复
3节点master(master1、master2、master3),备份文件路径为脚本默认备份目录,按节点分别复制对应命令执行,严格遵循顺序,零业务中断。
第一步:所有 master 节点统一执行(停止组件+备份旧数据)
# 1. 配置etcdctl环境变量 export ETCDCTL_API=3 export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key export ETCDCTL_ENDPOINTS=https://127.0.0.1:2379 # 2. 停止kube-apiserver(必须执行) crictl ps | grep kube-apiserver | awk '{print $1}' | xargs crictl stop # 3. 停止etcd crictl ps | grep etcd | awk '{print $1}' | xargs crictl stop # 4. 停止kubelet(防止自动拉起组件) systemctl stop kubelet # 5. 备份原有etcd数据目录(防止恢复失败) mv /var/lib/etcd /var/lib/etcd.bak.$(date +%Y%m%d) mkdir -p /var/lib/etcd
第二步:仅 master1 执行(执行快照恢复,关键步骤)
# 3.5以下执行恢复,3.5以上使用etcdutl etcdctl snapshot restore /data/etcd/backup/snapshot-20260330-160000.db \ --data-dir=/var/lib/etcd \ --name=master1 \ --initial-cluster-token=etcd-cluster-1 \ --initial-cluster=master1=https://192.168.80.121:2380,master2=https://192.168.80.122:2380,master3=https://192.168.80.123:2380 \ --initial-advertise-peer-urls=https://192.168.80.121:2380
第三步:master2、master3 不执行恢复,仅执行权限修复
# 修改etcd数据目录权限(确保kubelet能正常拉起) chown -R root:root /var/lib/etcd chmod 700 /var/lib/etcd
第四步:所有 master 节点统一执行(启动组件,完成恢复)
# 启动kubelet,自动拉起etcd和kube-apiserver systemctl start kubelet # 等待15-20秒,检查etcd集群健康(验证恢复成功) etcdctl endpoint health --cluster -w table etcdctl member list -w table # 验证k8s集群恢复正常 kubectl get nodes kubectl get pods -A
恢复注意
- 若备份文件不在默认路径,将第二步命令中的
/data/etcd/backup/snapshot-20260330-153000.db替换为实际备份文件路径即可。 - 恢复期间无需操作worker节点,业务Pod正常运行,无感知。
- 执行完成后,若所有节点显示 healthy,且kubectl能正常查询,即为恢复成功。

浙公网安备 33010602011771号