温馨提示×

centos k8s安装后如何备份

小樊
44
2025-12-05 22:06:25
栏目: 智能运维

CentOS 上 Kubernetes 备份与恢复实操指南

一、备份策略与范围

  • 备份对象应覆盖四类关键资产:
    1. etcd 数据(集群状态与元数据);2) 控制面配置(/etc/kubernetes 与 kubeconfig);3) 应用与持久卷数据(数据库、对象存储等);4) 集群资源清单(通过 kubectl 导出)。
  • 建议明确备份频率(如每日/每周)、保留周期(如7/30 天)、异地/多副本存储与定期恢复演练,确保可用性与一致性。

二、etcd 快照备份与恢复(控制面核心)

  • 前置准备
    • 使用 ETCDCTL_API=3;在 kubeadm 部署中,证书通常位于 /etc/kubernetes/pki/etcd/,etcd 数据目录为 /var/lib/etcd
    • 获取 endpoints:可从 etcd Pod 的启动参数中查看,常见为 https://127.0.0.1:2379(本地)与节点 IP 的 2379 端口。
  • 备份命令(任选其一)
    • 本地回环地址:
      ETCDCTL_API=3 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
      snapshot save /backup/etcd-$(date +%F-%H%M).db
    • 指定节点地址(如有多 master,任选其一执行):
      ETCDCTL_API=3 etcdctl --endpoints=“https://<MASTER_IP>:2379”
      –cacert=/etc/kubernetes/pki/etcd/ca.crt
      –cert=/etc/kubernetes/pki/etcd/server.crt
      –key=/etc/kubernetes/pki/etcd/server.key
      snapshot save /backup/etcd-$(date +%F-%H%M).db
    • 备份后建议校验:
      ETCDCTL_API=3 etcdctl --write-out=table snapshot status /backup/etcd-*.db
  • 恢复要点(高风险,务必在维护窗口操作)
    • 单 master(kubeadm):
      1. 暂停控制面:mv /etc/kubernetes/manifests /etc/kubernetes/manifests.bak
      2. 清理旧数据:rm -rf /var/lib/etcd/*
      3. 恢复快照:
        ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-*.db
        –data-dir=/var/lib/etcd
      4. 恢复 manifests:mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
      5. 等待 kubelet 拉起 etcd/apiserver,验证:kubectl get pods -n kube-system
    • 多 master(每个 master 节点分别恢复为自身身份):
      1. 各 master 先暂停控制面(同上)并清理 /var/lib/etcd
      2. 在每个 master 上用本机参数恢复(示例为 master1):
        ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-*.db
        –name master1
        –initial-advertise-peer-urls https://<MASTER1_IP>:2380
        –initial-cluster master1=https://<MASTER1_IP>:2380,master2=https://<MASTER2_IP>:2380,master3=https://<MASTER3_IP>:2380
        –initial-cluster-token etcd-cluster-0
        –data-dir=/var/lib/etcd
      3. 各节点恢复 manifests 后启动,检查集群状态与成员列表一致性。

三、控制面与静态资源备份

  • 备份 /etc/kubernetes 与 kubeconfig(建议在备份 etcd 的同时进行):
    • cp -a /etc/kubernetes /backup/etc-kubernetes-$(date +%F)
    • cp ~/.kube/config /backup/kubeconfig-$(date +%F)
  • 备份关键目录(可选,用于文件级回滚):
    • rsync -a /var/lib/kubelet /backup/var-lib-kubelet-$(date +%F)
  • 导出集群资源清单(便于审计与迁移):
    • kubectl get ns -o yaml > /backup/ns-$(date +%F).yaml
    • kubectl get all,ingress,configmap,secret,pvc,pv,storageclass,crd -A -o yaml > /backup/resources-$(date +%F).yaml
  • 如需备份节点级重要目录,可用 tar/rsync 做定时归档与异地同步。

四、应用与持久卷数据备份

  • 有状态应用(数据库、消息队列等)优先采用应用级备份(如 mysqldump、pg_dump、mongodump、应用快照),并与存储快照/备份工具联动。
  • 示例(MySQL 每日备份):
    mysqldump -h localhost -u root -p’PASSWORD’ --single-transaction --routines --triggers DATABASE
    | gzip > /backup/mysql-DATABASE-$(date +%F).sql.gz
  • 对象存储/文件数据:使用厂商工具或 s3cmd/rclone 做定期同步异地多活
  • 无状态应用:以资源清单与镜像仓库记录为主,配合声明式部署即可快速重建。

五、Velero 进行集群级备份与恢复(含 PV 快照)

  • 适用场景:跨命名空间/跨集群迁移、定时/增量备份、与云厂商快照集成。
  • 基本步骤:
    1. 准备对象存储(如 MinIO/S3)与凭证;
    2. 安装 Velero 客户端与服务端(建议使用 Helm);
    3. 创建备份存储位置(Bucket/Region/AccessKey/Secret);
    4. 执行备份:
      • 全量:velero backup create backup-$(date +%F) --wait
      • 指定命名空间:velero backup create nginx-backup --include-namespaces nginx-example --wait
    5. 恢复:velero restore create --from-backup backup-$(date +%F)
    6. 如需 PV 快照,启用对应云提供商插件并在备份时开启 VolumeSnapshot 支持。
  • 提示:Velero 主要覆盖“Kubernetes 资源层与云盘快照”,不替代 etcd 快照;关键场景建议同时保留 etcd 快照。

0