温馨提示×

centos k8s安装后如何恢复

小樊
31
2025-12-05 22:07:20
栏目: 智能运维

CentOS 上 Kubernetes 安装后的恢复操作指南

一、先判断恢复类型

  • 控制面/etcd 数据损坏或丢失:需要基于 etcd 快照做恢复,优先保证数据一致性与版本匹配。
  • 仅应用层资源丢失:使用 Velero 恢复 Namespaces、Deployments、Services 等资源,适合误删或迁移场景。
  • 节点不可用或 kubeconfig 异常:属于环境/配置修复,无需动 etcd,重点在 kubeconfig、kubelet、网络插件与 swap 等。

二、控制面与 etcd 恢复步骤

  • 准备与校验
    • 确认有可用的 etcd 快照(如:snap1.db),以及 CA/证书路径:/etc/kubernetes/pki/etcd/ca.crt、server.crt、server.key
    • 建议先停止控制面组件并备份现有数据目录(可选):
      • systemctl stop etcd
      • cp -a /var/lib/etcd /var/lib/etcd.bak-$(date +%F)
  • 恢复快照
    • 清理旧数据目录:
      • rm -rf /var/lib/etcd/*
    • 从快照恢复:
      • export ETCDCTL_API=3
      • etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt
        –cert=/etc/kubernetes/pki/etcd/server.crt
        –key=/etc/kubernetes/pki/etcd/server.key
        snapshot restore snap1.db --data-dir /var/lib/etcd
  • 启动与验证
    • 启动 etcd 与控制面服务(按实际部署方式启动 kube-apiserver、kube-controller-manager、kube-scheduler 等,或使用 kubeadm 管理的静态 Pod)。
    • 验证健康状态:
      • etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt
        –cert=/etc/kubernetes/pki/etcd/server.crt
        –key=/etc/kubernetes/pki/etcd/server.key
        endpoint health
      • kubectl get nodes
      • kubectl get pods --all-namespaces
  • 重要提示
    • 恢复前后确保 Kubernetes 组件版本与 etcd 数据版本兼容,避免不一致导致异常。

三、仅应用层资源的恢复步骤(Velero)

  • 前置条件
    • 已安装 Velero 客户端服务端,并配置对象存储(如 MinIO/S3)作为备份后端。
  • 执行恢复
    • 查看可用备份:velero backup get
    • 全量恢复:velero restore create --from-backup
    • 指定命名空间恢复:velero restore create --from-backup --include-namespaces <ns1,ns2>
  • 验证
    • kubectl get ns
    • kubectl get pods --all-namespaces
    • 核对关键应用副本数与状态。

四、常见安装后环境与节点问题修复

  • kubeconfig 配置异常
    • 在 master 节点执行:
      • export KUBECONFIG=/etc/kubernetes/admin.conf
      • echo “export KUBECONFIG=/etc/kubernetes/admin.conf” >> /etc/profile
      • cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      • echo “export KUBECONFIG=$HOME/.kube/config” >> /etc/profile
      • source /etc/profile
  • 节点 NotReady 或 Pod 无法启动
    • 关闭并持久禁用 swap:
      • swapoff -a
      • sed -i ‘s/.swap./#&/’ /etc/fstab
    • 重新应用 CNI 网络插件(以 Flannel 为例):
      • kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
  • 组件状态与日志排查
    • 查看节点与 Pod:kubectl get nodes;kubectl get pods -A
    • 查看组件日志:
      • journalctl -u kubelet -f
      • journalctl -u kube-proxy -f
      • journalctl -u kube-apiserver -f(静态 Pod 可通过 /var/log/pods 或 journalctl -u kubelet 查看)

五、恢复后的验证与回滚建议

  • 快速健康检查
    • 节点与控制面:kubectl get nodes;kubectl get componentstatuses 或 kubectl get pods -n kube-system
    • 核心系统 Pod:coredns、kube-proxy、etcd、apiserver、controller-manager、scheduler 均为 Running
    • 业务验证:关键 Deployment/StatefulSet 副本数就绪、Service 可访问、持久卷绑定正常。
  • 回滚与应急
    • 若 etcd 恢复异常,立即停止 kube-apiserver,回滚到快照前的 /var/lib/etcd.bak-,再重启服务。
    • 若 Velero 恢复异常,可新建恢复任务并排除问题资源,或回滚到上一个 backup-name

0