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)
- 恢复快照
- 清理旧数据目录:
- 从快照恢复:
- 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。