news 2026/9/13 19:44:26

Argo CD 如何执行部分资源的选择性同步(Selective Sync)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Argo CD 如何执行部分资源的选择性同步(Selective Sync)

Argo CD 如何执行部分资源的选择性同步(Selective Sync)

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

当一次同步只想作用于 Application 中的部分资源时——例如只部署某个 Service、排除某个 Deployment,或者在排障时先单独验证个别资源——可以执行selective sync(选择性同步):只同步你选定的那些资源。Argo CD 支持从 UI 或 CLI 两种方式选择要同步的资源。使用前必须先了解两条硬限制,它们决定了这个功能适合什么场景:

  • 选择性同步不会记录到同步历史中,因此无法通过 history 回滚;
  • 选择性同步过程中Hooks 不会执行(来自 Sync Phases and Waves 文档的明确说明)。

如果需要"只处理部分资源"但同时要求保留历史记录、让 Hooks 正常执行,可以考虑后文提到的ApplyOutOfSyncOnly同步选项作为替代路径。

UI 中针对 Application 的部分资源发起同步,来源:selective_sync.md

用 CLI 的 --resource 参数执行选择性同步

主路径是argocd app sync命令的--resource参数。其官方定义为(摘自 argocd app sync 命令参考):

--resource stringArray Sync only specific resources as GROUP:KIND:NAME or !GROUP:KIND:NAME. Fields may be blank and '*' can be used. This option may be specified repeatedly

要点:

  • 资源格式为GROUP:KIND:NAME,三个字段都允许留空,也允许使用*通配符;
  • !前缀表示排除匹配到的资源,而不是只同步它们;
  • 该参数可重复指定,用于同时匹配多个资源或叠加排除规则。

下面示例中的my-app是文档使用的示例应用名,执行时替换为你自己的 Application 名称;资源名替换为集群中实际存在的对象。

指定单个或某个 Kind 的资源

# GROUP 留空,表示 core 组(如 Service) argocd app sync my-app --resource :Service:my-service # 指定 GROUP:KIND:NAME argocd app sync my-app --resource argoproj.io:Rollout:my-rollout

排除某个资源或某类资源

# 排除指定 Deployment argocd app sync my-app --resource '!apps:Deployment:my-service' # 排除所有 Service(任意 group、任意名字) argocd app sync my-app --resource '!*:Service:*'

!前缀的语义是排除:命令会同步 Application 中除被排除项以外的全部资源。'*:Service:*'这种写法利用"字段可留空且支持*"的规则,匹配任意 group 下的所有 Service。

一次同步多个目标资源

argocd app sync my-app --resource apps:Deployment:my-service --resource :Service:my-service

Application 内多个 namespace 存在同名资源时

# 在 NAME 前加上 namespace 前缀以精确定位 argocd app sync my-app --resource argoproj.io:Rollout:my-namespace/my-rollout

当 Application 在不同 namespace 中有同名资源时,GROUP:KIND:NAME无法区分它们,需要用my-namespace/my-rollout这种namespace/NAME写法指定 namespace。

执行前先预览:--dry-run

argocd app sync提供--dry-run选项,官方说明为 "Preview apply without affecting cluster"(预览 apply 但不影响集群)。在首次对生产 Application 使用--resource筛选条件时,建议先加--dry-run确认筛选结果符合预期,再去掉该参数执行真正的同步:

argocd app sync my-app --resource :Service:my-service --dry-run

此外,--timeout参数(单位:秒)用于控制同步等待超时,可按需附加;完整参数列表见 argocd app sync 命令参考。

在 UI 中选择资源

Selecting Sync 文档 指出资源选择可以 "from the UI or the CLI"。在 Argo CD UI 的 Application 视图中,可以对 Application 的资源列表进行筛选/勾选后再发起同步,效果与 CLI 的--resource等价。UI 适合交互式挑选资源;需要脚本化、可复现的操作时优先用 CLI。

验证同步结果

同步完成后,argocd app sync命令自身的输出(默认--output wide)会展示各资源的同步状态,据此判断被选中的资源是否达到预期。若资源长时间处于Progressing,可结合--timeout控制等待上限,避免命令无限挂起。

同时记住选择性同步的记录特性:由于该操作不写入同步历史argocd app history中不会看到这条记录,事后也无法用argocd app rollback回到这次操作之前的状态。这是选择该方式执行前必须接受的代价。

与 ApplyOutOfSyncOnly 同步选项的区别

如果你的目标只是"不重新应用已经同步的资源",而不是"精确挑选特定资源",Sync Options 文档 给出了更合适的选项ApplyOutOfSyncOnly

apiVersion: argoproj.io/v1alpha1 kind: Application spec: syncPolicy: syncOptions: - ApplyOutOfSyncOnly=true

也可以通过 CLI 设置:

argocd app set guestbook --sync-option ApplyOutOfSyncOnly=true

文档明确了两者的行为差异:开启ApplyOutOfSyncOnly时,Sync Hooks 仍然会执行,且同步会记录在历史中;而选择性同步这两点都不满足。因此:

  • 需要精确选择"哪些资源同步 / 哪些不同步",且能接受不留历史、不跑 Hooks → 用--resource选择性同步;
  • 只需要跳过已同步的资源、保留完整的 Hooks 与历史记录 → 用ApplyOutOfSyncOnly=true

限制与注意事项

  • 无历史、不可回滚:选择性同步不出现在 Application 历史中,出错后无法通过 Argo CD 的 rollback 机制回退,只能重新执行一次完整的普通同步。
  • Hooks 不执行:如果你的部署依赖PreSync/PostSyncHook(数据库迁移、校验任务等),这些 Hook 在选择性同步中会被跳过,sync-waves.md 原文为 "Hooks do not run during a selective sync operation"。
  • 筛选条件是本次命令级的--resource只作用于当次argocd app sync命令,不会持久化到 Application 上;后续的自动同步(auto sync)仍会按 Application 全量资源进行。

更多同步相关行为(sync wave、hook 生命周期、各同步选项)可继续阅读 Sync Phases and Waves 与 Sync Options。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 19:39:26

darktable 实战指南:RAW 到成片的 5 步工作流

darktable 实战指南:RAW 到成片的 5 步工作流 【免费下载链接】darktable darktable is an open source photography workflow application and raw developer 项目地址: https://gitcode.com/GitHub_Trending/da/darktable 把一堆 RAW 倒进文件夹&#xff0…

作者头像 李华