Velero 旧版 CLI 参考:`ark get` 命令详解与源码实现剖析 Velero 旧版 CLI 参考ark get命令详解与源码实现剖析【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/veleroark get是 Velero前身 Heptio ArkCLI 中用于获取集群备份/恢复资源的核心查询命令它采用与kubectl相似的操作模型让用户可以像查看 Kubernetes 资源一样查看 Ark 的backups、restores、schedules等自定义资源。本文以 ark_get.md 文档为主体结合当前仓库中该命令的实际源码实现完整讲解命令语法、全部全局选项与子命令选项、输出格式机制以及命令背后的源码调用链帮助读者彻底掌握这一命令族的用法与原理。背景说明v0.8.0 时代的 CLI 二进制名称为ark其默认命名空间为heptio-ark项目随后更名为 Velero命令相应变为velero默认命名空间也演进为velero见 pkg/apis/velero/v1/constants.go。本文以 v0.8.0 文档中的ark命令为准描述历史行为并在涉及当前仓库源码时以velero为准说明其演进。命令概述Synopsisark get的 Synopsis 只有一句简单描述Get ark resources——即获取 Ark 管理的资源。所谓 Ark 资源本质上就是 Velero 项目定义的一组 Kubernetes 自定义资源CRD包括backups备份对象记录一次备份请求及其执行状态restores恢复对象记录一次恢复请求及其执行状态schedules定时调度对象按 Cron 表达式周期性触发备份以及在当前仓库的 get 命令源码 中backup-locations备份存储位置、snapshot-locations快照存储位置、plugins已注册插件。ark get自身是一个聚合命令本身没有具体的查询逻辑它的职责是把上述各类资源的获取子命令挂载到同一命令树下。从 pkg/cmd/cli/get/get.go 的NewCommand实现可以看到这一点get命令用 cobra 框架创建然后通过c.AddCommand(...)注册了backups、schedules、restores、backup-locations、snapshot-locations、plugins六个子命令并全部提供了单数形式的别名如backup、schedule方便用户按ark get backup的方式书写。语法格式ark get本身不带资源参数实际查询需指定子命令。完整语法为ark get backups [flags] ark get restores [flags] ark get schedules [flags] ark get backup-locations [flags] ark get snapshot-locations [flags] ark get plugins [flags]与kubectl的交互习惯一致v0.8.0 文档明确说明 Ark 支持两种等价书写形式见 ark.mdark get backup形式资源类型位于get之后ark backup get形式命令动词位于资源类型之后backup子命令树下的get。这两种形式底层都解析到同一组实现函数用户可按习惯选用。全局选项Options inherited from parent commandsark get自身只有一个-h, --help选项用于查看帮助其余选项全部继承自父命令ark根命令。这些全局选项在 v0.8.0 文档中给出了完整清单现逐一说明其作用--alsologtostderr log to standard error as well as files --kubeconfig string Path to the kubeconfig file to use to talk to the Kubernetes apiserver. If unset, try the environment variable KUBECONFIG, as well as in-cluster configuration --kubecontext string The context to use to talk to the Kubernetes apiserver. If unset defaults to whatever your current-context is (kubectl config current-context) --log_backtrace_at traceLocation when logging hits line file:N, emit a stack trace (default :0) --log_dir string If non-empty, write log files in this directory --logtostderr log to standard error instead of files -n, --namespace string The namespace in which Ark should operate (default heptio-ark) --stderrthreshold severity logs at or above this threshold go to stderr (default 2) -v, --v Level log level for V logs --vmodule moduleSpec comma-separated list of patternN settings for file-filtered logging这些选项分为两类连接配置类选项作用说明--kubeconfig string指定用于连接 Kubernetes apiserver 的 kubeconfig 文件路径未设置时依次尝试KUBECONFIG环境变量与集群内配置in-cluster configuration--kubecontext string指定 kubeconfig 中要使用的 context未设置时默认使用当前 context等价于kubectl config current-context-n, --namespace string指定 Ark 操作的命名空间v0.8.0 默认heptio-ark当前仓库中默认值已演进为velero见 pkg/apis/velero/v1/constants.go命名空间选项对ark get的查询结果有决定性影响get子命令实际查询的是指定命名空间下的 CRD 实例如果服务器端 Ark 部署在别的命名空间就必须通过-n显式指定否则查不到任何数据。日志输出类选项作用--alsologtostderr除写日志文件外同时输出到标准错误--logtostderr日志只输出到标准错误而不写文件--log_dir string指定日志文件目录非空时启用文件日志--log_backtrace_at traceLocation当日志命中file:N时打印堆栈信息默认:0--stderrthreshold severity达到或超过该级别的日志输出到 stderr默认 2即 ERROR-v, --v Level设置 V 日志级别--vmodule moduleSpec按文件过滤设置日志级别格式为逗号分隔的patternN这些是 Go 标准k8s.io/klog/ glog 风格的日志参数属于 Ark CLI 全命令共享的标准配置与具体查询逻辑无关。子命令选项详解v0.8.0 文档中ark get的三个主要子命令——backups、restores、schedules——拥有完全一致的选项集合见 ark_get_backups.md、ark_get_restores.md、ark_get_schedules.md-h, --help help for backups --label-columns stringArray a comma-separated list of labels to be displayed as columns -o, --output string Output display format. For create commands, display the object but do not send it to the server. Valid formats are table, json, and yaml. (default table) -l, --selector string only show items matching this label selector --show-labels show labels in the last column-o, --output string输出格式指定查询结果的展示格式可选值为table、json、yaml默认table。该选项的实际行为由 pkg/cmd/util/output/output.go 的BindFlags绑定并通过PrintWithFormat同文件 L113-L127分派table走printTable路径按资源类型查表渲染人类可读的表格默认格式json/yaml走printEncoded路径将对象序列化后输出。值得注意的是当查询结果是列表且列表中只有一个元素时会直接输出该元素而非列表包裹见 output.go L129-L149。选项的合法性校验在ValidateFlags/validateOutputFlag中完成output.go L90-L108除table、json、yaml及空值外其余值都会报错invalid output format ... - valid values are table, json, and yaml。这也是各get子命令在Run回调中最先执行output.ValidateFlags(c)的原因。-l, --selector string标签选择器只显示匹配该标签选择器的对象。在backup get的实现pkg/cmd/cli/backup/get.go中该值通过labels.Parse解析为 Kubernetes 标签选择器并以kbClient.List(..., kbclient.ListOptions{LabelSelector: parsedSelector, ...})的方式传给 controller-runtime 客户端由 API Server 侧完成过滤。这保证了ark get backups -l appnginx这类查询语义与kubectl get ... -l appnginx完全一致。--label-columns stringArray标签列接受逗号分隔的标签键列表将这些标签作为额外的列展示在表格中。源码层面output.go L47-L48使用flag.NewStringArray()实现支持重复使用如-L label1 -L label2。注意标签键名是大小写敏感的。--show-labels显示标签列在表格最后一列输出对象的完整标签集合格式为key1value1,key2value2。这三个展示类选项最终汇入NewPrinter构造的printers.PrintOptions{ShowLabels, ColumnLabels}output.go L241-L250交给 Kubernetes 的printers.NewTablePrinter完成列渲染。按名称查询与列表查询虽然 v0.8.0 文档只给出ark get backups [flags]的语法占位但从当前仓库的backup get实现pkg/cmd/cli/backup/get.go可以推断出该子命令支持两类查询方式不传名称列出命名空间下所有资源。走kbClient.List分支配合--selector进行标签过滤传一个或多个名称逐个执行kbClient.Get按名称精确获取指定对象例如ark get backups daily-backup-20260101。若指定名称不存在命令会报错退出。此外get.go 中 L70 设置了ValidArgsFunction cli.CompleteBackupNames(f)为交互式 shell 提供备份名称的自动补全能力。表格输出列的构成ark get backups默认表格的列定义在 pkg/cmd/util/output/backup_printer.go 中列名含义Name备份名称Status备份当前阶段如 New、InProgress、Completed、Failed、Deleting 等Errors备份过程中的错误数Warnings备份过程中的警告数Created备份开始时间Expires过期倒计时基于 TTL 与开始时间推算Storage Location使用的备份存储位置Queue Position在备份队列中的位置0 时显示为空Selector备份的标签选择器其中有两处值得注意的细节实现排序sortBackupsByPrefixAndTimestampbackup_printer.go L64-L82对列表排序——默认按名称字母序但如果备份名带有 14 位时间戳后缀如 schedule 自动生成的备份则在相同前缀分组内按时间戳倒序排列让最新生成的备份排在最前。过期时间推算printBackupbackup_printer.go L84-L122优先使用Status.Expiration若未设置且Spec.TTL大于 0、备份已开始StartTimestamp非空则用StartTimestamp TTL估算避免把停留在 New 阶段的备份误判为已过期对应 issue #3555 的修复。restores、schedules等其他资源类型同样在 pkg/cmd/util/output 包中有各自的列定义与行渲染函数printTable通过类型断言output.go L155-L223统一分发。完整使用示例综合文档与源码ark get的典型用法如下# 列出全部备份表格形式 ark get backups # 按名称查看单个备份 ark get backups daily-backup-20260101 # 按标签过滤备份 ark get backups -l appnginx # 以 YAML 格式输出备份对象便于与 kubectl apply / git 配合 ark get backups -o yaml # 以 JSON 格式输出 ark get backups -o json # 在表格中展示自定义标签列并显示完整标签 ark get backups --label-columns app --show-labels # 列出所有恢复与定时调度 ark get restores ark get schedules相关命令速查ark —— Ark 根命令Back up and restore Kubernetes cluster resources.ark get backups —— Get backupsark get restores —— Get restoresark get schedules —— Get schedules小结ark get命令族以kubectl式交互模型为设计蓝本通过聚合backups、restores、schedules、backup-locations、snapshot-locations、plugins六个子命令配合-o、-l、--label-columns、--show-labels等展示与过滤选项提供了对 Velero 核心资源完整且灵活的查询能力。其源码实现pkg/cmd/cli/get/get.go清晰展示了 cobra 命令树的组织方式而输出层pkg/cmd/util/output则体现了基于metav1.Table与 Kubernetes printer 的统一渲染机制。理解这一命令的选项体系与实现原理对日常使用 Velero 排查备份/恢复状态、编写自动化运维脚本以及深入理解 CLI 插件式扩展都很有帮助。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考