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

发布时间:2026/9/13 19:45:00
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-serviceApplication 内多个 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-runargocd 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 文档 给出了更合适的选项ApplyOutOfSyncOnlyapiVersion: argoproj.io/v1alpha1 kind: Application spec: syncPolicy: syncOptions: - ApplyOutOfSyncOnlytrue也可以通过 CLI 设置argocd app set guestbook --sync-option ApplyOutOfSyncOnlytrue文档明确了两者的行为差异开启ApplyOutOfSyncOnly时Sync Hooks 仍然会执行且同步会记录在历史中而选择性同步这两点都不满足。因此需要精确选择哪些资源同步 / 哪些不同步且能接受不留历史、不跑 Hooks → 用--resource选择性同步只需要跳过已同步的资源、保留完整的 Hooks 与历史记录 → 用ApplyOutOfSyncOnlytrue。限制与注意事项无历史、不可回滚选择性同步不出现在 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),仅供参考