
Velero 备份下载全指南velero backup download命令的用法与实现原理【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero备份完成后把备份产物从对象存储拉回本地进行审计、排障或迁移是 Velero 日常运维中最高频的操作之一。本指南围绕 Velero 的velero backup download命令完整讲解其参数含义、下载产物内容、底层执行链路与常见问题排查方法帮助你准确理解并熟练使用这条命令。命令速览velero backup download用于把指定备份的 Kubernetes 资源清单manifests从备份存储位置BackupStorageLocationBSL下载到本地文件。命令的基本形态为velero backup download NAME [flags]其中NAME为待下载的备份名称必填。下载产物默认是一个以NAME-data.tar.gz命名的压缩归档文件保存到当前目录。需要特别说明的是该命令只下载备份中的 Kubernetes 资源清单所有 YAML 清单不包含持久卷快照的内容。若想单独查看备份日志或快照信息可配合velero backup logs、velero backup describe等命令使用。参数详解本命令专属参数参数简写默认值说明--force无false强制下载若输出文件已存在则直接覆盖--output string-oNAME-data.tar.gz当前目录输出文件路径--timeout duration无1m0s等待下载请求处理完成的最大时长从源码看这三个参数的解析逻辑位于 pkg/cmd/cli/backup/download.go其中--timeout的类型是 Go 的time.Duration支持1m、90s等人类可读写法默认值由NewDownloadOptions()中Timeout: time.Minute决定见 download.go输出文件默认命名为备份名-data.tar.gz由Complete阶段基于当前工作目录拼接生成见 download.go--force决定文件打开方式默认使用O_RDWR|O_CREATE|O_EXCL目标存在即报错加上--force后改为O_RDWR|O_CREATE|O_TRUNC直接截断覆盖见 download.go。继承自父命令的参数download是velero backup的子命令因此还继承以下父级参数参数说明--kubeconfig string用于连接 Kubernetes apiserver 的 kubeconfig 路径未设置时依次尝试环境变量KUBECONFIG与集群内配置-n, --namespace stringVelero 所在命名空间默认velero--logtostderr日志输出到标准错误而非文件--alsologtostderr日志同时输出到标准错误和文件--log_dir string非空时指定日志文件目录--log_backtrace_at traceLocation当日志命中file:N时打印堆栈默认:0--stderrthreshold severity达到该级别及以上的日志输出到 stderr默认 2-v, --v LevelV 日志级别--vmodule moduleSpec以逗号分隔的patternN列表用于按文件过滤 V 日志说明本文档所参考的 site/content/docs/v0.7.0/cli-reference/ark_backup_download.md 是 Velero 早期以ark命令名为载体的版本默认命名空间为heptio-ark。当前仓库中ark已被velero取代上述命名空间与命令名以现行版本为准。典型使用示例基本用法——将备份daily-backup的清单下载到当前目录velero backup download daily-backup # 输出Backup daily-backup has been successfully downloaded to ./daily-backup-data.tar.gz指定输出路径velero backup download daily-backup -o /tmp/daily-backup.tar.gz覆盖已有文件若/tmp/daily-backup.tar.gz已存在需配合--force才会覆盖velero backup download daily-backup -o /tmp/daily-backup.tar.gz --force调整等待时长下载请求需要等服务端控制器签发预签名 URL若存储位置响应较慢可加大超时velero backup download daily-backup --timeout 3m成功下载后可用tar -tzf查看归档内容或用tar -xzf解压后按需检查清单文件。底层执行链路一条命令背后的控制器协作backup download并非直接从对象存储拉文件而是走创建 DownloadRequest 自定义资源 → 控制器签发预签名 URL → 客户端用 URL 下载的三步链路参数校验与备份存在性检查命令先通过 client-go 从集群中读取名为NAME的 Backup 对象不存在则直接报错见 download.go。创建 DownloadRequest客户端为本次下载生成一个 UUID构造名为NAME-UUID的DownloadRequest资源并写入 Velero 命名空间其spec.target为{kind: BackupContents, name: NAME}见 pkg/cmd/util/downloadrequest/downloadrequest.go。轮询等待签名 URL客户端每 25ms 读取一次该DownloadRequest的状态直到status.downloadURL非空或status.phase变为Failed若超时则返回download request download url timeout错误见 downloadrequest.go。服务端签名download_request_controller在 pkg/controller/download_request_controller.go 中处理请求先校验备份是否已产出工件处于New、Queued、ReadyToStart、FailedValidation等前置阶段的备份直接置为Failed并写入原因再根据备份的spec.storageLocation找到对应 BSL通过对象存储插件生成预签名 URL 写入status.downloadURL阶段置为Processed。客户端下载拿到 URL 后用 HTTP GET 拉取内容并写入目标文件非BackupContents类型的目标如日志会先经 gzip 解压再写入且解压上限为 1GB防止解压炸弹见 downloadrequest.go。预签名 URL 的签发路径定义在 pkg/persistence/object_store.go不同DownloadTargetKind对应对象存储中不同的 keybackupContents、backupLog、backupVolumeSnapshots等URL 有效期由DownloadURLTTL控制固定为 10 分钟见 object_store.go因此拿到 URL 后应尽快使用不应缓存。DownloadRequest的完整类型定义含spec.target.kind、status.phase、status.downloadURL、status.expiration、status.message等字段位于 pkg/apis/velero/v1/download_request_types.go其 CRD 清单可在 config/crd/v1 下找到。命令行为细节与 FAQ为什么--timeout超时会报storage location 不可用类错误当DownloadRequest一直未进入Processed或Failed阶段时客户端会在--timeout指定的时长后返回download request download url timeout提示检查 Velero server 日志常见原因是 BSL 不可达或凭据异常。反之若控制器已判定失败如备份处于尚未产物的阶段会直接返回Failed阶段的status.message避免无谓等待。下载失败会留下半成品文件吗不会。Run阶段在写入过程中若发生错误会主动删除已创建的输出文件后再报错见 download.go避免留下损坏的归档误导后续操作。备份日志可以这样下载吗velero backup logs NAME走的是同一条 DownloadRequest 链路只是DownloadTargetKind不同BackupLog。两者在下载端的差异在于日志类目标在写入前会经过 gzip 解压处理而BackupContents归档不经过该处理见 downloadrequest.go。测试如何验证这条命令仓库在 pkg/cmd/cli/backup/download_test.go 中提供了TestNewDownloadCommand测试它构造一个名为bk-to-be-download的 Backup 对象并执行命令验证参数绑定--output、--force、--timeout、--insecure-skip-tls-verify、--cacert与命令执行行为可作为理解命令用法的参考。涉及 TLS 的额外参数当前版本还支持--insecure-skip-tls-verify跳过对象存储 TLS 证书校验不推荐生产使用与--cacert指定 CA 证书 bundle未指定时自动使用 BSL 中的 CA 证书下载失败场景下还有兜底逻辑。这两个参数在早期ark版本文档中未出现属于后续演进新增详细绑定见 download.go。相关资源早期命令参考文档site/content/docs/v0.7.0/cli-reference/ark_backup_download.md命令实现pkg/cmd/cli/backup/download.go下载请求工具库pkg/cmd/util/downloadrequest/downloadrequest.go服务端控制器pkg/controller/download_request_controller.go类型定义pkg/apis/velero/v1/download_request_types.go命令测试pkg/cmd/cli/backup/download_test.go【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考