ArgoCD 同步配置

发布时间 2023-12-12 18:09:01作者: 小吉猫

自动同步策略

当 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/