新钛云服已累计为您分享864篇技术干货

01

背景说明

场景:单Master架构的K8s集群,etcd以单节点形式运行在集群内。因误操作执行kubeadm reset -f导致集群瘫痪,需基于已有的etcd备份恢复。

核心难点

•         需同时恢复etcd数据、重建控制平面、重新加入节点

•         证书/令牌/配置文件的时序依赖关系复杂

02

前置检查:etcd 备份有效性验证

(此步骤建议在事故前定期执行,关键时刻能救命!)

#查看备份状态及元数据ETCDCTL_API=3 etcdctl --write-out=table snapshot status etcdbackup.db

✅ 关键指标:Hash值、总Key数量、备份时间戳

03

Master 节点恢复全流程

1.       数据抢救性备份(即使已误删!),防止进一步丢失重要信息

#打包残留数据(可能含未被覆盖的文件)timestamp=$(date +%Y%m%d%H%M%S)tar -zcvf /tmp/k8s_rescue_${timestamp}.tar.gz \  /etc/kubernetes \  /var/lib/kubelet \  /var/lib/etcd 2>/dev/null

2.       重建Master控制平面

#使用原参数初始化(务必与历史参数一致!)kubeadm init \  --pod-network-cidr=<network-cidr> \  --apiserver-advertise-address=<master-ip> \  --control-plane-endpoint=<control-plane-endpoint>

⚠️ 避坑点

•         若忘记历史参数,检查/etc/kubernetes/manifests/kube-apiserver.yaml残留

•         初始化后切勿立即加入节点

3.       Etcd数据恢复实操

Step1 停止kube-apiserver等组件mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests_stopStep2 还原etcd备份ETCDCTL_API=3 etcdctl snapshot restore ./etcdbackup.db --skip-hash-check=trueStep3 替换数据目录rm -rf /var/lib/etcd/membermv ./default.etcd/member /var/lib/etcd/memberStep4 重启控制平面mv /etc/kubernetes/manifests_stop /etc/kubernetes/manifests

4.       证书/令牌更新关键操作

#强制更新所有证书kubeadm certs renew all --force#重启核心组件Podfor comp in apiserver controller-manager scheduler; do  kubectl -n kube-system delete pod -l component=kube-${comp}done#需要生成一个新的 bootstrap-tokenkubeadm init phase bootstrap-token#生成新加入令牌(原token已失效)kubeadm token create --ttl 2h --print-join-command

04

Node 节点重新接入指南

#所有Node执行systemctl stop kubeletkubeadm reset -frm -rf /var/lib/kubelet/pki/ /etc/kubernetes/pki/ /etc/kubernetes/kubelet.confrm -rf $HOME/.kube/config#使用新token加入kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<ca-cert-hash>

05

恢复后验证清单

1.   节点状态

kubectl get nodes -o wide

2.   核心Pod健康状态

kubectl -n kube-system get pod | grep -E 'coredns|kube-proxy|etcd'

3.  跨服务通信测试

kubectl run test-nginx --image=nginxkubectl expose pod test-nginx --port=80kubectl run test-curl --image=radial/busyboxplus:curl -it --rm -- \  curl -v http://test-nginx.default.svc.cluster.local

4.    检查集群内域名解析

•   检查pod对service的域名解析,如有问题需要重启kube-proxy或coredns服务

5.   恢复 Kubernetes Dashboard 或其他工具

•     如果使用了如 Kubernetes Dashboard 、kuboard等工具,需要重新安装或重新配置它们

06

运维建议

1.       定期验证备份有效性

2.       使用etcd灾备工具(etcdbrctl)

3.       生产环境至少部署3节点etcd集群

误执行 kubeadm reset 虽会导致集群瘫痪,但只要具备有效的 etcd 备份并严格遵循恢复流程,集群仍可抢救回来。本次恢复过程涉及控制平面重建、证书更新、节点重加入等多个关键环节,每一步都需严谨操作,尤其要注意参数一致性和时序依赖。事后务必加强备份验证与灾备策略,推荐使用多节点 etcd 集群以提升容灾能力。记住:定期验证备份 + 规范运维流程 = 生产环境的救命稻草。

如有相关问题,请在文章后面给小编留言,小编安排作者第一时间和您联系,为您答疑解惑。

    推荐阅读   



    推荐视频    

更多推荐