找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2623

积分

0

好友

369

主题
发表于 1 小时前 | 查看: 0| 回复: 0

在上一篇文章的快速体验中我曾提到,SYNC POLICY(同步策略)是ArgoCD中一个非常重要的配置选项。

SYNC POLICY的配置至关重要,它包含三个可多选的选项:

  1. ENABLE AUTO-SYNC(启用自动同步):即当Git仓库有新的提交时,自动触发并更新Kubernetes集群中的资源部署。
  2. PRUNE RESOURCES(清理资源):自动删除资源。例如,如果我将Git仓库中的Service配置文件删除,且勾选此选项,ArgoCD会自动删除Kubernetes中对应的Service资源。
  3. SELF HEAL(自我修复):强制以Git仓库中的配置为准。如果勾选,任何在Kubernetes集群中手动修改的配置都会被ArgoCD还原为Git仓库中定义的配置。

下面,我们将通过一系列实际操作来验证这三个选项在不同组合下的行为。

ENABLE AUTO-SYNC

关闭自动同步的验证

首先,我们测试关闭ENABLE AUTO-SYNC的情况。我将Git仓库中Deployment的副本数(replicas)修改为2,并提交了代码。

Git仓库提交记录界面,显示两次更新deploy.yaml的提交

提交后,在ArgoCD的界面中可以看到,应用状态显示为“OutOfSync from HEAD”,表示ArgoCD已经检测到了仓库最新的提交(commit 74d9a63),但并未自动同步。

ArgoCD应用详情页,显示状态为OutOfSync,但未自动同步

应用概览页也明确提示“Auto sync is not enabled”(自动同步未启用)。

ArgoCD应用概览页,突出显示SYNC按钮,状态为OutOfSync

那么,如何手动同步呢?我们点击“SYNC”按钮进行手动同步。

手动同步后,ArgoCD界面显示状态已同步到最新的commit

手动同步成功后,应用状态变为“Synced to HEAD”,并且副本数已按Git配置更新为2,可以看到两个Pod实例在运行。

PRUNE RESOURCES

开启PRUNE RESOURCES的验证

此选项的验证分为两种情况:是否同时开启了ENABLE AUTO-SYNC

情况一:同时开启 ENABLE AUTO-SYNC

在ArgoCD的SYNC POLICY中,同时勾选“ENABLE AUTO-SYNC”和“PRUNE RESOURCES”。

同步策略设置界面,AUTOMATED模式下勾选了ENABLE AUTO-SYNC和PRUNE RESOURCES

此时,我直接从Git仓库中删除svc.yaml(Service配置文件)并提交。

同步成功后界面,显示应用健康,并已同步到删除svc.yaml后的commit

提交后,由于自动同步已启用,ArgoCD立即执行了同步操作。从界面可以看到,同步成功,并且流程图中的svc节点已经消失,这意味着Kubernetes集群中对应的Service资源已被自动删除

情况二:未开启 ENABLE AUTO-SYNC

如果只勾选“PRUNE RESOURCES”,但没有勾选“ENABLE AUTO-SYNC”。

同步策略设置界面,仅勾选SELF HEAL,未勾选AUTO-SYNC和PRUNE

同样删除svc.yaml并提交后,ArgoCD界面会检测到状态为“OutOfSync”,但不会自动执行同步,因此Kubernetes中的Service资源也不会被删除

应用状态为OutOfSync,提示自动同步未启用

SELF HEAL

开启SELF HEAL的验证

同样,我们分两种情况验证。

情况一:同时开启 ENABLE AUTO-SYNC

策略配置为同时启用ENABLE AUTO-SYNCSELF HEAL。此时,Git仓库中定义的Deployment副本数是2。

我通过kubectl命令手动将运行在Kubernetes集群中的myapp Deployment的副本数修改为3:

kubectl -n yunsheng edit deploy myapp
# 在编辑器中修改 spec.replicas 为 3

执行kubectl get deploy查看,副本数确实已变为3。但很快,ArgoCD的Operator会检测到集群状态与Git声明不符,并强制将其改回Git中定义的2。通过查看Deployment的YAML,可以看到replicas字段被恢复为2。

kubectl get deploy -o yaml 输出,红色框显示replicas: 2

情况二:未开启 ENABLE AUTO-SYNC

策略配置为仅启用SELF HEAL,但不启用ENABLE AUTO-SYNC

同步策略设置界面,仅勾选SELF HEAL

我再次使用kubectl手动将副本数改为3:

kubectl -n yunsheng edit deploy myapp

执行命令后查看:

kubectl -n yunsheng get deploy

输出显示副本数已生效为3。
kubectl get deploy 命令行输出,显示READY为3/3

此时,在ArgoCD界面上,应用状态会显示为“OutOfSync”,告知我们集群状态与Git配置不同步。

ArgoCD界面显示应用为OutOfSync状态

关闭SELF HEAL的验证

前提是开启ENABLE AUTO-SYNC。策略配置为:开启ENABLE AUTO-SYNCPRUNE RESOURCES,但关闭SELF HEAL

同步策略设置界面,勾选AUTO-SYNC和PRUNE,未勾选SELF HEAL

我手动使用kubectl将Deployment副本数修改为3。

kubectl -n yunsheng edit deploy myapp

修改后查看:

kubectl -n yunsheng get deploy

确认副本数已变为3。
kubectl get deploy 命令行输出,确认副本数为3

在ArgoCD界面上,应用状态显示为“OutOfSync”,但ArgoCD不会主动将其改回。因为SELF HEAL已关闭,ArgoCD允许集群状态暂时偏离Git声明,仅在下一次Git变更触发自动同步时,才会将副本数同步回Git定义的值(2)。

ArgoCD界面显示状态为OutOfSync,但未自我修复

总结

通过以上详细的实战验证,我们可以清晰地得出以下核心结论:

  • ENABLE AUTO-SYNC 是自动化同步的“总开关”。关闭它,所有同步(包括应用更新和资源清理)都需要手动触发。
  • PRUNE RESOURCESSELF HEAL 是两个高级自动化功能,但它们生效的前提都是必须打开 ENABLE AUTO-SYNC
    • PRUNE RESOURCES 负责清理Git中已删除的资源。
    • SELF HEAL 负责纠正对集群的直接操作,确保状态始终与Git声明一致。

理解并正确配置这些同步策略,是构建稳定、可靠的 GitOps 工作流的关键。它们共同保障了基础设施即代码(IaC)在 云原生 环境中的严肃性。希望本文的验证能帮助你更好地掌握ArgoCD的核心机制。如果你想了解更多关于 运维 自动化或CI/CD的实战内容,欢迎访问 云栈社区 进行交流和探讨。




上一篇:一个务实高效的Linux CLI工作流:如何通过减少决策摩擦实现2倍开发效率
下一篇:AI算力瓶颈与内存墙问题:新型计算架构如何定义文明级博弈
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 17:53 , Processed in 0.409968 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表