ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Velero `backup get` 命令完全指南:查看 Kubernetes 备份列表与状态

Velero `backup get` 命令完全指南:查看 Kubernetes 备份列表与状态 Velerobackup get命令完全指南查看 Kubernetes 备份列表与状态【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文基于仓库中 v0.8.0 时代的命令行参考文档ark_backup_get.md展开结合当前 Velero 源码实现进行深度解读。你将从本文掌握velero backup get的完整用法如何列出全部备份、按标签筛选、按名称精确查询、切换 table/json/yaml 输出格式以及如何读懂每一列字段和备份阶段状态的真实含义从而在日常备份管理中快速定位问题。一、命令概述从ark backup get到velero backup get原文档记录的是 Velero 前身Ark时代的命令ark backup get文档默认命名空间为heptio-ark。Velero 项目在更名后命令体系从ark迁移为velero功能完全对应保留。因此本文所有示例均以当前仓库的实际命令velero backup get为准二者在用法上等价。从当前仓库根命令注册代码pkg/cmd/velero/velero.go可以看到c.AddCommand( backup.NewCommand(f), ... )而backup子命令组pkg/cmd/cli/backup/backup.go下挂载了create、get、logs、describe、download、delete六个子命令c.AddCommand( NewCreateCommand(f, create), NewGetCommand(f, get), NewLogsCommand(f), NewDescribeCommand(f, describe), NewDownloadCommand(f), NewDeleteCommand(f, delete), )也就是说get是backup命令族中负责查询与展示的核心子命令。二、命令语法与快速上手原文档给出的 Synopsis 为ark backup get [flags]对应到当前版本即velero backup get [flags]原文档仅支持[flags]无参形式即列出全部备份。而在当前仓库的实现中pkg/cmd/cli/backup/get.go命令还支持传入一个或多个备份名称来精确查询指定备份这是源码层面的增强backups : new(api.BackupList) if len(args) 0 { for _, name : range args { backup : new(api.Backup) err : kbClient.Get(context.TODO(), kbclient.ObjectKey{Namespace: f.Namespace(), Name: name}, backup) cmd.CheckError(err) backups.Items append(backups.Items, *backup) } }最常用示例# 列出当前命名空间下所有备份表格形式 velero backup get # 列出指定名称的备份 velero backup get my-backup-20260916 # 同时查看多个指定备份 velero backup get backup-a backup-b backup-c # 以 JSON 格式输出便于脚本解析 velero backup get -o json # 以 YAML 格式输出 velero backup get -o yaml # 按标签选择器过滤 velero backup get -l appnginx # 指定 kubeconfig 与命名空间 velero backup get --kubeconfig /path/to/kubeconfig -n velero注意默认查询命名空间为velero源码常量见 pkg/install/resources.go 的DefaultVeleroNamespace velero而 v0.8.0 时代 Ark 的默认命名空间为heptio-ark。如果你的集群是从旧版升级而来备份 CRD 仍可能存在于旧命名空间中查询时需用-n显式指定。三、命令选项详解继承原文档全部参数原文档列出了 5 个get专属选项整理如下选项类型说明-h, --helpbool显示 get 命令的帮助信息--label-columns stringArraystring 数组以逗号分隔的标签列表将其作为额外的列展示标签名区分大小写-o, --output stringstring输出格式合法值为table、json、yaml默认table-l, --selector stringstring只显示匹配该标签选择器的备份--show-labelsbool在最后一列显示标签这些选项在当前源码中有完整对应。其中-o、--label-columns短旗标为-L、--show-labels三个选项由统一的输出参数绑定函数注册pkg/cmd/util/output/output.go#L45-L50func BindFlags(flags *pflag.FlagSet) { flags.StringP(output, o, table, Output display format. ... Valid formats are table, json, and yaml. ...) labelColumns : flag.NewStringArray() flags.VarP(labelColumns, label-columns, L, Accepts a comma separated list of labels that are going to be presented as columns. ...) flags.Bool(show-labels, false, Show labels in the last column) }而-l, --selector则在 get 命令内部单独绑定pkg/cmd/cli/backup/get.go#L71c.Flags().StringVarP(listOptions.LabelSelector, selector, l, listOptions.LabelSelector, Only show items matching this label selector)选项组合实战# 只显示 appnginx 的备份 velero backup get -l appnginx # 同时显示多个标签列等价写法 velero backup get --label-columns app,env velero backup get -L app -L env # 在表格最后一列展示全部标签 velero backup get --show-labels # 组合按标签过滤 增加标签列 JSON 输出 velero backup get -l appnginx --label-columns env -o json四、继承自父命令的全局选项原文档同时列出了从父命令继承的 10 个全局选项它们控制 Velero CLI 与 Kubernetes API Server 的连接方式及日志行为选项说明--alsologtostderr同时将日志写入标准错误和日志文件--kubeconfig string指定 kubeconfig 文件路径未设置时尝试环境变量KUBECONFIG及集群内配置--kubecontext string指定要使用的 Kubernetes context默认使用kubectl config current-context的当前 context--log_backtrace_at traceLocation当日志命中file:N时输出堆栈追踪默认:0--log_dir string非空时在此目录写日志文件--logtostderr将日志写入标准错误而非文件-n, --namespace stringVelero 工作命名空间v0.8.0 文档默认heptio-ark当前版本默认velero--stderrthreshold severity达到或超过该级别的日志写入 stderr默认 2即 ERROR-v, --v LevelV 日志级别--vmodule moduleSpec以patternN逗号分隔的模块日志级别设置这些 klog 日志选项在当前根命令中被统一挂载pkg/cmd/velero/velero.go#L133-L140klog.InitFlags(flag.CommandLine) ... c.PersistentFlags().AddGoFlagSet(flag.CommandLine)连接参数实战# 使用特定 kubeconfig 和 context 查询 velero backup get --kubeconfig ~/.kube/prod-config --kubecontext prod # 查看调试日志 velero backup get -v 4 # 指定备份所在命名空间从 heptio-ark 升级而来的集群 velero backup get -n heptio-ark五、表格输出列含义与备份阶段状态当使用默认的table格式时输出由 backup_printer.go 中定义的 9 列构成backupColumns []metav1.TableColumnDefinition{ {Name: Name, Type: string, Format: name}, {Name: Status}, {Name: Errors}, {Name: Warnings}, {Name: Created}, {Name: Expires}, {Name: Storage Location}, {Name: Queue Position}, {Name: Selector}, }各列含义如下列名含义Name备份名称Status备份生命周期阶段见下方状态表若备份正在删除中则显示DeletingErrors备份过程中遇到的错误数量Warnings备份过程中产生的警告数量Created备份开始时间未开始则显示n/aExpires距过期时间Expires为从当前到期的倒计时过期后显示X ago未设置 TTL 或尚未开始时显示n/aStorage Location该备份使用的备份存储位置BackupStorageLocation 名称Queue Position备份在队列中的位置为 0 时显示为空Selector备份的标签选择器备份阶段BackupPhase状态对照表Status列的取值定义在 pkg/apis/velero/v1/backup_types.go#L301-L365阶段含义New备份已创建但尚未被 BackupController 处理Queued备份已进入队列等待出队执行ReadyToStart备份已从队列取出准备开始FailedValidation备份未通过控制器校验不会执行InProgress备份正在执行中WaitingForPluginOperations资源备份与快照创建成功但快照数据仍在上传或异步插件操作进行中备份尚不可用WaitingForPluginOperationsPartiallyFailed异步操作部分失败最终阶段将为 PartiallyFailed数据仍在传输中Finalizing快照上传与插件操作已完成正在做最终资源更新备份尚不可用FinalizingPartiallyFailed处理过程中出现部分错误正在做最终资源更新Completed备份成功完成无错误PartiallyFailed备份完成但备份单个条目时遇到 1 个及以上错误Failed备份执行但遇到阻止其成功完成的错误Deleting备份及其关联数据正在被删除过期时间的计算逻辑在 backup_printer.go 中Expires列的计算规则是优先取Status.Expiration若未设置则在备份已开始StartTimestamp非空且设置了 TTL 时用StartTimestamp TTL推算。这样避免了停滞在New阶段的备份被错误显示为已过期对应 issue #3555 的修复。输出示例NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION QUEUE POSITION SELECTOR nginx-backup-001 Completed 0 0 2026-09-16T02:30:00Z 24h default (empty) appnginx nginx-backup-002 InProgress 0 0 2026-09-16T03:00:00Z n/a default appnginx六、输出格式详解table / json / yaml-o, --output支持三种格式默认table。其校验与分发逻辑位于 pkg/cmd/util/output/output.gofunc validateOutputFlag(cmd *cobra.Command) error { output : GetOutputFlagValue(cmd) switch output { case , json, yaml: case table: if cmd.Name() install { return errors.New(table format is not supported with install command) } default: return errors.Errorf(invalid output format %q - valid values are table, json, and yaml, output) } return nil }table人类可读的表格是默认格式便于日常巡检json / yaml将备份对象的完整定义序列化输出通过encode.Encode适合接入脚本与自动化工具进行解析。当查询结果为列表且列表中仅有一个条目时会直接输出该单个对象的 JSON/YAML 而非数组更便于jq等工具处理见 output.go#L129-L149。# 用 jq 提取第一个备份的名称与状态 velero backup get -o json | jq .items[0] | {name: .metadata.name, phase: .status.phase}此外table格式通过NewPrinter组装列定义与行数据output.go#L151-L237并应用--show-labels与--label-columns的列选项。七、标签筛选与标签列从查询到展示的完整链路-l, --selector按标签过滤备份get 命令将--selector的值放入metav1.ListOptions.LabelSelector在执行列表查询时先用labels.Parse解析为合法的标签选择器再传给List调用pkg/cmd/cli/backup/get.go#L55-L63parsedSelector, err : labels.Parse(listOptions.LabelSelector) cmd.CheckError(err) err kbClient.List(context.TODO(), backups, kbclient.ListOptions{ LabelSelector: parsedSelector, Namespace: f.Namespace(), })支持标准 Kubernetes 标签选择器语法例如# 精确匹配 velero backup get -l appnginx # 集合匹配in / notin velero backup get -l app in (nginx,redis) # 存在性匹配 velero backup get -l backup-type # 排除特定标签 velero backup get -l env!prod--label-columns/--show-labels将标签变成列这两个选项作用于表格输出层--label-columns短旗标-L接受逗号分隔的标签键列表可多次指定将对应标签值渲染为额外列--show-labels则在最后一列展示该对象的全部标签。二者最终传入 Kubernetes 表格打印器output.go#L241-L250func NewPrinter(cmd *cobra.Command) (printers.ResourcePrinter, error) { options : printers.PrintOptions{ ShowLabels: GetShowLabelsValue(cmd), ColumnLabels: GetLabelColumnsValues(cmd), } printer : printers.NewTablePrinter(options) return printer, nil }八、源码视角get 命令的执行流程综合 pkg/cmd/cli/backup/get.go 的完整实现velero backup get的执行流程如下校验输出标志调用output.ValidateFlags(c)非法输出格式直接报错退出建立客户端通过f.KubebuilderClient()创建 controller-runtime 风格的客户端kbClient按参数分支若带有备份名称参数args逐个按namespace/name精确 Get并聚合到BackupList否则解析--selector后在指定命名空间执行 List 查询排序整理列表模式下backup_printer.go#L64-L82 的sortBackupsByPrefixAndTimestamp会先按名称字典序排序对于名称以-14位时间戳结尾即来自同一 Schedule 的定时备份的条目组则按时间戳倒序新的在前排列方便快速查看最新备份格式化输出根据-o选择 table 或 json/yaml 渲染最终写入 stdout。命令还注册了备份名称的 shell 补全函数cli.CompleteBackupNames(f)get.go#L70在支持 cobra 补全的 shell 中按 Tab 可自动补全备份名。九、测试验证行为如何被保障仓库中 pkg/cmd/cli/backup/get_test.go 的TestNewGetCommand覆盖了两种核心场景按名称精确查询创建b1、b2、b3三个带标签abcabc的备份执行velero backup get b1 b2 b3断言输出中包含 3 条以 New测试中备份尚未被处理状态为New开头的记录行标签选择器过滤执行velero backup get -l abcabc断言同样返回这 3 个备份。测试通过 Fake Controller Runtime Client 模拟 API Server直接验证了命令从参数解析、客户端查询到表格渲染的完整链路可作为理解命令行为尤其是传参与过滤语义的可靠参考。十、实战场景汇总场景命令日常巡检备份列表velero backup get只看未完成备份velero backup get --show-labels结合-l与状态标签备份自带标签可通过--show-labels查看定位最近一次定时备份velero backup get同名前缀按时间倒序检查某备份是否成功velero backup get my-backup -o json \| jq .status.phase统计错误/警告数量velero backup get -o json \| jq [.items[] \| {name: .metadata.name, errors: .status.errors, warnings: .status.warnings}]跨集群环境查询velero backup get --kubeconfig file --kubecontext ctx -n velero总结velero backup get是 Velero 备份管理中最高频的查询命令。本文完整继承并扩展了 v0.8.0 参考文档的全部内容从ark到velero的命令演化、专属选项与全局选项、table/json/yaml 三种输出格式、9 列表格字段、13 种备份阶段状态并结合当前源码get.go、output.go、backup_printer.go、backup_types.go与测试用例get_test.go揭示了背后的执行链路、排序规则、过期时间计算与标签过滤原理可帮助你在实际集群中精准、高效地定位备份状态与问题。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表