Argo CD `argocd app get` 命令详解:查询应用状态、参数与资源树的完整指南
2026/9/13 19:58:09 网站建设 项目流程

Argo CDargocd app get命令详解:查询应用状态、参数与资源树的完整指南

【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd

argocd app get是 Argo CD 命令行工具中用于获取单个 Application 详细状态的核心查询命令。在 GitOps 日常巡检与故障排查中,开发者可以用它快速确认应用当前是否已同步(Synced)、健康状态(Health)如何、目标集群与命名空间落在何处,以及资源树的父子依赖关系。读完本文,你将掌握该命令的全部输出格式(wide / yaml / json / tree)、刷新机制(--refresh/--hard-refresh)、多源应用的参数定位方式(--source-position/--source-name),并能结合仓库源码理解每条查询背后的 API 调用链。

命令概览:定位与作用

argocd app get归属于argocd app命令族。在 cmd/argocd/commands/app.go 中,NewApplicationCommandgetcreatesynclistdiffrollbacklogs等十余个子命令一起注册到app之下,其定位正如命令帮助文本所写:"Get application details"(获取应用详情)

基本语法:

argocd app get APPNAME [flags]

其中APPNAME是必填参数;若应用不在当前命名空间,可配合-N/--app-namespace指定。命令的完整实现位于 cmd/argocd/commands/app.go#L334-L516 的NewApplicationGetCommand函数中。

基础用法:官方示例逐一解读

