github.com/argoproj/argo-cd/v2@v2.10.9/docs/developer-guide/architecture/components.md (about)

     1  # Component Architecture
     2  
     3  Argo CD is designed with a component based architecture. The goal is
     4  to separate the responsibility in different deployable units in order
     5  to have the following benefits:
     6  
     7  - **Modularity**: Provides great level of flexibility. Components
     8    interact with each other via an interface. This means that as long
     9    as the interface contract is respected, a given component can be
    10    replaced without requiring the rest of the system to adapt. It is
    11    also possible to run the system without certain components if a
    12    specific group of functionality isn't desired.
    13  - **Single responsibility**: Helps to determine where the different
    14    types of functionality should be implemented which drives for
    15    better system cohesiveness.
    16  - **Reusability**: Clearly defined interfaces helps in functionality
    17    discoverability which benefits reusability of services.
    18  
    19  The default Argo CD installation is composed by different components
    20  and different Kubernetes controllers. The controllers aren't
    21  categorized as components as they have proprietary interfaces (CRDs)
    22  and therefore, miss the modular nature. There are more resources
    23  created while installing Argo CD (ConfigMaps, Services, etc), but for
    24  simplicity we are covering just the ones directly related with the
    25  componentized architecture.
    26  
    27  ## Dependencies
    28  
    29  The diagram below has represented all dependencies between the
    30  different components used by the default Argo CD installation:
    31  
    32  ![Components Diagram](../../assets/argocd-components.png)
    33  
    34  There are 4 logical layers represented in the diagram:
    35  
    36  - **UI**: This is the presentation layer. Users interact with Argo CD
    37    mainly by components from this layer.
    38  - **Application**: The capabilities required to support the components
    39    from the UI layer.
    40  - **Core**: The main Argo CD gitops functionality is implemented by
    41    components and Kubernetes controllers from the Core layer.
    42  - **Infra**: Represent the tools that Argo CD depends on as part of
    43    its infrastructure.
    44  
    45  The logical layers also help making the diagram easier to follow as
    46  dependencies are represented in a top-down relationship. This means
    47  that components from the top layers will be allowed to depend on any
    48  component from any of the bottom layers. However components from the
    49  bottom layers will never depend on any ones from upper layers.
    50  
    51  ## Responsibility
    52  
    53  Below you can refer to a brief description of Argo CD components and
    54  its main responsibilities.
    55  
    56  ### Webapp
    57  
    58  Argo CD ships with a powerful web interface that allows managing
    59  applications deployed in a given Kubernetes cluster.
    60  
    61  ### CLI
    62  
    63  Argo CD provides a CLI that can be used by users to interact with Argo
    64  CD API. The CLI can also be used for automation and scripting.
    65  
    66  ### API Server
    67  
    68  Defines the proprietary API exposed by Argo CD that powers the Webapp
    69  and the CLI functionalities.
    70  
    71  ### Application Controller
    72  
    73  The Application Controller is responsible for reconciling the
    74  Application resource in Kubernetes syncronizing the desired
    75  application state (provided in Git) with the live state (in
    76  Kubernetes). The Application Controller is also responsible for
    77  reconciling the Project resource.
    78  
    79  ### ApplicationSet Controller
    80  
    81  The ApplicationSet Controller is responsible for reconciling the
    82  ApplicationSet resource.
    83  
    84  ### Repo Server
    85  
    86  Repo Server plays an important role in Argo CD architecture as it is
    87  responsible for interacting with the Git repository to generate the
    88  desired state for all Kubernetes resources that belongs to a given
    89  application.
    90  
    91  ### Redis
    92  
    93  Redis is used by Argo CD to provide a cache layer reducing requests
    94  sent to the Kube API as well as to the Git provider. It also supports
    95  a few UI operations.
    96  
    97  ### Kube API
    98  
    99  Argo CD controllers will connect to the Kubernetes API in order to run
   100  the reconciliation loop.
   101  
   102  ### Git
   103  
   104  As a gitops tool Argo CD requires that the desired state of the
   105  Kubernetes resources to be provided in a Git repository.
   106  
   107  We use "git" here to stand in for an actual git repo, a Helm repo,
   108  or an OCI artifact repo. Argo CD supports all those options.
   109  
   110  ### Dex
   111  
   112  Argo CD relies on Dex to provide authentication with external OIDC
   113  providers. However other tools can be used instead of Dex. Check the
   114  [user management
   115  documentation](../../operator-manual/user-management/index.md) for
   116  more details.
   117  
   118