github.com/argoproj/argo-cd/v2@v2.10.9/docs/user-guide/sync-waves.md (about)

     1  # Sync Phases and Waves
     2  
     3  >v1.1
     4  
     5  <iframe width="560" height="315" src="https://www.youtube.com/embed/zIHe3EVp528" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
     6  
     7  Argo CD executes a sync operation in a number of steps. At a high-level, there are three phases *pre-sync*, *sync* and *post-sync*.  
     8  
     9  Within each phase you can have one or more waves, that allows you to ensure certain resources are healthy before subsequent resources are synced.   
    10  
    11  ## How Do I Configure Phases?
    12  
    13  Pre-sync and post-sync can only contain hooks. Apply the hook annotation:
    14  
    15  ```yaml
    16  metadata:
    17    annotations:
    18      argocd.argoproj.io/hook: PreSync
    19  ```
    20  
    21  [Read more about hooks](resource_hooks.md).
    22  
    23  ## How Do I Configure Waves?
    24  
    25  Specify the wave using the following annotation:
    26  
    27  ```yaml
    28  metadata:
    29    annotations:
    30      argocd.argoproj.io/sync-wave: "5"
    31  ```
    32  
    33  Hooks and resources are assigned to wave zero by default. The wave can be negative, so you can create a wave that runs before all other resources.
    34  
    35  ## How Does It Work?
    36  
    37  When Argo CD starts a sync, it orders the resources in the following precedence:
    38  
    39  * The phase
    40  * The wave they are in (lower values first)
    41  * By kind (e.g. [namespaces first and then other Kubernetes resources, followed by custom resources](https://github.com/argoproj/gitops-engine/blob/bc9ce5764fa306f58cf59199a94f6c968c775a2d/pkg/sync/sync_tasks.go#L27-L66))
    42  * By name 
    43  
    44  It then determines the number of the next wave to apply. This is the first number where any resource is out-of-sync or unhealthy.
    45   
    46  It applies resources in that wave. 
    47  
    48  It repeats this process until all phases and waves are in-sync and healthy.
    49  
    50  Because an application can have resources that are unhealthy in the first wave, it may be that the app can never get to healthy.
    51  
    52  Note that there's currently a delay between each sync wave in order give other controllers a chance to react to the spec change
    53  that we just applied. This also prevent Argo CD from assessing resource health too quickly (against the stale object), causing
    54  hooks to fire prematurely. The current delay between each sync wave is 2 seconds and can be configured via environment
    55  variable `ARGOCD_SYNC_WAVE_DELAY`.