自动同步策略
当 Argo CD 检测到 Git 中所需的清单与集群中的实时状态之间的差异时,它能够自动同步应用程序。自动同步的好处是 CI/CD 管道不再需要直接访问 Argo CD API 服务器来执行部署。相反,管道会提交并推送到 Git 存储库,并对跟踪 Git 存储库中的清单进行更改。Prune Resource
集群上某个资源在GitRepo中找不到对应的配置时,自动删除集群上的该资源。Self-Healing
因各种原因(如手动修改)集群上资源的实时状态而导致与GitRepo不匹配时,自动将实际状态与GitRepo的期望状态同步。自动同步时间配置
自动同步间隔由 argocd-cm ConfigMap 中的 timeout.reconciliation 值决定,默认为 180 秒(3 分钟)。dashboard 选项

同步选项
dashboard 选项

Prune
资源修剪。可选值:true,false。推荐值:true。配置示例
metadata:
annotations:
argocd.argoproj.io/sync-options: Prune=falseValidation
是否执行资源规范格式的校验,相当于“kubectl apply --validate={true|false}”,默认为true。配置示例
metadata:
annotations:
argocd.argoproj.io/sync-options: Validate=falseSkipDryRunOnMissingResource
跳过测试新的自定义类型的资源。配置示例
metadata:
annotations:
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=trueApplyOutOfSyncOnly
仅对那些处于OutOfSync状态的资源执行同步操作。配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- ApplyOutOfSyncOnly=truePrunePropagationPolicy
资源修剪传播策略,默认使用foreground(前台执行)策略,另外可选的策略还有background(后台执行)和orphan(在新的管理接口执行)。配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- PrunePropagationPolicy=foregroundPruneLast
在同步操作的最后再执行修剪操作,即其它资源已经部署且转为健康状态后再进行Prune。配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- PruneLast=trueor
metadata:
annotations:
argocd.argoproj.io/sync-options: PruneLast=trueReplace
对资源的修改,以replace方式进行,而非默认的apply。配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- Replace=trueor
metadata:
annotations:
argocd.argoproj.io/sync-options: Replace=trueFailOnSharedResource
默认的同步操作不会考虑GitRepo中定义的资源是否已经被其它Application所使用。将该选项设置为true,意味着在发现资源已经被其它Application所使用时,则将同步状态设置为fail。配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- FailOnSharedResource=trueRespectIgnoreDifferences
在同步阶段忽略期望状态的字段。配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
ignoreDifferences:
- group: "apps"
kind: "Deployment"
jsonPointers:
- /spec/replicas
syncPolicy:
syncOptions:
- RespectIgnoreDifferences=trueCreateNamespace
创建缺失的名称空间。配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
namespace: test
spec:
syncPolicy:
managedNamespaceMetadata:
labels: # The labels to set on the application namespace
any: label
you: like
annotations: # The annotations to set on the application namespace
the: same
applies: for
annotations: on-the-namespace
syncOptions:
- CreateNamespace=trueServerSideApply
资源太大,无法容纳允许的 262144 字节注释大小。在这种情况下,可以使用服务器端应用来避免此问题,因为在这种情况下不使用注释。
修补集群上未完全由 Argo CD 管理的现有资源。
使用更具声明性的方法,跟踪用户的字段管理,而不是用户上次应用的状态。ServerSideApply 还可以通过提供部分 yaml 来修补现有资源。例如,如果需要仅更新给定 Deployment 中的副本数量,则可以向 Argo CD 提供以下 yaml:apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- ServerSideApply=true
- Validate=falseDelete
对于某些资源,即使您的应用程序被删除,您可能也希望保留它们,例如。Persistent Volume Claims。在这种情况下,您可以使用以下注释来阻止在应用程序删除期间清理这些资源:配置上示例
metadata:
annotations:
argocd.argoproj.io/sync-options: Delete=false配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: ''
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
name: ''
namespace: ''
server: 'https://kubernetes.default.svc'
source:
path: ''
repoURL: ''
targetRevision: HEAD
directory:
recurse: false
jsonnet:
tlas: []
sources: []
project: ''
syncPolicy:
automated:
prune: false
selfHeal: false
syncOptions:
- Validate=true
- PruneLast=false
- RespectIgnoreDifferences=false
- CreateNamespace=true
- ApplyOutOfSyncOnly=true
- ServerSideApply=false参考文档
https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/










