ARTICLE DETAIL

资讯详情

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

Argo CD `argocd appset` 命令完全指南:ApplicationSet 的创建、查询、生成与删除

Argo CD `argocd appset` 命令完全指南:ApplicationSet 的创建、查询、生成与删除 Argo CDargocd appset命令完全指南ApplicationSet 的创建、查询、生成与删除【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cdargocd appset是 Argo CD CLI 中专门用于管理 ApplicationSet 的子命令组它把用声明式模板批量生成 Application的能力从前端 UI 与 YAML 文件延伸到命令行。本文以官方命令参考文档为主体结合仓库中 applicationset.go 的实现与测试系统讲解get、list、create、delete、generate五个子命令的用法、参数语义、命名空间解析优先级与底层调用链帮助你在日常运维中像操作普通argocd app一样高效管理 ApplicationSet。什么是argocd appset命令组argocd appset是argocdCLI 下的顶层命令其职责是Manage ApplicationSets管理 ApplicationSet 资源。在源码层面它由 NewAppSetCommand 注册到 root 命令并在其下挂载了五个子命令argocd appset get APPSETNAME— 获取单个 ApplicationSet 的详情argocd appset list— 列出所有或按条件筛选的ApplicationSetargocd appset create filename or URL— 从一个 YAML 文件或 URL 创建 ApplicationSetargocd appset delete APPSETNAME— 删除一个或多个 ApplicationSetargocd appset generate filename or URL— 在服务端渲染 ApplicationSet 模板预览将生成的 Application不带任何子命令直接执行argocd appset时命令会打印帮助信息并退出源码中Run直接调用c.HelpFunc()这与argocd其他顶层命令的行为保持一致。说明本文描述的选项与行为以当前仓库Argo CD v3 代码库为准。不同版本之间参数可能存在细微差异执行前可用argocd appset subcommand --help核对当前安装版本。子命令速览五种操作一览子命令作用典型用法get获取单个 ApplicationSet 详情argocd appset get APPSETNAMElist列出 ApplicationSetargocd appset listcreate从 YAML 文件/URL 创建argocd appset create appsets.yamldelete删除 ApplicationSet 及其管理的 Applicationargocd appset delete APPSETNAMEgenerate服务端渲染模板预览生成的 Applicationargocd appset generate appsets.yaml这些子命令的注册顺序可见 NewAppSetCommand对应官方文档SEE ALSO一节中的五个条目。命令行调用总览以下示例来自官方命令参考argocd_appset.md覆盖了最常见的五种操作# 获取一个 ApplicationSet argocd appset get APPSETNAME # 列出所有 ApplicationSet argocd appset list # 从一个 YAML 文件或 URL 创建 ApplicationSet argocd appset create filename or URL (filename or URL...) # 删除一个 ApplicationSet argocd appset delete APPSETNAME (APPSETNAME...)命名空间优先级规则重点--appset-namespace简称-N用于指定 ApplicationSet 所在的命名空间但它与参数中携带的命名空间存在明确的优先级规则官方文档特别注明了这一点get/delete如果参数是namespace/name形式的限定名qualified name则该命名空间优先-N被忽略create/generate如果 YAML 中设置了metadata.namespace则该值优先仅当清单省略了命名空间时-N才生效。从源码看这一规则在 applicationset.go 中通过argo.ParseFromQualifiedName(args[0], appSetNamespace)实现先尝试从namespace/name参数中解析出命名空间解析不到时才回退到--appset-namespace的值。而create/generate则在 applicationset.go 中先检查appset.Namespace是否为空为空且-N非空时才用-N填充并打印提示信息。argocd appset list列出与筛选 ApplicationSetlist是最常用的只读操作用于快速掌握当前环境中存在哪些 ApplicationSet 及其状态。# 列出所有 ApplicationSet argocd appset list支持的选项选项说明-N, --appset-namespace string只列出指定命名空间中的 ApplicationSet-o, --output string输出格式可选wide、name、json、yaml默认wide-p, --project stringArray按项目名过滤可重复指定多个项目-l, --selector string按标签label selector筛选在name输出格式下命令只打印 ApplicationSet 的限定名含命名空间源码实现在 printApplicationSetNameswide模式则通过 printApplicationSetTable 输出表格基础列包括NAME、PROJECT、SYNCPOLICY、HEALTH、CONDITIONSwide模式下额外追加REPO、PATH、TARGET三列取自模板 source 的 RepoURL、Path、TargetRevision。Conditions列只显示状态为True的条件避免噪音。底层实现如何过滤list在客户端构造ApplicationSetListQuery{Selector, Projects, AppsetNamespace}并调用服务端 gRPC 接口见 applicationset.go。其中--project是stringArray类型可传多个项目名做多重过滤--selector使用 Kubernetes 标准的标签选择器语法例如-l environmentproduction。对应的 gRPC 方法定义在 pkg/apiclient/applicationset/applicationset.pb.go 中命令行只是薄薄的一层封装真正的过滤逻辑在 Argo CD server 端执行。argocd appset get查看单个 ApplicationSet 详情get用于获取指定 ApplicationSet 的详细状态信息包括模板源、目标集群、健康状态与同步策略等。# 获取一个 ApplicationSet argocd appset get APPSETNAME # 使用限定名namespace/name获取指定命名空间中的 ApplicationSet argocd appset get APPSET_NAMESPACE/APPSETNAME # 使用 --appset-namespace 指定命名空间 argocd appset get --appset-namespaceAPPSET_NAMESPACE APPSETNAME支持的选项选项说明-N, --appset-namespace string只从指定命名空间获取提供限定名时被忽略-o, --output string输出格式可选json、yaml、wide默认wide--show-params显示 ApplicationSet 的参数parameters与覆盖overrides输出内容解读wide默认格式调用 printAppSetSummaryTable 输出摘要表包含NameApplicationSet 的限定名namespace/nameProject模板中指定的 Argo CD 项目Server目标集群优先显示 destination 的 server为空时回退到 destination 的 nameNamespace目标命名空间Health StatusApplicationSet 的健康状态Source / Sources单个或多个来源逐条列出 Repo、Target、PathSyncPolicyAutomated启用自愈时追加(Prune)或none当状态中存在条件conditions时还会追加一张CONDITION/STATUS/MESSAGE/LAST TRANSITION表格见 printAppSetConditions。--show-params则会额外打印模板中 Helm 相关的参数调用printHelmParams见 applicationset.go。摘要输出中的同步策略取值逻辑在 applicationset.go 中有精确实现只有当template.spec.syncPolicy启用自动同步时显示Automated若同时配置了 prune 则显示Automated (Prune)注意spec.syncPolicy如PreserveResourcesOnDeletion不会被计入该字段。这一行为已被 applicationset_test.go 中的TestPrintAppSetSummaryTable用五种场景仅设置 spec 级、仅设置 template 级、两者都设置、单 source、多 source逐一验证。argocd appset create从文件或 URL 创建 ApplicationSetcreate是批量交付 ApplicationSet 的主要入口它接受一个或多个本地 YAML 文件路径或 HTTP(S) URL。# 创建 ApplicationSet argocd appset create filename or URL (filename or URL...) # 在指定命名空间中创建 argocd appset create --appset-namespaceAPPSET_NAMESPACE filename or URL (filename or URL...) # 服务端干跑预览将管理的 Application 名称 argocd appset create --dry-run filename or URL -o json | jq -r .status.resources[].name支持的选项选项说明-N, --appset-namespace stringApplicationSet 将被创建到的命名空间YAML 中已设置metadata.namespace时被忽略--dry-run在服务端评估模板预览将创建的 Application-o, --output string输出格式可选json、yaml、wide默认wide--upsert允许覆盖同名 ApplicationSet即使提供的 spec 与现有 spec 不同--wait等待 ApplicationSet 的资源变为最新状态若 ApplicationSet 存在错误将无限期阻塞执行流程与created / unchanged / updated判定从源码 NewApplicationSetCreateCommand 可以看出完整流程通过cmdutil.ConstructApplicationSet(fileURL)解析输入文件/URL得到 ApplicationSet 列表解析不到任何 ApplicationSet 时报错退出校验每个 ApplicationSet 的metadata.name必须存在若 YAML 未设置命名空间且传入了-N用-N填充并打印提示先Get一次判断是否已存在NotFound之外的其他错误直接报错调用CreategRPC 接口携带Upsert与DryRun标记依据existing是否为nil、hasAppSetChanged的结果输出created/unchanged/updated三种动作--dry-run时动作后缀会追加(dry-run)。hasAppSetChangedapplicationset.go的语义值得注意只有在启用--upsert时才可能判定为updated且比较范围是 spec、labels、annotations、finalizers服务端会把空值归一化为 nil 再比较代码中对空 map 做了显式置 nil 处理。--dry-run的用途--dry-run会在服务端评估 ApplicationSet 模板而非本地渲染返回如果真正创建会得到哪些 Application的预览信息。结合-o json与jq即可快速抽取资源清单非常适合在批量上线前做人肉核对argocd appset create --dry-run appsets.yaml -o json | jq -r .status.resources[].name--wait与资源同步条件--wait会阻塞直到 ApplicationSet 的所有资源即其生成的 Application达到最新状态。底层通过 waitForApplicationSetResourcesUpToDate 监听WatchApplicationSetWithRetry事件流直到出现ResourcesUpToDate条件为True的 ApplicationSet 事件若在达成前 ApplicationSet 被删除或 watch 流关闭则返回错误。对应条件类型ApplicationSetConditionResourcesUpToDate的判定逻辑isApplicationSetResourcesUpToDate以及删除即报错的分支都在 applicationset_test.go 中有对应测试覆盖。argocd appset generate服务端渲染模板generate与create --dry-run类似但更直接它只渲染、不落库把 ApplicationSet 模板在服务端展开返回将生成的 Application 列表。官方文档对其定位是Generate apps of ApplicationSet rendered templates。# 渲染模板生成 Application 清单 argocd appset generate filename or URL (filename or URL...) # 在指定命名空间中渲染 argocd appset generate --appset-namespaceAPPSET_NAMESPACE filename or URL (filename or URL...)与create --dry-run的差异两者都调用服务端能力做预览但关注点不同create --dry-run走的是Create接口携带DryRun标记返回的是一个已渲染的 ApplicationSet 对象及其 status因此-o json | jq .status.resources[].name的管道才成立generate走的是独立的GenerategRPC 接口applicationset.go返回的是渲染后的 Application 对象列表更接近模板展开结果本身。输出格式与注意事项输入文件必须只包含一个ApplicationSet否则报错 Input file must contain one ApplicationSetapplicationset.go-o wide默认以表格输出 Application 列表-o yaml|json则序列化整个 Application 对象列表。由于 Kubernetes 客户端返回的对象缺少 apiVersion/kind代码会手动回填argoproj.io/v1alpha1与Applicationapplicationset.go确保-o yaml输出可直接用于审计或后续提交。argocd appset delete删除 ApplicationSet 及其 Applicationdelete用于移除一个或多个 ApplicationSet。需要注意删除 ApplicationSet 默认会级联删除其管理的 Application 资源因此命令设计了交互式确认机制。# 删除一个 ApplicationSet argocd appset delete APPSETNAME (APPSETNAME...) # 使用限定名namespace/name删除指定命名空间中的 ApplicationSet argocd appset delete APPSET_NAMESPACE/APPSETNAME # 使用 --appset-namespace 指定命名空间 argocd appset delete --appset-namespaceAPPSET_NAMESPACE APPSETNAME支持的选项选项说明-N, --appset-namespace stringApplicationSet 将被删除的命名空间提供限定名时被忽略-y, --yes关闭级联删除 Application 资源的确认提示--wait等待 ApplicationSet 删除完成交互式确认的行为细节源码 NewApplicationSetDeleteCommand 展示了完整的确认逻辑命令会检测 stdout 是否为终端isatty并结合-y决定是否启用提示提示文案为Are you sure you want to delete name and all its Applications? [y/n]当一次指定多个ApplicationSet 时提示变为[y/n/a]输入a表示对剩余所有 ApplicationSet 都不再逐个确认confirmAll实现全量删除未确认的项会打印The command to delete name was cancelled.--wait会在删除请求发出后通过 watch 等待Deleted事件见 applicationset.go适用于带有 finalizer、删除需要一定时间的场景该流程由 TestAppSetDeleteWaitFlow 验证。提示若只想保留 Application 而删除 ApplicationSet可以在 ApplicationSet spec 中配置preserveResourcesOnDeletion见 applicationset_test.go 中的用法示例该策略会跳过对 Application 的级联删除。参数优先级速查表场景命名空间来源优先级从高到低get/delete参数中的namespace/name限定名 →-Ncreate/generateYAML 中metadata.namespace→-N→ 默认命名空间结合示例资源理解输出下面是一个真实的 ApplicationSet 清单示例applicationset/examples/list-generator/list-example.yaml它使用 list generator 为两个集群各生成一个 guestbook ApplicationapiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: guestbook spec: goTemplate: true goTemplateOptions: [missingkeyerror] generators: - list: elements: - cluster: engineering-dev url: https://kubernetes.default.svc - cluster: engineering-prod url: https://kubernetes.default.svc template: metadata: name: {{.cluster}}-guestbook spec: project: default source: repoURL: https://github.com/argoproj/argo-cd.git targetRevision: HEAD path: applicationset/examples/list-generator/guestbook/{{.cluster}} destination: server: {{.url}} namespace: guestbook将其保存为guestbook-appset.yaml后即可组合使用前面介绍的命令# 1. 先预览将生成哪些 Application argocd appset generate guestbook-appset.yaml -o wide # 2. 或通过 dry-run 查看服务端评估结果 argocd appset create --dry-run guestbook-appset.yaml -o json | jq -r .status.resources[].name # 3. 确认无误后创建 argocd appset create guestbook-appset.yaml # 4. 查看新创建的 ApplicationSet argocd appset get guestbook # 5. 列出环境中所有 ApplicationSet argocd appset list # 6. 不再需要时删除注意级联删除确认 argocd appset delete guestbook仓库中更多可参考的示例清单位于 applicationset/examples 目录涵盖 git generator、matrix、merge、pull request、SCM provider 等各类生成器可作为构造与验证 ApplicationSet 清单的素材。总结argocd appset命令组把 ApplicationSet 的完整生命周期——预览、创建、查询、列出、删除——统一收敛到 CLI让 GitOps 场景下的批量应用管理脚本化、可审计。核心要点回顾五个子命令get、list、create、delete、generate分别对应查询、筛选、创建含--dry-run/--upsert/--wait、删除含级联确认与服务端模板渲染命名空间优先级get/delete遵循限定名优先于-Ncreate/generate遵循YAML 中metadata.namespace优先于-N安全删除delete默认交互确认、支持[y/n/a]批量跳过确认--wait等待删除完成-y可关闭提示源码佐证全部行为可在 cmd/argocd/commands/applicationset.go 中找到实现其核心逻辑由 cmd/argocd/commands/applicationset_test.go 的测试用例覆盖。相关命令的完整参数参考可继续查阅官方命令文档argocd、argocd appset create、argocd appset delete、argocd appset generate、argocd appset get、argocd appset list。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表