命令内置的 Examples 完整覆盖了大多数查询场景(源码见 cmd/argocd/commands/app.go#L350-L383),原样整理如下:

# 以 wide 格式获取应用 "my-app" 的基础详情 argocd app get my-app -o wide # 以 YAML 格式获取应用 "my-app" 的详细信息 argocd app get my-app -o yaml # 以 JSON 格式获取应用 "my-app" 的详情 argocd get my-app -o json # 获取应用详情,并附带当前操作(operation)信息 argocd app get my-app --show-operation # 展示应用参数与覆盖值(overrides) argocd app get my-app --show-params # 展示应用参数与覆盖值,仅针对 spec.sources 中位置 1 的源 argocd app get my-app --show-params --source-position 1 # 展示应用参数与覆盖值,仅针对名为 "test" 的源 argocd app get my-app --show-params --source-name test # 获取应用详情时刷新应用数据 argocd app get my-app --refresh # 执行硬刷新,同时刷新应用数据与目标清单(manifests)缓存 argocd app get my-app --hard-refresh # 以树形结构展示应用详情 argocd app get my-app --output tree # 以详细树形结构展示应用详情 argocd app get my-app --output tree=detailed

注意第三个示例沿用了历史简写形式argocd get my-app -o json(省略app子命令),新代码中推荐使用完整形式argocd app get my-app -o json

输出格式详解:从表格到树

-o/--output决定返回内容的呈现方式,源码在 cmd/argocd/commands/app.go#L475-L503 中通过switch output分发到不同渲染路径:

格式说明渲染路径
wide(默认)人类可读的摘要表 + 资源列表表printHeader+printAppResources
yaml应用完整对象,YAML 序列化PrintResource(app, "yaml")
json应用完整对象,JSON 序列化PrintResource(app, "json")
tree摘要表 + 资源树(父子关系)resourceParentChild+printTreeView
tree=detailed摘要表 + 详细资源树resourceParentChild+printTreeViewDetailed

wide:默认的巡检视图

wide视图分两个部分。第一部分是由printAppSummaryTable(cmd/argocd/commands/app.go#L655-L733)输出的摘要,包含以下关键字段:

  • Name:应用限定名(应用名.命名空间形式,由app.QualifiedName()生成)
  • Project:所属 Argo CD Project
  • Server:目标集群地址(优先展示spec.destination.server,否则回退到destination.name,见 getServer)
  • Namespace:目标命名空间
  • URL:Argo CD UI 中该应用的可点击地址(优先取 settings 中的全局url,否则按协议://server/applications/应用名推断,见 getAppURL)
  • Source / Sources:单个源显示RepoTargetPath,多源应用逐条列出,并额外展示RefHelm ValuesName Prefix(printAppSourceDetails)
  • SyncWindow:同步窗口状态,取值Sync Allowed/Sync Denied/Manual Allowed,并列出Assigned Windows
  • Sync PolicyAutomated(含(Prune)标注)或Manual
  • Sync StatusSynced to <revision>OutOfSync from <revision>,当目标修订是 commit SHA 时会附带前 7 位短哈希
  • Health Status:健康状态(Healthy/Progressing/Degraded/Missing等)

第二部分在app.Status.Resources非空时打印资源表,表头为GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE(printAppResources),可以快速看到每个受管资源的同步状态与健康状态。

yaml / json:给脚本与自动化用的结构化输出

yamljson直接输出Application对象的完整序列化结果,包含spec(源、目标、同步策略、项目)与status(同步、健康、资源、条件、操作状态等)全部字段,适合配合jqyq或 CI 脚本做二次解析。

tree / tree=detailed:资源树视图

tree系列先输出与 wide 相同的摘要表,再基于ResourceTreeAPI 返回的资源节点构建父子关系:节点通过ParentRefs[0].UID建立 parent→child 映射,无父节点的作为根节点输出(parentChildDetails)。

  • tree表头:KIND/NAME STATUS HEALTH MESSAGE(printTreeView)
  • tree=detailed表头:KIND/NAME STATUS HEALTH AGE MESSAGE REASON(printTreeViewDetailed),额外提供资源年龄与状态原因,排查 Degraded 资源时信息更全。

刷新机制:--refresh--hard-refresh

Argo CD 的 Application 状态由 application-controller 周期性比对生成,并写入缓存。app get读取的是这份已缓存状态;若想看到最新结果,可以带刷新选项强制服务端重新比对。

两者的区别在 getRefreshType 中一目了然:

func getRefreshType(refresh bool, hardRefresh bool) *string { if hardRefresh { refreshType := string(argoappv1.RefreshTypeHard) return &refreshType } if refresh { refreshType := string(argoappv1.RefreshTypeNormal) return &refreshType } return nil }
  • --refresh:对应RefreshTypeNormal,触发应用数据的常规刷新(重新生成/比对清单),但不重建缓存。
  • --hard-refresh:对应RefreshTypeHard,除应用数据外,同时使目标清单缓存(target manifests cache)失效并重建,代价是更耗资源,通常在怀疑缓存陈旧导致比对结果异常时使用。

刷新类型最终通过application.ApplicationQuery{Name, Refresh, AppNamespace}随 gRPC 请求发送给 Argo CD API Server(cmd/argocd/commands/app.go#L412-L417)。

查看参数与覆盖值:--show-params与多源定位

--show-params用于展示 Helm 参数及其覆盖值,底层由 printParams 与 printHelmParams 实现,输出NAME VALUE两列表格,值超过 80 个字符时会被截断(truncateString)。

对于多源应用(spec.sources中存在多个源),必须显式指定查看哪个源:

  • --source-position N:按位置定位,计数从 1 开始
  • --source-name NAME:按源名称定位,源码通过getSourceNameToPositionMap(cmd/argocd/commands/app.go#L324-L332)把源名映射为位置序号后再复用同一套渲染逻辑。

源码中对这两个参数的校验非常严格(cmd/argocd/commands/app.go#L445-L466):

  1. --source-name--source-position不能同时使用,否则直接报错Only one of source-position and source-name can be specified.
  2. 指定了不存在的源名,会以Unknown source name '<name>'终止;
  3. 多源应用使用--show-params时,若未指定位置(sourcePosition <= 0),会报错提示必须指定大于 0 的源位置
  4. 位置超过源数量时,报错Source position should be less than the number of sources in the application

单源应用则不受此限制,直接取app.Spec.GetSource()

查看进行中的操作:--show-operation

当应用正处于SyncRollback等异步操作中时,--show-operation会在摘要表之后额外打印app.Status.OperationState(操作名称、阶段、启动/结束时间、消息、同步结果等),方便实时观察同步进度。源码中由 printHeader 的if showOperation && app.Status.OperationState != nil分支触发printOperationResult完成渲染。

命名空间与超时控制

  • -N/--app-namespace:Argo CD 应用可以创建在非默认命名空间,该选项用于限定应用所在命名空间。命令内部通过argo.ParseFromQualifiedName(args[0], appNamespace)(cmd/argocd/commands/app.go#L396)解析“应用名.命名空间”限定名,未指定时回退到该选项值。
  • --timeout:请求超时秒数,默认defaultCheckTimeoutSeconds(值为 0,即不设置超时,见 cmd/argocd/commands/app.go#L2771)。设置后,若带刷新选项的请求超时,命令会自动以不带刷新的普通查询重试一次,保证至少能拿到缓存数据(见 getAppStateWithRetry 中的--timeout fired: retry once without refresh逻辑)。

完整选项参考

本命令专属选项

选项简写默认值说明
--app-namespace string-N""仅从指定命名空间获取应用
--hard-refreshfalse刷新应用数据及目标清单缓存
--help-h显示帮助
--output string-o"wide"输出格式:json/yaml/wide/tree
--refreshfalse获取时刷新应用数据
--show-operationfalse显示应用操作信息
--show-paramsfalse显示应用参数与覆盖值
--source-name string""应用的源列表中的源名称
--source-position int-1应用源列表中的源位置,计数从 1 开始
--timeout uint0超时秒数(0 表示不超时)

继承自父命令的常用选项(节选)

以下选项由argocd app及其上层命令统一提供,app get同样可用:

选项说明
--server stringArgo CD 服务器地址
--auth-token string认证令牌;也可用环境变量ARGOCD_AUTH_TOKEN
--config stringArgo CD 配置文件路径,默认/home/user/.config/argocd/config
--core设为 true 时 CLI 直接与 Kubernetes 通信,绕过 Argo CD API Server
--port-forward通过端口转发连接随机的 argocd-server 端口
--insecure跳过服务器证书与域名校验
--plaintext禁用 TLS
--grpc-web启用 gRPC-Web 协议(当服务器位于不支持 HTTP/2 的代理之后时有用)
--grpc-web-root-path string启用 gRPC-Web 并设置 web 根路径
--header strings为所有请求附加额外的 header,可重复指定,也支持逗号分隔
--kube-context string指定使用的 kube-context
--logformat string日志格式:json/text(默认json
--loglevel string日志级别:debug/info/warn/error(默认info
--argocd-context string要使用的 Argo CD 服务器上下文名称
--client-crt string/--client-crt-key string客户端证书文件及私钥
--server-crt string/--server-crt-key服务器证书文件
--http-retry-max int与服务器建立 HTTP 连接的最大重试次数
--redis-name/--redis-compress/--redis-haproxy-name与 Redis 部署名称及压缩配置相关(通常用于--core模式)
--controller-name/--repo-server-name/--server-name各组件名称,Helm 安装导致默认名称不同时需覆盖
--prompts-enabled强制启用/禁用可选的交互式提示

完整列表以argocd app get --help输出为准。

底层调用链:一次查询的完整旅程

从源码视角看,argocd app get my-app的执行链路大致如下:

  1. cli.WithSignalContext包装命令入口,处理 Ctrl-C 等信号(cmd/argocd/commands/app.go#L385);
  2. headless.NewClientOrDie创建 Argo CD API 客户端,NewApplicationClientOrDieWithContext建立 ApplicationService 的 gRPC 连接(cmd/argocd/commands/app.go#L392-L394);
  3. 解析限定名得到appName/appNs,构造application.ApplicationQuery{Name, Refresh, AppNamespace}调用appIf.Get(cmd/argocd/commands/app.go#L412-L417)——这与 pkg/apiclient/application 中定义的 ApplicationService gRPC 接口对应;
  4. 若需输出树视图,再调用appIf.ResourceTree获取资源树(cmd/argocd/commands/app.go#L283);
  5. 若需渲染 SyncWindow,会额外查询 Project 详情(projIf.Get)并调用proj.Spec.SyncWindows.Matches(app)计算当前应用命中的同步窗口(cmd/argocd/commands/app.go#L468-L473);
  6. 最后按--output选择渲染路径输出。

关联命令

argocd app get通常与以下命令配合使用:应用管理入口 argocd app,列举全部应用的argocd app list,对比实际与期望状态的argocd app diff,以及触发同步的argocd app sync。它们共同构成 Argo CD 日常巡检与变更的完整闭环。

【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询