Velero 备份创建命令全解析:从 `ark create backup` 到 `velero backup create`

Velero 备份创建命令全解析:从 `ark create backup` 到 `velero backup create` Velero 备份创建命令全解析从ark create backup到velero backup create【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本篇技术指南以仓库中 site/content/docs/v0.6.0/cli-reference/ark_create_backup.md 为骨架系统讲解 Velerov0.6.0 时代名为 Ark创建备份的 CLI 命令从命令语法、每一个筛选/快照/生命周期参数到命令背后对应的BackupAPI 对象再到现代版本velero backup create在源码 pkg/cmd/cli/backup/create.go 中的完整实现与校验逻辑。读完本文你将能熟练使用该命令按命名空间、资源类型、标签选择器等维度精确控制备份范围正确设置卷快照与 TTL并理解命令参数如何映射为 Kubernetes 中的Backup自定义资源。命令概览与历史沿革命令层级ark create backup在 v0.6.0 版本中创建备份的命令位于create子命令之下。父命令 ark create 用于“创建 Ark 资源”其下包含三个子命令ark create backup— 创建一个备份ark create restore— 创建一个恢复ark create schedule— 创建一个定时备份而ark create backup本身又属于ark backup命令族见 ark_backup_create.md两者参数完全一致最终向上汇聚到 ark 主命令。Synopsis命令语法ark create backup NAME [flags]NAME备份的名称即后续生成的Backup自定义资源Custom Resource的名字。备份产物将以此名称保存见 concepts.md 中 These ad-hoc backups are saved with theBACKUP NAMEspecified during creation 的说明。flags下表所列的全部可选参数。与现代版本的关系随着项目从 Heptio Ark 演进为 VMware Velero该命令在现代版本中演变为velero backup create NAME [flags]。从当前仓库源码 pkg/cmd/cli/backup/create.go 可以看到NewCreateCommand中的命令定义为Use: use NAMEShort描述同样是 Create a backup参数语义一脉相承且新增了大量参数如--from-schedule、--storage-location、--wait等。下文将同时对照两个时期的内容展开。全部参数详解原文档共定义了 12 个专属参数不含继承参数下表完整继承并逐一补充说明参数类型默认值说明--exclude-namespacesstringArray无从备份中排除的命名空间可重复指定多个--exclude-resourcesstringArray无从备份中排除的资源格式为resource.group如storageclasses.storage.k8s.io-h, --help--查看create backup帮助信息--include-cluster-resourcesoptionalBool[true]未设置是否在备份中包含集群级别cluster-scoped资源--include-namespacesstringArray*备份中包含的命名空间*表示所有命名空间--include-resourcesstringArray无备份中包含的资源格式为resource.group*表示所有资源--label-columnsstringArray无以逗号分隔的标签列表用于在输出表格中作为列展示--labelsmapStringString无应用到备份对象上的标签格式为keyvalue-o, --outputstringtable输出显示格式。对 create 命令而言仅展示对象而不发送到服务器可选table、json、yaml-l, --selectorlabelSelectornone仅备份匹配该标签选择器的资源--show-labelsboolfalse在输出表格的最后一列显示标签--snapshot-volumesoptionalBool[true]未设置是否在备份过程中对 PersistentVolume 做快照--ttlduration720h0m0s备份在被垃圾回收前可保留的时间三个关键参数的语义深化--include-cluster-resourcesoptionalBool 三态该参数在 v0.6.0 文档对应的 Backup API 类型定义 中给出了精确的三态语义true包含全部集群级资源受 include/exclude resources 与标签选择器约束false不包含任何集群级资源未设置null仅当所有命名空间都被包含且无排除命名空间时才包含全部集群级资源只要includedNamespaces或excludedNamespaces中指定了任何命名空间则仅备份与所包含的命名空间级资源相关联的集群级资源——例如某个 PersistentVolumeClaim 被包含时其关联的 PersistentVolume集群级也会被备份。--snapshot-volumesoptionalBool 三态根据 backup.md该设置仅对 Azure、GCE、AWS 的 PersistentVolume 生效。未设置时只要为 Ark 配置了持久卷提供商就会执行快照。在现代源码 create.go 中该参数通过f.NoOptDefVal cmd.TRUE实现“裸写--snapshot-volumes等价于--snapshot-volumestrue”的行为与文档中optionalBool[true]的标注完全吻合且只有当o.SnapshotVolumes.Value ! nil时才写入备份对象见 create.go从而保留了“未设置”的第三态。--ttl生存时间默认720h0m0s30 天。TTL 到期后Ark/Velero 的垃圾回收机制会同时删除Backup资源本身与对象存储中的备份文件见 concepts.md 中 Expired backup deletion 一节。在源码中TTL 通过flags.DurationVar(o.TTL, ttl, ...)绑定create.go最终经TTL(o.TTL)写入备份 speccreate.go。从父命令继承的全局参数创建备份时还会继承 CLI 主命令的日志与连接参数完整列表如下参数说明--alsologtostderr除了写入日志文件外同时输出到标准错误--kubeconfig string连接 Kubernetes apiserver 所用的 kubeconfig 路径未设置时依次尝试环境变量KUBECONFIG与集群内配置--log_backtrace_at traceLocation当日志命中file:N时输出堆栈跟踪默认:0--log_dir string日志文件输出目录默认输出到 stderr--logtostderr将日志输出到标准错误而非文件--stderrthreshold severity达到或超过该级别的日志输出到 stderr默认 2即 error-v, --v LevelV 级别日志的日志级别--vmodule moduleSpec按patternN逗号分隔列表按文件过滤日志级别参数如何映射为 Backup API 对象ark create backup的本质是在集群中创建一份Backup自定义资源随后由 Ark/Velero 服务端立即启动备份流程。v0.6.0 文档在 api-types/backup.md 中给出了完整的对象定义CLI 参数与 spec 字段存在一一对应关系CLI 参数Backup spec 字段字段语义摘自 backup.md--include-namespacesspec.includedNamespaces要包含的命名空间数组未指定时包含全部--exclude-namespacesspec.excludedNamespaces要排除的命名空间数组--include-resourcesspec.includedResources要包含的资源数组支持简称如po或全限定名--exclude-resourcesspec.excludedResources要排除的资源数组--include-cluster-resourcesspec.includeClusterResources是否包含集群级资源三态--selectorspec.labelSelector.matchLabels对象必须匹配的标签选择器--snapshot-volumesspec.snapshotVolumes是否对卷做快照三态--ttlspec.ttl垃圾回收前可保留的时间如24h0m0s--labelsmetadata.labels应用到备份对象的标签一个完整的 v0.6.0Backup对象示例含 hooks 定义可以在 site/content/docs/v0.6.0/api-types/backup.md 中查看。值得注意的是对象创建后服务端会维护status字段如phaseNew、FailedValidation、InProgress、Completed、Failed该字段由系统写入用户不应手动设置。实战示例以下示例完整取自现代版本源码 create.go 中的命令Example定义命令名为velero backup create语义与 v0.6.0 的ark create backup一致参数名相同# 创建包含所有资源的备份 velero backup create backup1 # 仅包含 nginx 命名空间 velero backup create nginx-backup --include-namespaces nginx # 排除 velero 与 default 命名空间 velero backup create backup2 --exclude-namespaces velero,default # 基于名为 daily-backup 的调度模板创建备份 velero backup create --from-schedule daily-backup # 预览一份不做卷快照的备份 YAML不发送到服务器 velero backup create backup3 --snapshot-volumesfalse -o yaml # 等待备份完成后命令才返回 velero backup create backup4 --wait结合 v0.6.0 参数进一步组合的实战写法# 仅备份 default 命名空间中带 appweb 标签的 deployment 与 serviceTTL 设为 7 天 ark create backup web-backup \ --include-namespaces default \ --include-resources deployments.apps,services \ --selector appweb \ --ttl 168h0m0s # 全量备份但排除 storageclass并禁止集群级资源 ark create backup app-backup \ --exclude-resources storageclasses.storage.k8s.io \ --include-cluster-resourcesfalse # 使用 json 格式预览将提交的 Backup 对象 ark create backup preview --snapshot-volumesfalse -o json注意-o/--output的“dry-run”语义文档明确说明 For create commands, display the object but do not send it to the server因此在真正提交前可用-o yaml/-o json检查参数组合是否如预期。源码视角参数校验与执行流程现代实现将整个流程拆分为Complete→Validate→Run三个阶段见 create.go这既是命令可用的保证也解释了文档中诸多参数的约束来源。名称与基本合法性校验Args 与 Validate在 create.go 的Args函数中最多只允许 1 个位置参数备份名称若未提供--from-schedule且没有名称报错 a backup name is required, unless you are creating based on a schedule备份名称必须满足 Kubernetes 的DNS1123Subdomain规范否则拒绝创建。Validate阶段create.go还额外校验--selector与--or-selector不能同时使用--from-schedule一旦指定必须为非空值include 与 exclude 的命名空间集合必须合法collections.ValidateNamespaceIncludesExcludes新旧两套资源过滤参数不能混用--include-resources/--exclude-resources/--include-cluster-resources属于旧参数不能与--include-cluster-scoped-resources/--exclude-cluster-scoped-resources/--include-namespace-scoped-resources/--exclude-namespace-scoped-resources这组新参数同时使用见 create.go指定的--storage-location与--volume-snapshot-locations对应的 BackupStorageLocation / VolumeSnapshotLocation 必须真实存在于集群中。备份对象构建BuildBackupBuildBackupcreate.go使用builder.BackupBuilder将全部参数组装为velerov1api.Backup对象命名空间包含/排除、资源包含/排除、标签选择器、TTL、存储位置、快照位置、CSI 快照超时、异步插件操作超时、数据移动器data mover、备份类型等。三态布尔参数SnapshotVolumes、SnapshotMoveData、IncludeClusterResources、DefaultVolumesToFsBackup只有在用户显式设置Value ! nil时才写入对象这正是文档中optionalBool[true]三态语义的代码体现。提交与等待RunRuncreate.go的执行顺序为若指定了-o先按table/json/yaml打印对象并直接返回不访问服务器通过 client 将Backup对象创建到集群o.client.Create并输出Backup request xxx submitted successfully.若指定了--wait/-w则通过 SharedInformer 监听同名 Backup 对象的状态更新直到进入Completed、Failed、FailedValidation或PartiallyFailed终态create.go期间可安全 Ctrl-C备份仍会在后台继续未指定--wait时提示使用velero backup describe name或velero backup logs name查看详情。这也解释了 v0.6.0 文档中为何存在--label-columns、--show-labels、-o这类“输出展示”参数——它们控制的是命令终端输出格式而非备份内容本身。备份命令之外的关联阅读Backup API 类型完整定义v0.6.0含 hooks如 pod exec 钩子的完整 YAML 示例与 status 字段说明Ark/Velero 核心概念备份、调度、恢复三大操作类型TTL 过期删除与对象存储同步机制父命令 ark create 参考create 子命令族结构现代实现源码 pkg/cmd/cli/backup/create.govelero backup create的参数绑定、校验与执行全流程现代命令族入口 pkg/cmd/cli/backup/backup.govelero backup子命令族组织方式小结ark create backup现代版本为velero backup create是 Velero/Ark 最核心的日常操作命令。掌握其参数语义尤其是--include-cluster-resources与--snapshot-volumes两个三态布尔参数的细微差别、--ttl对垃圾回收的影响以及-o的 dry-run 能力是精确控制备份范围、避免意外排除集群级资源、合理规划存储成本的关键。命令的所有参数都会在提交时被转换为Backup自定义资源的 spec 字段并交由服务端异步执行——理解这一映射关系也就理解了 Velero 备份体系的工作模型。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考