velero (k8s备份)
简介
Velero (原名 Heptio Ark) 是一个开源工具,专门用于安全地备份、恢复和迁移 Kubernetes 集群资源和持久卷。它提供了一种可靠的方法来保护 Kubernetes 应用程序和数据。
Velero 的核心能力
- 备份和恢复 Kubernetes 集群资源:
- Velero 可以备份和恢复 Kubernetes 集群中的几乎所有对象,包括 Deployment、Service、ConfigMap、Secret、PersistentVolumeClaim (PVC)、Ingress 等等。
- 这些资源定义会以 YAML/JSON 文件的形式存储到对象存储中。
- 备份和恢复持久卷 (Persistent Volumes):
- 这是 Velero 的一个关键能力。它支持两种主要的持久卷备份方式:
- 卷快照 (Volume Snapshots): 对于支持云提供商原生卷快照的存储(如 AWS EBS、GCP Persistent Disk、Azure Managed Disks 等),Velero 可以直接调用云 API 创建和管理卷快照。
- Restic 文件系统备份: 对于不支持原生卷快照的存储,或者当您需要更细粒度的文件级备份时,Velero 可以与 Restic(一个开源文件系统备份工具)集成,直接备份 Pod 内部的文件系统数据到对象存储中。
- 这是 Velero 的一个关键能力。它支持两种主要的持久卷备份方式:
- 集群迁移:
- 通过备份一个集群的资源和数据,然后将其恢复到另一个不同的 Kubernetes 集群(甚至不同云提供商或本地环境),Velero 可以实现集群间的应用迁移。
- 灾难恢复:
- 当集群发生意外故障、数据损坏或配置错误时,Velero 允许您将集群恢复到之前的某个已知良好状态,从而最小化停机时间。
- 按计划执行备份:
- 您可以配置 Velero 定期自动创建备份,确保数据的时效性。
- 灵活的过滤和选择:
- Velero 允许您根据命名空间、标签、资源类型等条件来选择要备份或恢复的具体内容,提供高度的灵活性。
- 备份/恢复前后的钩子 (Hooks):
- 支持在备份或恢复操作的不同阶段执行自定义脚本,例如在备份前暂停应用,或在恢复后执行数据一致性检查。
velero 安装(k8s版本1.20.4)
下载所需镜像
1 | docker pull velero/velero:v1.9.2 |
下载velero cli工具
1 | // 根据k8s版本选择 |
velero 组件安装
1 | velero install \ |
--provider aws
/--plugins velero/velero-plugin-for-aws
: 指定aws
提供商和插件,为了兼容 S3 协议。--bucket velero
: 备份数据将存放在名为velero
的存储桶里。--use-restic
: 启用 Restic,用于备份和恢复 Kubernetes 持久卷(文件系统级别)。--secret-file ./credentials-velero
: 指定一个文件,里面包含连接存储服务(比如 MinIO)所需的认证信息。--use-volume-snapshots=false
: 禁用云服务商的卷快照功能,因为要使用文件级备份(Restic)或者 MinIO 不支持原生快照。--namespace velero
: Velero 组件将安装到velero
这个 Kubernetes 命名空间中。--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.00.1:9000
: 这是关键! 它告诉 Velero 备份的目标是一个运行在http://127.0.0.1:9000
的 MinIO 服务器,并且以 S3 路径样式访问。--wait
: 安装命令会等待所有 Velero 组件都成功启动并运行后才结束,这在自动化脚本中非常有用,可以确保 Velero 已经准备就绪。
卸载
1 | kubectl delete namespace/velero clusterrolebinding/velero |
备份
1 | // 备份(包含所有PVC) |
velero backup create nexus-backup
: 创建一个名为nexus-backup
的备份。--include-namespaces nexus
: 只备份nexus
这个命名空间里的所有 Kubernetes 资源。--default-volumes-to-restic
: 默认使用 Restic 工具来备份nexus
命名空间中所有相关的持久卷数据,这是一种文件级别的备份方式。--wait
: 命令会等到整个备份过程完成(无论是成功还是失败)后才结束。