ArgoCD 同步配置
自动同步策略
当 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=false
Validation
是否执行资源规范格式的校验,相当于“kubectl apply --validate={true|false}”,默认为true。
配置示例
metadata:
annotations:
argocd.argoproj.io/sync-options: Validate=false
SkipDryRunOnMissingResource
跳过测试新的自定义类型的资源。
配置示例
metadata:
annotations:
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
ApplyOutOfSyncOnly
仅对那些处于OutOfSync状态的资源执行同步操作。
配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- ApplyOutOfSyncOnly=true
PrunePropagationPolicy
资源修剪传播策略,默认使用foreground(前台执行)策略,另外可选的策略还有background(后台执行)和orphan(在新的管理接口执行)。
配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- PrunePropagationPolicy=foreground
PruneLast
在同步操作的最后再执行修剪操作,即其它资源已经部署且转为健康状态后再进行Prune。
配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- PruneLast=true
or
metadata:
annotations:
argocd.argoproj.io/sync-options: PruneLast=true
Replace
对资源的修改,以replace方式进行,而非默认的apply。
配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- Replace=true
or
metadata:
annotations:
argocd.argoproj.io/sync-options: Replace=true
FailOnSharedResource
默认的同步操作不会考虑GitRepo中定义的资源是否已经被其它Application所使用。将该选项设置为true,意味着在发现资源已经被其它Application所使用时,则将同步状态设置为fail。
配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- FailOnSharedResource=true
RespectIgnoreDifferences
在同步阶段忽略期望状态的字段。
配置示例
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
ignoreDifferences:
- group: "apps"
kind: "Deployment"
jsonPointers:
- /spec/replicas
syncPolicy:
syncOptions:
- RespectIgnoreDifferences=true
CreateNamespace
创建缺失的名称空间。
配置示例
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=true
ServerSideApply
资源太大,无法容纳允许的 262144 字节注释大小。在这种情况下,可以使用服务器端应用来避免此问题,因为在这种情况下不使用注释。
修补集群上未完全由 Argo CD 管理的现有资源。
使用更具声明性的方法,跟踪用户的字段管理,而不是用户上次应用的状态。
ServerSideApply 还可以通过提供部分 yaml 来修补现有资源。例如,如果需要仅更新给定 Deployment 中的副本数量,则可以向 Argo CD 提供以下 yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- ServerSideApply=true
- Validate=false
Delete
对于某些资源,即使您的应用程序被删除,您可能也希望保留它们,例如。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/