资讯动态

Velero(Heptio Ark v0.7.0)备份与恢复机制详解:从自定义资源到对象存储的工作流全解析

发布时间:2026/9/16 23:40:55 来源:尧图企业网站定制
VeleroHeptio Ark v0.7.0备份与恢复机制详解从自定义资源到对象存储的工作流全解析【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文基于仓库site/content/docs/v0.7.0/about.md编写聚焦 Heptio Ark v0.7.0Velero 前身的核心架构与操作机制。对于该文档中提到的钩子Hooks、Config 配置参数、ark backup createCLI 选项等关键要素本文进一步结合仓库中site/content/docs/v0.7.0/hooks.md、site/content/docs/v0.7.0/config-definition.md、site/content/docs/v0.7.0/cli-reference/及当前源码如pkg/apis/velero/v1/、pkg/controller/backup_controller.go等进行佐证和延伸便于读者在了解旧版设计的同时映射到 Velero 的演进脉络。一、Heptio Ark 是什么Heptio Ark是 Velero 的前身其设计目标是为 Kubernetes 提供可定制的、可恢复的备份与迁移能力。它能够对集群中的全部 Kubernetes 对象Pod、Deployment、Job、Custom Resource Definition 等以及持久卷Persistent Volume进行恢复恢复范围可以是集群级别的全量恢复也可以按对象类型、命名空间或标签进行细粒度定制。该工具的典型应用场景包括灾难恢复Disaster Recovery在集群故障、数据丢失时从对象存储中恢复集群状态系统操作前的应用状态快照在执行集群升级Upgrade等操作前先对应用状态做一次快照备份以便操作失败时快速回滚。二、三种核心操作备份、调度备份与恢复Ark 提供三类基础操作按需备份On-demand backups、调度备份Scheduled backups与恢复Restores。2.1 按需备份On-demand backupsbackup操作完成两件事将收集到的 Kubernetes 对象打包成 tarball 上传到云对象存储如 AWS S3、Minio 等若指定了快照则调用云厂商 API 对持久卷做磁盘快照disk snapshot。备份期间可以指定钩子Hooks例如在快照前通知数据库将内存缓冲 flush 到磁盘。关于 Hooks 的详细用法见下文第五节。注意集群备份不是严格原子性的。如果备份过程中 Kubernetes 对象正在被创建或修改这些对象可能不会出现在备份中虽然捕获到不一致信息的概率较低但存在这种可能性。2.2 调度备份Scheduled backupsschedule操作允许按固定间隔周期性地备份数据。第一个备份在 Schedule 创建时立即执行此后按照 Cron 表达式指定的间隔触发。一个 Schedule 本质上是 Backup 的包装器wrapper当调度触发时它在后台创建 Backup 对象。调度备份的命名规则为SCHEDULE-NAME-TIMESTAMP其中TIMESTAMP的格式为YYYYMMDDhhmmss。源码佐证这一命名逻辑在pkg/apis/velero/v1/schedule_types.go中由TimestampedName方法实现其核心代码为// TimestampedName returns the default backup name format based on the schedule func (s *Schedule) TimestampedName(timestamp time.Time) string { return fmt.Sprintf(%s-%s, s.Name, timestamp.Format(20060102150405)) }2.3 恢复Restoresrestore操作允许从先前创建的 Backup 中恢复全部对象与持久卷。Ark 支持多命名空间重映射multiple namespace remapping例如在一次恢复中命名空间abc中的对象可以重建到def下同时123中的对象可以重建到456下。已恢复的 Kubernetes 对象可以通过如下标签识别ark-restoreBACKUP-NAME-TIMESTAMP其中TIMESTAMP同样为YYYYMMDDhhmmss格式。此外还可以以恢复专用模式restore-only mode运行 Ark server该模式会在灾难恢复期间禁用备份、调度和垃圾回收功能只保留恢复能力。三、备份工作流Backup Workflow当执行ark backup create test-backup时Ark 内部发生如下流程Ark 客户端向 Kubernetes API server 发起请求创建一个Backup对象BackupController监测到新的Backup对象执行校验validationBackupController开始备份过程通过查询 API server 收集需要备份的数据BackupController调用对象存储服务如 AWS S3上传备份文件。源码佐证pkg/controller/backup_controller.go中For(velerov1api.Backup{})定义了控制器对Backup类型的主监听关系pkg/apis/velero/v1/backup_types.go中定义了Backup的 TTL 等字段。这正是文档中控制器 watch 自定义资源的现代实现延续。架构图示来自site/content/docs/v0.7.0/img/backup-process.png文档原始引用3.1 关于快照的说明默认情况下ark backup create会对任何持久卷创建磁盘快照。可以通过额外的 CLI 标志调整快照行为例如--snapshot-volumesfalse即可禁用持久卷快照。完整 CLI 选项见 ark backup create 命令参考其中关键参数包括参数含义--include-namespaces stringArray要包含的命名空间使用*表示全部默认*--exclude-namespaces stringArray要从备份中排除的命名空间--include-resources stringArray要包含的资源格式如storageclasses.storage.k8s.io默认*--exclude-resources stringArray要排除的资源--include-cluster-resources optionalBool是否包含集群级资源默认true-l, --selector labelSelector只备份匹配该标签选择器的资源--snapshot-volumes optionalBool是否作为备份的一部分对持久卷做快照默认true--ttl duration备份在多长时间后可以被垃圾回收默认720h0m0s--labels mapStringString应用到备份的标签-o, --output string输出显示格式table、json、yaml四、设置备份过期Set a backup to expire创建备份时可以通过--ttl DURATION标志指定 TTL生存时间。当 Ark 发现某个现有 Backup 资源已过期时会清除该 Backup 资源本身云对象存储中的备份文件所有相关的 PersistentVolume 快照所有关联的 Restore。源码佐证当前源码pkg/apis/velero/v1/backup_types.go中 TTL 字段定义为// TTL is a time.Duration-parseable string describing how long TTL metav1.Duration json:ttl,omitempty这与文档中通过--ttl指定时长的描述一致TTL 是time.Duration可解析的字符串。五、钩子Hooks机制备份过程中可以指定钩子在特定时机于 Pod 容器内执行命令。例如在快照前让数据库 flush 内存缓冲、在快照后解除文件系统冻结等。5.1 钩子执行时机pre 钩子Ark v0.7.0 之前的全部版本仅支持此类型在任何自定义操作custom action处理之前执行post 钩子v0.7.0 新增在所有自定义操作完成、且自定义操作指定的附加条目additional items也完成备份之后执行。典型使用场景——冻结文件系统pre 钩子执行fsfreeze --freeze确保磁盘上待处理的 I/O 全部完成Ark 对磁盘拍摄快照post 钩子执行fsfreeze --unfreeze解除冻结。5.2 通过 Pod 注解指定钩子Ark 支持使用 Pod 上的注解来指定钩子。pre 钩子注解如下注解名说明pre.hook.backup.ark.heptio.com/container执行命令的容器默认第一个容器。可选pre.hook.backup.ark.heptio.com/command要执行的命令。多参数时用 JSON 数组如[/usr/bin/uname, -a]pre.hook.backup.ark.heptio.com/on-error命令返回非零退出码时的处理方式。默认Fail可选Fail/Continuepre.hook.backup.ark.heptio.com/timeout等待命令执行的时间超时视为钩子错误。默认30s。可选post 钩子注解v0.7.0同理仅将前缀替换为post.hook.backup.ark.heptio.com/。兼容性说明Ark v0.7.0 仍支持旧式已弃用的 pre 钩子写法——不加pre.前缀例如hook.backup.ark.heptio.com/container。5.3 在 Backup Spec 中指定钩子在 Backup 对象的 spec 中可以通过hooks.resources数组按资源维度配置钩子详见 Backup API 类型文档其结构如下apiVersion: ark.heptio.com/v1 kind: Backup metadata: name: a namespace: heptio-ark spec: includedNamespaces: - * includedResources: - * ttl: 24h0m0s snapshotVolumes: null hooks: resources: - name: my-hook includedNamespaces: - * includedResources: - pods pre: - exec: container: my-container command: - /bin/uname - -a onError: Fail timeout: 10s post: - exec: container: my-container command: - /bin/uname - -a其中exec钩子的字段含义container执行命令的容器名缺省为 Pod 中第一个容器command要执行的命令数组必填onError错误处理方式Fail或Continue默认Failtimeout命令执行超时时间默认 30 秒。六、对象存储同步Object storage syncArk 将对象存储视为事实来源source of truth。它持续检查以确保正确的 Backup 资源始终存在。如果存储桶中存在格式正确的备份文件但 Kubernetes API 中没有对应的 Backup 资源Ark 会将信息从对象存储同步到 Kubernetes。这使得**集群迁移cluster migration**场景下的恢复功能得以实现当原集群中的 Backup 对象不存在于新集群时Ark 依然可以通过对象存储中的备份文件完成恢复。七、Config 配置备份与云厂商设置Ark 通过自定义资源Config需命名为default位于heptio-ark命名空间指定备份与云厂商设置。Ark server 首次部署时会等待 Config 创建完成。注意若defaultConfig 被修改server 会优雅关闭kubelet 重启 Ark server Pod 后server 使用更新后的配置。7.1 示例 ConfigapiVersion: ark.heptio.com/v1 kind: Config metadata: namespace: heptio-ark name: default persistentVolumeProvider: name: aws config: region: us-west-2 backupStorageProvider: name: aws bucket: ark config: region: us-west-2 backupSyncPeriod: 60m gcSyncPeriod: 60m scheduleSyncPeriod: 1m restoreOnlyMode: false7.2 主要配置参数KeyType默认值含义persistentVolumeProviderCloudProviderConfig无可选集群用于持久卷需快照的云厂商规格。不指定时请求 PV 快照的 Backup/Restore 视为无效。Azure 需要 Kubernetes 1.7.2 以支持托管磁盘 PV 快照persistentVolumeProvider/nameString原生支持aws、gcp、azure其他可通过外部插件无可选集群用于持久卷的云厂商名称persistentVolumeProvider/configmap[string]string无可选传递给云厂商的持久卷配置键值backupStorageProviderCloudProviderConfig必填实际存储备份的云厂商规格backupStorageProvider/nameString必填实际存储备份的云厂商名称backupStorageProvider/bucketString必填备份上传的存储桶backupStorageProvider/configmap[string]string无可选传递给云厂商的备份存储配置backupSyncPeriodmetav1.Duration60m0sArk 查询对象存储以确保为已有备份文件创建了对应 Backup 资源的频率gcSyncPeriodmetav1.Duration60m0sArk 查询对象存储以删除已超过 TTL 的备份文件的频率scheduleSyncPeriodmetav1.Duration1m0sArk 检查 Schedule 资源以确定是否需要发起备份的频率resourcePriorities[]string[namespaces, persistentvolumes, persistentvolumeclaims, secrets, configmaps]描述资源对象恢复顺序的有序列表也支持RESOURCE.GROUP格式。不在列表中的资源在其他优先级资源之后恢复restoreOnlyModeboolfalse开启后备份、调度和过期备份删除功能被关闭仅从对象存储中已有备份文件进行恢复7.3 各云厂商的提供商特定配置AWS或兼容 S3 的存储如 MiniobackupStorageProvider/configKeyType默认值含义regionstring必填如us-east-1s3ForcePathStyleboolfalse使用本地存储服务如 Minio时设为trues3Urlstring非 AWS 托管存储必填如http://minio:9000。Ark 可由region、bucket生成 AWS S3 URL此字段主要用于 Minio 等本地存储kmsKeyIdstring空AWS KMS key id 或别名启用 S3 中备份的加密。仅适用于 AWS S3可能需要显式授予密钥使用权限persistentVolumeProvider/config仅 AWSKeyType默认值含义regionstring必填如us-east-1GCPbackupStorageProvider/config无需任何参数persistentVolumeProvider/configprojectstring必填如project-example-3jsn23。AzurebackupStorageProvider/config无需任何参数persistentVolumeProvider/configlocationstring必填如Canada EastapiTimeoutmetav1.Duration默认2m0s等待 Azure API 请求完成的超时时间。八、从 Ark v0.7.0 到 Velero 的演进映射Ark 后来更名为Velero核心设计思路自定义资源 控制器 对象存储得以延续pkg/apis/velero/v1/backup_types.go定义了 Backup 类型的 TTL、snapshotVolumes等字段pkg/controller/backup_controller.go通过For(velerov1api.Backup{})声明对 Backup 资源的监听执行校验与备份编排pkg/apis/velero/v1/schedule_types.go的TimestampedName保留了Schedule-Name-YYYYMMDDhhmmss的命名格式。当阅读本文时可将文中ark.*命令与 Ark/ Velero 演进后的命令对应理解但请注意 v0.7.0 文档中 API group 为ark.heptio.com/v1后续版本为velero.io/v1。延伸阅读仓库内Ark v0.7.0 文档首页Ark 云厂商配置AWS、Azure、GCPConfig 完整参数定义Hooks 详解Backup API 类型CLI 参考当前 Velero 如何工作【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价