Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

velero (k8s备份)

简介

Velero (原名 Heptio Ark) 是一个开源工具,专门用于安全地备份、恢复和迁移 Kubernetes 集群资源和持久卷。它提供了一种可靠的方法来保护 Kubernetes 应用程序和数据。

Velero 的核心能力

  1. 备份和恢复 Kubernetes 集群资源:
    • Velero 可以备份和恢复 Kubernetes 集群中的几乎所有对象,包括 Deployment、Service、ConfigMap、Secret、PersistentVolumeClaim (PVC)、Ingress 等等。
    • 这些资源定义会以 YAML/JSON 文件的形式存储到对象存储中。
  2. 备份和恢复持久卷 (Persistent Volumes):
    • 这是 Velero 的一个关键能力。它支持两种主要的持久卷备份方式:
      • 卷快照 (Volume Snapshots): 对于支持云提供商原生卷快照的存储(如 AWS EBS、GCP Persistent Disk、Azure Managed Disks 等),Velero 可以直接调用云 API 创建和管理卷快照。
      • Restic 文件系统备份: 对于不支持原生卷快照的存储,或者当您需要更细粒度的文件级备份时,Velero 可以与 Restic(一个开源文件系统备份工具)集成,直接备份 Pod 内部的文件系统数据到对象存储中。
  3. 集群迁移:
    • 通过备份一个集群的资源和数据,然后将其恢复到另一个不同的 Kubernetes 集群(甚至不同云提供商或本地环境),Velero 可以实现集群间的应用迁移。
  4. 灾难恢复:
    • 当集群发生意外故障、数据损坏或配置错误时,Velero 允许您将集群恢复到之前的某个已知良好状态,从而最小化停机时间。
  5. 按计划执行备份:
    • 您可以配置 Velero 定期自动创建备份,确保数据的时效性。
  6. 灵活的过滤和选择:
    • Velero 允许您根据命名空间、标签、资源类型等条件来选择要备份或恢复的具体内容,提供高度的灵活性。
  7. 备份/恢复前后的钩子 (Hooks):
    • 支持在备份或恢复操作的不同阶段执行自定义脚本,例如在备份前暂停应用,或在恢复后执行数据一致性检查。

velero 安装(k8s版本1.20.4)

下载所需镜像

1
2
3
4
docker pull velero/velero:v1.9.2
docker pull velero-plugin-for-aws:v1.5.5
// 按需安装restic恢复备份时需要
docker pull velero/velero-restic-restore-helper:v1.9.2

下载velero cli工具

1
2
3
4
5
// 根据k8s版本选择
https://github.com/vmware-tanzu/velero/releases
// v1.9.2
cp velero /usr/local/bin
chmod +x /usr/local/bin

velero 组件安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
velero install \
--provider aws \
--image velero/velero:v1.9.2 \
--plugins velero/velero-plugin-for-aws:v1.5.5 \
--bucket velero \
--use-restic \
--secret-file ./credentials-velero \
--use-volume-snapshots=false \
--namespace velero \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.0.0.1:9000 \
--wait

// 该选项可以打印安装的配置信息
--dry-run -o yaml > velero.yaml
  1. --provider aws / --plugins velero/velero-plugin-for-aws: 指定 aws 提供商和插件,为了兼容 S3 协议
  2. --bucket velero: 备份数据将存放在名为 velero 的存储桶里。
  3. --use-restic: 启用 Restic,用于备份和恢复 Kubernetes 持久卷(文件系统级别)。
  4. --secret-file ./credentials-velero: 指定一个文件,里面包含连接存储服务(比如 MinIO)所需的认证信息。
  5. --use-volume-snapshots=false: 禁用云服务商的卷快照功能,因为要使用文件级备份(Restic)或者 MinIO 不支持原生快照。
  6. --namespace velero: Velero 组件将安装到 velero 这个 Kubernetes 命名空间中。
  7. --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.00.1:9000: 这是关键! 它告诉 Velero 备份的目标是一个运行在 http://127.0.0.1:9000MinIO 服务器,并且以 S3 路径样式访问。
  8. --wait: 安装命令会等待所有 Velero 组件都成功启动并运行后才结束,这在自动化脚本中非常有用,可以确保 Velero 已经准备就绪。

卸载

1
2
kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero

备份

1
2
3
4
5
6
7
8
9
10
// 备份(包含所有PVC)
velero backup create nexus-backup --include-namespaces nexus --default-volumes-to-restic --wait
velero backup create monitoring-backup --include-namespaces monitoring --default-volumes-to-restic --wait
// 获取备份
velero backup get
// 恢复备份
velero restore create --from-backup nexus-backup
velero restore create --from-backup nexus-backup --namespace-mappings nexus:nexus-restore
// 重新绑定PVC
kubectl patch pv nfs-nexus-pv -p '{"spec":{"claimRef": null}}'
  1. velero backup create nexus-backup: 创建一个名为 nexus-backup 的备份。
  2. --include-namespaces nexus: 只备份 nexus 这个命名空间里的所有 Kubernetes 资源。
  3. --default-volumes-to-restic: 默认使用 Restic 工具来备份 nexus 命名空间中所有相关的持久卷数据,这是一种文件级别的备份方式。
  4. --wait: 命令会等到整个备份过程完成(无论是成功还是失败)后才结束。

评论