• 紧急!误执行kubeadm reset后如何从etcd备份恢复K8s集群?完整避坑指南

     背景说明

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

    核心难点​:

    • 需同时恢复etcd数据、重建控制平面、重新加入节点
    • 证书/令牌/配置文件的时序依赖关系复杂

     

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

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

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

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

     

    🔧 Master节点恢复全流程

    1. 数据抢救性备份(即使已误删!),防止进一步丢失重要信息
    Bash
    #打包残留数据(可能含未被覆盖的文件)
    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
    1. 重建Master控制平面
    Bash
    #使用原参数初始化(务必与历史参数一致!)
    kubeadm init \
    –pod-network-cidr=<network-cidr> \
    –apiserver-advertise-address=<master-ip> \
    –control-plane-endpoint=<control-plane-endpoint>

    ⚠️ 避坑点​:

    • 若忘记历史参数,检查/etc/kubernetes/manifests/kube-apiserver.yaml残留
    • 初始化后切勿立即加入节点​!
    1. Etcd数据恢复实操
    Bash
    Step1 停止kube-apiserver等组件
    mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests_stop
    Step2 还原etcd备份
    ETCDCTL_API=3 etcdctl snapshot restore ./etcdbackup.db –skip-hash-check=true
    Step3 替换数据目录
    rm -rf /var/lib/etcd/member
    mv ./default.etcd/member /var/lib/etcd/member
    Step4 重启控制平面
    mv /etc/kubernetes/manifests_stop /etc/kubernetes/manifests
    1. 证书/令牌更新关键操作
    Bash
    #强制更新所有证书
    kubeadm certs renew all –force
    #重启核心组件Pod
    for comp in apiserver controller-manager scheduler; do
    kubectl -n kube-system delete pod -l component=kube-${comp}
    done
    #需要生成一个新的 bootstrap-token
    kubeadm init phase bootstrap-token
    #生成新加入令牌(原token已失效)
    kubeadm token create –ttl 2h –print-join-command

     

    🖥️ Node节点重新接入指南

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

     

    恢复后验证清单

    1. 节点状态
    Plain Text
    kubectl get nodes -o wide
    1. 核心Pod健康状态
    Plain Text
    kubectl -n kube-system get pod | grep -E ‘coredns|kube-proxy|etcd’
    1. 跨服务通信测试
    Plain Text
    kubectl run test-nginx –image=nginx
    kubectl expose pod test-nginx –port=80
    kubectl run test-curl –image=radial/busyboxplus:curl -it –rm — \
    curl -v http://test-nginx.default.svc.cluster.local
    1. 检查集群内域名解析
    • 检查pod对service的域名解析,如有问题需要重启kube-proxy或coredns服务
    1. 恢复 Kubernetes Dashboard 或其他工具
    • 如果使用了如 Kubernetes Dashboard 、kuboard等工具,需要重新安装或重新配置它们

     

    💡 运维建议

    1. 定期验证备份有效性
    2. 使用etcd灾备工具(etcdbrctl)
    3. 生产环境至少部署3节点etcd集群

     

    «
    »
以专业成就每一位客户,让企业IT只为效果和安全买单

以专业成就每一位客户,让企业IT只为效果和安全买单

在线咨询
连接中...