Velero(前身 Heptio Ark)命令行参考完全指南:备份、恢复、定时任务与插件管理
【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero
本篇技术指南以 site/content/docs/v0.8.1/cli-reference/README.md 及其所在 CLI 参考目录为核心,系统讲解 Ark 客户端命令行(ark)的全部命令、全局标志、集群凭据解析顺序,以及备份、恢复、定时备份、插件、客户端配置等操作细节。读完本文,你将掌握arkCLI 的完整命令树与关键参数,并了解这些命令在当前 Velero 仓库中的源码级实现对应关系,可直接用于日常备份恢复操作与二次排查。
版本说明:v0.8.1 时代项目仍名为Heptio Ark,命令行工具为
ark,默认命名空间为heptio-ark;当前仓库已更名为Velero,命令行工具为velero(源码入口见 cmd/velero/velero.go)。文中命令以 v0.8.1 文档为准,并给出与当前实现的对应说明。
一、CLI 参考文档的定位与使用方式
Ark 客户端提供了一套 CLI,允许你对 Kubernetes 集群发起临时备份(ad-hoc backups)、定时备份(scheduled backups)和恢复(restores)。仓库中 site/content/docs/v0.8.1/cli-reference/ 目录下的每一个文档文件,对应枚举了每条ark命令及其全部标志(flags)。
同时,这些信息随时可以通过 CLI 自带的--help标志查看,因此本文档既是手册,也是命令行内建帮助的静态化呈现。例如:
ark backup create --help ark restore create --help ark schedule create --help二、获取并运行客户端
官方推荐的方式是下载预编译的 release 二进制,也可以从源码自行构建并运行ark可执行文件。在当前仓库中,CLI 的主入口位于 cmd/velero/velero.go,构建产物即velero命令;而 v0.8.1 文档对应的二进制名为ark。
运行客户端时,绝大多数命令都需要能够访问 Kubernetes API Server,因此正确的集群凭据是执行任何操作的前提。
三、Kubernetes 集群凭据的解析顺序
Ark 会按照以下顺序查找集群凭据(依次尝试,命中即止):
--kubeconfig命令行标志:显式指定的 kubeconfig 文件路径,优先级最高;$KUBECONFIG环境变量:未指定--kubeconfig时,读取该环境变量指向的配置文件;- 集群内凭据(in-cluster credentials):仅当 Ark 运行在 Pod 内部时生效,此时使用 ServiceAccount 自动挂载的凭据访问集群。
这一顺序在当前仓库的源码中有直接印证:pkg/client/client.go 中的Config()函数通过loadingRules.ExplicitPath = kubeconfig实现显式路径优先,并在找不到任何配置时返回错误:error finding Kubernetes API server config in --kubeconfig, $KUBECONFIG, or in-cluster configuration——可见三种来源的解析逻辑至今仍是 CLI 的骨架。
全局标志速查
以下标志继承自根命令ark(见 ark.md),对所有子命令生效:
| 标志 | 说明 |
|---|---|
--kubeconfig string | 连接 Kubernetes apiserver 使用的 kubeconfig 文件路径;未设置时依次尝试$KUBECONFIG环境变量与集群内配置 |
--kubecontext string | 连接 apiserver 使用的 context;未设置时默认使用kubectl config current-context的当前上下文 |
-n, --namespace string | Ark 操作的命名空间(v0.8.1 默认heptio-ark) |
--logtostderr | 日志输出到标准错误而不是文件 |
--alsologtostderr | 同时将日志输出到标准错误和文件 |
--log_dir string | 非空时将日志写入该目录 |
--log_backtrace_at traceLocation | 当日志命中file:N时输出堆栈(默认:0) |
--stderrthreshold severity | 达到或超过该级别的日志输出到 stderr(默认2,即 error) |
-v, --v Level | V 日志的日志级别 |
--vmodule moduleSpec | 按pattern=N逗号分隔的、按文件过滤的日志级别设置 |
-h, --help | 显示帮助 |
需要说明的是,v0.8.1 文档中的默认命名空间是heptio-ark;当前 Velero 实现中命名空间默认值已变为velero,例如 pkg/cmd/cli/completion_functions_test.go 中的测试数据即以velero命名空间构造 Backup 对象。实际使用时以你所安装版本的--help输出为准。
四、命令树总览:从ark根命令出发
ark根命令的简介是"Back up and restore Kubernetes cluster resources."(备份和恢复 Kubernetes 集群资源),完整的子命令树如下(来源:ark.md 的 SEE ALSO 部分):
| 子命令 | 用途 |
|---|---|
ark backup | 与备份相关的操作 |
ark client | Ark 客户端相关命令 |
ark completion | 为指定 shell(bash 或 zsh)输出补全代码 |
ark create | 创建 Ark 资源 |
ark delete | 删除 Ark 资源 |
ark describe | 描述 Ark 资源 |
ark get | 获取 Ark 资源 |
ark plugin | 插件管理 |
ark restore | 与恢复相关的操作 |
ark schedule | 与定时备份相关的操作 |
ark server | 运行 Ark 服务端 |
ark version | 打印 Ark 版本及关联镜像 |
与kubectl类似,Ark 支持两种等价语法:既可以执行ark get backup、ark create schedule,也可以执行ark backup get、ark schedule create。两种写法的效果完全一致,用户可按习惯选用。
五、备份相关命令详解
5.1 创建备份:ark backup create
用法(见 ark_backup_create.md):
ark backup create NAME [flags]| 标志 | 类型与默认值 | 说明 |
|---|---|---|
--include-namespaces | stringArray,默认* | 要纳入备份的命名空间(*表示全部) |
--exclude-namespaces | stringArray | 从备份中排除的命名空间 |
--include-resources | stringArray | 要纳入备份的资源,格式为resource.group,例如storageclasses.storage.k8s.io(*表示全部) |
--exclude-resources | stringArray | 从备份中排除的资源,格式同上 |
--include-cluster-resources | optionalBool,默认=true | 是否在备份中包含集群作用域资源 |
--snapshot-volumes | optionalBool,默认=true | 是否在备份时对 PersistentVolume 做快照 |
--selector/-l | labelSelector,默认<none> | 只备份匹配该标签选择器的资源 |
--labels | mapStringString | 应用到备份对象上的标签 |
--label-columns | stringArray | 以逗号分隔、要显示为列的标签列表 |
--show-labels | bool | 在最后一列显示标签 |
--ttl | duration,默认720h0m0s(30 天) | 备份多久之后可以被垃圾回收 |
--output/-o | string | 输出格式,创建类命令取值为table、json、yaml;指定后只显示对象而不发送到服务端(即 dry-run) |
当前仓库中该命令的实现位于 pkg/cmd/cli/backup/create.go,CreateOptions结构体完整承载了上述参数,例如IncludeNamespaces默认初始化为flag.NewStringArray("*")、SnapshotVolumes使用flag.NewOptionalBool(nil)(即三态布尔),BindFlags逐一把ttl、include-namespaces、include-resources等注册到 pflag。从 同一文件的 Example 可以看到当前 Velero 版本给出的实战示例:
# 备份包含所有资源 velero backup create backup1 # 仅备份 nginx 命名空间 velero backup create nginx-backup --include-namespaces nginx # 排除 velero 和 default 两个命名空间 velero backup create backup2 --exclude-namespaces velero,default # 不拍卷快照,且仅输出 YAML 而不真正创建(dry-run) velero backup create backup3 --snapshot-volumes=false -o yaml # 等待备份完成后再返回 velero backup create backup4 --wait5.2 查看与描述备份
ark backup get(见 ark_backup_get.md)以表格形式列出备份,支持--label-columns、-l/--selector、-o/--output(默认table)和--show-labels。
ark backup describe [NAME1] [NAME2] [NAME...](见 ark_backup_describe.md)可一次描述多个备份,也支持-l/--selector按标签选择。
从当前源码看,velero backup get通过f.Namespace()确定查询命名空间,再以kbClient.Get/List读取api.BackupList(见 pkg/cmd/cli/backup/get.go),标签选择器经labels.Parse解析后交给ListOptions——这解释了--selector为什么必须符合 Kubernetes 标签选择器语法。
5.3 删除备份:ark backup delete
ark backup delete NAME [flags](见 ark_backup_delete.md)删除操作需要显式追加--confirm标志确认,属于破坏性操作的安全护栏。
5.4 下载备份:ark backup download
ark backup download NAME [flags](见 ark_backup_download.md):
| 标志 | 默认值 | 说明 |
|---|---|---|
--force | false | 强制下载,若文件已存在则覆盖 |
-o, --output | <NAME>-data.tar.gz(当前目录) | 输出文件路径 |
--timeout | 1m0s | 等待下载请求处理完成的最大时间 |
下载得到的是该备份的完整数据归档包,可用于离线归档或跨环境迁移。
5.5 查看备份日志:ark backup logs
ark backup logs BACKUP [flags](见 ark_backup_logs.md)支持--timeout(默认1m0s),用于在备份失败或部分失败时定位问题。
六、恢复相关命令详解
6.1 创建恢复:ark restore create
用法(见 ark_restore_create.md):
ark restore create [RESTORE_NAME] --from-backup BACKUP_NAME [flags]文档给出的示例:
# 从 backup-1 恢复,命名为 restore-1 ark restore create restore-1 --from-backup backup-1 # 不指定名称,自动生成默认名 "backup-1-<timestamp>" ark restore create --from-backup backup-1| 标志 | 说明 |
|---|---|
--from-backup string | 恢复所依据的备份名称(必填) |
--include-namespaces/--exclude-namespaces | 恢复中包含/排除的命名空间(默认*) |
--include-resources/--exclude-resources | 恢复中包含/排除的资源,格式resource.group |
--include-cluster-resources | optionalBool,默认=true,是否恢复集群作用域资源 |
--namespace-mappings mapStringString | 命名空间映射,格式src1:dst1,src2:dst2,...,把备份中的命名空间名映射为目标恢复名,常用于跨命名空间迁移 |
--restore-volumes | optionalBool,默认=true,是否从快照恢复卷 |
--selector/-l | 只恢复匹配该标签选择器的资源(默认<none>) |
--labels/--label-columns/--show-labels | 恢复对象的标签设置与展示 |
-o, --output | 输出格式(table/json/yaml),指定后仅显示对象不发送到服务端 |
当前仓库的 pkg/cmd/cli/restore/create.go 在此基础上还支持--from-schedule(从某定时备份的最近一次成功备份恢复)以及按资源类型细粒度过滤,例如:
# 只恢复备份中的 persistentvolumeclaims 和 persistentvolumes velero restore create --from-backup backup-2 --include-resources persistentvolumeclaims,persistentvolumes6.2 查看、描述、删除、日志
ark restore get(见 ark_restore_get.md):列出恢复任务,支持--label-columns、-l/--selector、-o/--output、--show-labels;ark restore describe [NAME1] [NAME2] ...(见 ark_restore_describe.md):描述恢复任务的详细状态,支持标签选择;ark restore delete NAME(见 ark_restore_delete.md):删除恢复对象;ark restore logs RESTORE(见 ark_restore_logs.md):获取恢复过程日志,支持--timeout(默认1m0s)。
七、定时备份命令详解
7.1 创建定时备份:ark schedule create
用法(见 ark_schedule_create.md):
ark schedule create NAME --schedule [flags]--schedule标志必填,采用标准的五段式 cron 表示法:
| 字符位置 | 时间字段 | 可接受取值 |
|---|---|---|
| 1 | 分钟(Minute) | 0-59,* |
| 2 | 小时(Hour) | 0-23,* |
| 3 | 月内日期(Day of Month) | 1-31,* |
| 4 | 月份(Month) | 1-12,* |
| 5 | 周内日期(Day of Week) | 0-7,* |
文档示例(每 6 小时执行一次):
ark create schedule NAME --schedule="0 */6 * * *"除了--schedule,其余标志与ark backup create基本一致(--include-namespaces、--exclude-resources、--snapshot-volumes、--ttl、--selector、--labels等),因为定时备份本质上就是"按 cron 反复触发相同的备份定义"。
7.2 查看、描述、删除定时备份
ark schedule get(见 ark_schedule_get.md):列出定时备份;ark schedule describe [NAME1] [NAME2] ...(见 ark_schedule_describe.md):查看定时备份详情;ark schedule delete NAME(见 ark_schedule_delete.md):删除定时备份(注意:删除 schedule 不会删除其已经产生的历史备份,历史备份按各自--ttl到期后被垃圾回收)。
八、通用资源操作命令
ark create、ark get、ark delete、ark describe是面向"备份、恢复、定时备份"三类资源的统一入口,例如:
ark get backups(ark_get_backups.md)与ark backup get等价;ark get restores(ark_get_restores.md)、ark get schedules(ark_get_schedules.md)同理;ark create backup(ark_create_backup.md)、ark create restore、ark create schedule(ark_create_schedule.md);ark describe backups(ark_describe_backups.md)、ark describe restores(ark_describe_restores.md)、ark describe schedules;ark delete backup、ark delete restore、ark delete schedule。
当前仓库中,"按名称 / 按--all/ 按--selector"三种选取方式被抽象为统一的SelectOptions校验逻辑(见 pkg/cmd/cli/select_option.go):Validate()要求三者必须且只能指定其一,否则报错you must specify exactly one of: specific <type> name(s), the --all flag, or the --selector flag。这保证了资源选择语义的确定性。
九、插件管理命令
插件机制用于扩展 Ark/Velero 的备份存储与卷快照能力(详见 plugins.md)。
9.1 添加插件:ark plugin add
ark plugin add IMAGE [flags](见 ark_plugin_add.md)以容器镜像的方式注册插件,支持:
| 标志 | 默认值 | 说明 |
|---|---|---|
--image-pull-policy | IfNotPresent | 插件容器的镜像拉取策略,合法值Always、IfNotPresent、Never |
9.2 移除插件:ark plugin remove
ark plugin remove [NAME | IMAGE] [flags](见 ark_plugin_remove.md)通过插件名称或镜像名将其从部署中移除。
十、客户端配置文件:ark client config
ark client config用于读取和设置客户端配置文件的值(见 ark_client_config.md):
ark client config get [KEY 1] [KEY 2] [...] [flags] ark client config set KEY=VALUE [KEY=VALUE]... [flags]这组命令把高频参数持久化到本地配置文件,避免每条命令都重复输入。
在当前 Velero 仓库中,客户端配置文件位于$HOME/.config/velero/config.json(v0.8.1 时代为 Ark 对应的配置文件),实现见 pkg/client/config.go。从源码可确认其支持的配置键包括:
| 键 | 含义 |
|---|---|
namespace | 操作命令默认使用的命名空间 |
namespace-mode | 设为auto时,每次调用都从当前 kubeconfig context 动态解析命名空间,而非使用静态值 |
features | 启用的特性开关(逗号分隔) |
cacert | 自定义 CA 证书文件路径 |
colorized | 是否启用彩色输出(默认 true) |
LoadConfig在配置文件不存在时返回空 map 而非报错,SaveConfig会自动创建目录并以0600权限写回,兼顾了无配置可用的容错性与敏感信息保护。
十一、Shell 自动补全:ark completion
(见 ark_completion.md)支持 bash 与 zsh,将补全代码输出到 STDOUT:
# 为当前 bash 会话加载补全 source <(ark completion bash) # 为当前 zsh 会话加载补全 source <(ark completion zsh)十二、服务端与版本命令
12.1ark server
ark server [flags](见 ark_server.md)在集群内运行 Ark 服务端,负责执行备份、恢复、定时备份与垃圾回收等控制器逻辑:
| 标志 | 默认值 | 说明 |
|---|---|---|
--log-level | info | 日志级别,合法值为debug、info、warning、error、fatal、panic |
--plugin-dir | /plugins | 存放 Ark 插件的目录 |
12.2ark version
ark version [flags](见 ark_version.md)打印 Ark 客户端版本及与之关联的镜像版本,用于快速核对客户端与服务端是否匹配。
十三、深入当前仓库的对应实现
如果想从文档走向源码,建议按以下路径继续阅读:
- CLI 根命令与构建入口:cmd/velero/velero.go,以及
pkg/cmd/cli下各子命令包; - 备份创建实现:pkg/cmd/cli/backup/create.go,
CreateOptions与BindFlags完整对应--include-namespaces、--ttl、--snapshot-volumes等全部参数; - 恢复创建实现:pkg/cmd/cli/restore/create.go,含
--from-backup、--namespace-mappings、--restore-volumes的绑定; - 凭据解析与命名空间解析:pkg/client/client.go(
--kubeconfig→$KUBECONFIG→ in-cluster 的三级回退)、pkg/client/config.go(客户端配置文件与namespace-mode: auto); - 资源选择校验:pkg/cmd/cli/select_option.go;
- 服务端命令:
pkg/cmd/server目录(对应ark server/velero server)。
结语
ark/veleroCLI 的设计与kubectl一脉相承:顶层命令 + 资源子命令 + 丰富的过滤与输出标志,同时提供ark get backup与ark backup get两种等价写法以照顾不同习惯。掌握凭据解析顺序、全局标志,以及备份/恢复/定时备份三条主线命令的参数语义,即可覆盖 Kubernetes 应用与持久化卷备份恢复的绝大多数日常操作。遇到任何不确定的标志或取值,ark <command> --help(或当前版本的velero <command> --help)始终是最权威的即时参考。
【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考