首页主机资讯Linux环境下Kubernetes的备份与恢复怎么做

Linux环境下Kubernetes的备份与恢复怎么做

时间2025-12-18 20:13:04发布访客分类主机资讯浏览682
导读:Linux环境下Kubernetes备份与恢复实操指南 一、总体策略与适用范围 在 Kubernetes 中,备份与恢复通常分为两类: 集群级备份:以 etcd 快照为核心,用于恢复整个集群的控制面状态(如集群对象、命名空间、RBAC...

Linux环境下Kubernetes备份与恢复实操指南

一、总体策略与适用范围

  • 在 Kubernetes 中,备份与恢复通常分为两类:
    • 集群级备份:以 etcd 快照为核心,用于恢复整个集群的控制面状态(如集群对象、命名空间、RBAC 等)。etcd 保存了集群的“源真相”,属于全局备份,无法按命名空间单独恢复。
    • 应用与数据备份:以 资源清单 YAML持久卷数据为主,用于迁移应用、跨集群恢复或回滚。对 PV/PVC 的数据需使用存储侧快照/复制或应用层工具(如数据库备份)单独处理。
  • 常见工具与方法:
    • etcdctl 快照:官方方式,适合灾难恢复与集群重建。
    • Velero:开源工具,支持备份资源对象与(配合插件)持久卷到对象存储,便于迁移与定时备份。
    • k8clone:轻量工具,导出/恢复资源清单,支持在恢复时替换 StorageClass镜像仓库地址,适合跨环境迁移与快速回滚。

二、etcd快照备份与恢复(集群级)

  • 备份步骤
    1. 准备证书与端点:kubeadm 部署的 etcd 证书通常位于 /etc/kubernetes/pki/etcd/,客户端端点常为 https://127.0.0.1:2379(也可从 Pod 清单或描述中获取)。
    2. 执行快照(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
      
    3. 校验快照:
      etcdctl --write-out=table snapshot status /opt/etcd-backup/etcd-*.db
      
  • 恢复步骤(kubeadm 单 Master 示例)
    1. 暂停控制面组件(让 kubelet 回收 Pod):
      mkdir -p /tmp/etcd-manifests
      mv /etc/kubernetes/manifests/{
      kube-apiserver.yaml,etcd.yaml}
       /tmp/etcd-manifests
      # 等待约 30s,确认静态 Pod 已停止
      
    2. 恢复数据到新目录(注意与现有数据目录区分):
      etcdctl snapshot restore /opt/etcd-backup/etcd-*.db \
        --data-dir=/var/lib/etcd-restored
      
    3. 调整 etcd Pod 的 hostPath 数据目录(编辑 /etc/kubernetes/manifests/etcd.yaml):
      volumes:
      - hostPath:
          path: /var/lib/etcd-restored
          type: DirectoryOrCreate
        name: etcd-data
      
    4. 恢复 manifests 并重启控制面:
      mv /tmp/etcd-manifests/{
      kube-apiserver.yaml,etcd.yaml}
           /etc/kubernetes/manifests
      # kubelet 会自动拉起 apiserver/etcd
      
    5. 验证:
      kubectl get componentstatuses  # 或 kubectl get pods -n kube-system
      
  • 多 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
Kubernetes如何在Linux上实现负载均衡 Linux MariaDB如何应对高并发访问

游客 回复需填写必要信息