Linux环境下Kubernetes的备份与恢复怎么做
导读:Linux环境下Kubernetes备份与恢复实操指南 一、总体策略与适用范围 在 Kubernetes 中,备份与恢复通常分为两类: 集群级备份:以 etcd 快照为核心,用于恢复整个集群的控制面状态(如集群对象、命名空间、RBAC...
Linux环境下Kubernetes备份与恢复实操指南
一、总体策略与适用范围
- 在 Kubernetes 中,备份与恢复通常分为两类:
- 集群级备份:以 etcd 快照为核心,用于恢复整个集群的控制面状态(如集群对象、命名空间、RBAC 等)。etcd 保存了集群的“源真相”,属于全局备份,无法按命名空间单独恢复。
- 应用与数据备份:以 资源清单 YAML 和 持久卷数据为主,用于迁移应用、跨集群恢复或回滚。对 PV/PVC 的数据需使用存储侧快照/复制或应用层工具(如数据库备份)单独处理。
- 常见工具与方法:
- etcdctl 快照:官方方式,适合灾难恢复与集群重建。
- Velero:开源工具,支持备份资源对象与(配合插件)持久卷到对象存储,便于迁移与定时备份。
- k8clone:轻量工具,导出/恢复资源清单,支持在恢复时替换 StorageClass 与 镜像仓库地址,适合跨环境迁移与快速回滚。
二、etcd快照备份与恢复(集群级)
- 备份步骤
- 准备证书与端点:kubeadm 部署的 etcd 证书通常位于 /etc/kubernetes/pki/etcd/,客户端端点常为 https://127.0.0.1:2379(也可从 Pod 清单或描述中获取)。
- 执行快照(v3 API):
export ETCDCTL_API=3 mkdir -p /opt/etcd-backup etcdctl snapshot save /opt/etcd-backup/etcd-$(date +%F-%H%M%S).db \ --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 - 校验快照:
etcdctl --write-out=table snapshot status /opt/etcd-backup/etcd-*.db
- 恢复步骤(kubeadm 单 Master 示例)
- 暂停控制面组件(让 kubelet 回收 Pod):
mkdir -p /tmp/etcd-manifests mv /etc/kubernetes/manifests/{ kube-apiserver.yaml,etcd.yaml} /tmp/etcd-manifests # 等待约 30s,确认静态 Pod 已停止 - 恢复数据到新目录(注意与现有数据目录区分):
etcdctl snapshot restore /opt/etcd-backup/etcd-*.db \ --data-dir=/var/lib/etcd-restored - 调整 etcd Pod 的 hostPath 数据目录(编辑 /etc/kubernetes/manifests/etcd.yaml):
volumes: - hostPath: path: /var/lib/etcd-restored type: DirectoryOrCreate name: etcd-data - 恢复 manifests 并重启控制面:
mv /tmp/etcd-manifests/{ kube-apiserver.yaml,etcd.yaml} /etc/kubernetes/manifests # kubelet 会自动拉起 apiserver/etcd - 验证:
kubectl get componentstatuses # 或 kubectl get pods -n kube-system
- 暂停控制面组件(让 kubelet 回收 Pod):
- 多 Master 与二进制部署要点
- 多 Master 恢复时,每个节点需用各自的 –name、–initial-advertise-peer-urls 与 –initial-cluster 参数从同一快照生成各自的数据目录,再依次恢复并启动服务。
- 二进制部署与 kubeadm 的主要差异在于服务管理方式(systemd vs 静态 Pod)与证书/端点路径,恢复流程一致。
- 重要限制
- 快照为时间点备份,恢复可能丢失快照后的最新写入。
- etcd 快照不包含 PV 数据,需配合存储或应用层方案单独备份。
三、应用与数据备份与恢复(资源与持久卷)
- 资源清单备份(跨命名空间导出)
mkdir -p /opt/app-backup/$(date +%F) kubectl get ns -o yaml > /opt/app-backup/$(date +%F)/namespaces.yaml kubectl get all,configmap,secret,serviceaccount,role,rolebinding,clusterrole,clusterrolebinding,pvc,ingress,storageclass -A -o yaml > \ /opt/app-backup/$(date +%F)/resources.yaml # 注意:Secret 为敏感数据,建议加密存储或纳入凭据管理系统 - 资源清单恢复
kubectl apply -f /opt/app-backup/2025-12-18/resources.yaml - 持久卷数据
- 使用存储插件能力:如 CSI 快照、云盘/NAS 快照、Restic/Borg 等备份工具对节点上的卷数据进行备份与恢复(按存储类型与厂商指引实施)。
- 数据库与应用层:对 MySQL、PostgreSQL、MongoDB、Redis 等执行定期逻辑/物理备份,并在恢复时按序恢复数据后再启动应用。
- 工具化方案
- Velero(推荐):在集群中部署 Velero 服务端,配合对象存储(如 S3/MinIO)定期备份资源与(通过插件)持久卷;支持跨集群迁移与定时策略。
- k8clone(轻量迁移/回滚):将资源导出为压缩包,在恢复时通过 restore.json 替换 StorageClass 与 镜像仓库地址,适合开发与测试环境快速迁移或回滚。
- 备份示例:
./k8clone-linux-amd64 backup -n default -d ./k8clone-dump - 恢复示例(更换存储类与镜像仓库):
cat > restore.json < < EOF { "StorageClass": { "csi-disk": "csi-disk-new" } , "ImageRepo": { "quay.io/coreos": "swr.cn-north-4.myhuaweicloud.com/paas" } } EOF ./k8clone-linux-amd64 restore -d ./k8clone-dump.zip -f ./restore.json - 该工具支持 x86/ARM Linux,操作便捷,适合无状态与有状态应用的元数据迁移。
- 备份示例:
四、自动化与运维实践
- etcd 自动备份(Kubernetes CronJob)
- 将备份 Pod 亲和调度到 etcd 节点,使用 CronJob 定时执行快照,并将快照上传至 SFTP/对象存储;按保留策略自动清理过期备份。
- 示例思路:在 CronJob 容器中执行 etcdctl snapshot save,随后用 lftp/s3cmd 等工具上传,并基于保留数量删除旧文件。
- 备份策略建议
- 明确 RPO/RTO 目标;etcd 快照频率与保留周期取决于业务变更频率与可接受的数据丢失窗口。
- 定期演练恢复流程(含 etcd 与 PV 数据),验证备份可用性与一致性。
- 对 Secret 等敏感清单进行加密与访问控制;对对象存储的备份启用 版本与校验。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux环境下Kubernetes的备份与恢复怎么做
本文地址: https://pptw.com/jishu/775441.html
