Debian上Kubernetes数据恢复指南
在Debian系统上恢复Kubernetes数据,核心围绕**etcd(集群状态存储)和Velero(集群资源备份)**展开。以下是具体步骤及注意事项:
etcd存储了Kubernetes的所有配置(如Pod、Deployment、ConfigMap)和状态信息,是恢复的关键。
sudo systemctl stop kube-apiserver etcd
sudo mv /var/lib/etcd /var/lib/etcd_old_backup
snapshot.db)重建etcd数据目录,需指定集群配置(节点名称、初始集群信息等,需与备份时一致):ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \
--name=etcd-master-01 \ # 集群中etcd节点的名称(查看etcd.yaml中的--name参数)
--data-dir=/var/lib/etcd \ # 恢复后的数据目录
--initial-cluster=etcd-master-01=https://192.168.1.10:2380 \ # 集群节点列表(单节点仅需自身)
--initial-cluster-token=etcd-cluster-token \ # 集群唯一令牌(查看etcd.yaml中的--initial-cluster-token)
--initial-advertise-peer-urls=https://192.168.1.10:2380 # 节点对等通信地址(查看etcd.yaml中的--initial-advertise-peer-urls)
sudo chown -R etcd:etcd /var/lib/etcd
sudo systemctl start etcd kube-apiserver
etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
endpoint health # 检查etcd健康状态
kubectl get pods --all-namespaces # 检查Kubernetes资源
若为多节点etcd集群,需在所有节点执行上述恢复步骤,并确保--initial-cluster参数包含所有节点的信息(如etcd-node1=https://10.0.0.1:2380,etcd-node2=https://10.0.0.2:2380),以重建完整的集群拓扑。
Velero可备份Kubernetes资源(如Deployments、Services、PersistentVolumeClaims),恢复时无需重启核心组件。
若已使用Velero创建了集群备份(如my-backup),可直接通过以下命令恢复所有资源:
velero restore create --from-backup my-backup
若只需恢复部分资源(如某个Namespace的Deployments),可通过--include-namespaces或--include-resources参数指定:
velero restore create --from-backup my-backup \
--include-namespaces=my-namespace \ # 仅恢复指定Namespace
--include-resources=deployments,configmaps # 仅恢复指定资源类型
恢复完成后,检查资源是否正常运行:
kubectl get deployments -n my-namespace # 检查Deployments
kubectl get pods -n my-namespace # 检查Pods状态
若仅需恢复单个资源(如误删除的ConfigMap),可通过etcd快照提取并解码资源,再用kubectl应用:
etcd中资源的键遵循固定路径(如ConfigMap存储在/registry/configmaps/<namespace>/<name>):
etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
get --prefix "/registry/configmaps/production" --keys-only # 列出指定Namespace下的ConfigMap键
使用auger工具将etcd中的二进制数据解码为YAML文件:
etcdctl --endpoints=https://127.0.0.1:2379 \
get /registry/configmaps/production/app-config --print-value-only | auger decode > app-config.yaml
将解码后的YAML文件应用到集群:
kubectl apply -f app-config.yaml --dry-run=server # 干运行测试
kubectl apply -f app-config.yaml # 正式应用
journalctl -u etcd、velero restore logs <restore-name>)监控恢复进度,及时排查问题。