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