{"id":321,"date":"2026-03-09T07:44:10","date_gmt":"2026-03-09T07:44:10","guid":{"rendered":"https:\/\/blog.ngocha.biz\/?p=321"},"modified":"2026-03-09T07:44:10","modified_gmt":"2026-03-09T07:44:10","slug":"argo-cd-architecture","status":"publish","type":"post","link":"https:\/\/blog.ngocha.biz\/?p=321","title":{"rendered":"Argo CD Architecture: A Complete Guide"},"content":{"rendered":"<p>Argo CD has become the widely used GitOps tool for Kubernetes. But here is the thing. Knowing how to use it and knowing how it works are two very different things.<\/p>\n<p>By the end of this blog, you will have the clear mental model of the following.<\/p>\n<ul>\n<li>Every core component in Argo CD and what it actually does<\/li>\n<li>How components communicate and hand off work to each other<\/li>\n<li>How Argo CD stores data and how to back it up properly<\/li>\n<li>How to run Argo CD in high availability mode<\/li>\n<li>Security features you should know and use<\/li>\n<li>How to monitor Argo CD with Prometheus and Grafana<\/li>\n<\/ul>\n<p>Let&#8217;s get started.<\/p>\n<h2 id=\"argo-cd-architecture-overview\">Argo CD Architecture Overview<\/h2>\n<p>Argo CD has the following seven key components.<\/p>\n<ol>\n<li>Argocd Server (API Server)<\/li>\n<li>Application Controller<\/li>\n<li>ApplicationSet Controller<\/li>\n<li>Repository Server<\/li>\n<li>Dex (optional SSO)<\/li>\n<li>Redis<\/li>\n<li>Notification Controller<\/li>\n<\/ol>\n<p>The following diagram shows you the overall architecture of Argocd.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/03\/image--1-.webp\" class=\"kg-image\" alt=\"argocd architecture\" loading=\"lazy\" width=\"2000\" height=\"2038\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/03\/image--1-.webp 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2026\/03\/image--1-.webp 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2026\/03\/image--1-.webp 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w2400\/2026\/03\/image--1-.webp 2400w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>The diagram shown only three components of Argo CD, but there are also other components that work with these components.<\/p>\n<p>In the next section, we will look into each component in detail.<\/p>\n<h2 id=\"component-deep-dive\">Component Deep Dive<\/h2>\n<p>Now lets look at each component in detail.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\">The components are deployed as a deployment except the Application Controller, it is deployed as a StateFulSet (An important distinction we will come back to when discussing scaling).<\/div>\n<\/div>\n<h3 id=\"argo-cd-server\">Argo CD Server<\/h3>\n<p>This is the API server of Argo CD that exposes Argo CD REST APIs, which we use to interact with <a href=\"https:\/\/devopscube.com\/setup-argocd-image-updater\/\" rel=\"noreferrer\">Argo CD<\/a> through UI, CLI, and CI\/CD tools.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture6.2.png\" class=\"kg-image\" alt=\"Argo CD Server\" loading=\"lazy\" width=\"1336\" height=\"508\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/01\/architecture6.2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2026\/01\/architecture6.2.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture6.2.png 1336w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>By default, the Argo CD server saves and manages the user <strong>credentials in a Kubernetes secret<\/strong>, the user account configuration and permissions in a Kubernetes configmap.<\/p>\n<p>Also, this is the component that <strong>saves the data of custom resources like Application, ApplicationSet, and Projects in ETCD<\/strong>. This is important for backup and recovery, which we will cover later.<\/p>\n<h3 id=\"argo-cd-application-controller\">Argo CD Application Controller<\/h3>\n<p>Application Controller is the core component of <a href=\"https:\/\/devopscube.com\/configure-multiple-kubernetes-clusters-argo-cd\/\" rel=\"noreferrer\">Argo CD<\/a> and a Kubernetes controller, which deploys and manages the application.<\/p>\n<p>Its key roles are to deploy and continuously monitor the Applications created by it and compare their live state with the desired state in <a href=\"https:\/\/devopscube.com\/git-basics-every-developer-and-administrator-should-know\/\">Git<\/a>.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\">Every deployment done by Argo CD is referred to as an Application, it can be a tool, an application, or any deployment.<\/div>\n<\/div>\n<p>Given below is a simple image that shows how Argo CD Application Controller reads and creates applications.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture5.2.png\" class=\"kg-image\" alt=\"Argo CD Application Controller\" loading=\"lazy\" width=\"1118\" height=\"942\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/01\/architecture5.2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2026\/01\/architecture5.2.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture5.2.png 1118w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<h3 id=\"argo-cd-applicationset-controller\">Argo CD ApplicationSet Controller<\/h3>\n<p>ApplicationSet Controller is a Controller to manage ApplicationSet custom resource that helps you to deploy multiple applications using a single custom resource.<\/p>\n<p>When an ApplicationSet custom resource is created, the ApplicationSet Controller service reads it and creates multiple Application custom resources.<\/p>\n<p>Then the Application Controller reads the custom resources to deploy applications.<\/p>\n<p>This is helpful in deploying the same application to multiple environments and deploying all services of an application using a single custom resource.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture4.2.png\" class=\"kg-image\" alt=\"Argo CD ApplicationSet Controller\" loading=\"lazy\" width=\"1724\" height=\"1382\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/01\/architecture4.2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2026\/01\/architecture4.2.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2026\/01\/architecture4.2.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture4.2.png 1724w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<h3 id=\"argo-cd-repo-server\">Argo CD Repo Server<\/h3>\n<p>The repo server is the service that interacts with Git repositories and pulls the templates from the Git repository for the application deployment.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/03\/07.png\" class=\"kg-image\" alt=\"Argo CD Repo Server\" loading=\"lazy\" width=\"998\" height=\"862\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/03\/07.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/03\/07.png 998w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>When the Application Controller requests a manifest to create an application, the Repo server clones it locally and <strong>saves the cache in Redis for 24 hours.<\/strong><\/p>\n<p>The Repo server polls Git every 3 minutes by default to check for new changes, and you can also configure a webhook for Git.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\">If webhook is configured, Git sends webhook POST request to notify a new change is made.<\/div>\n<\/div>\n<p>The templates from Git can be in formats like,<\/p>\n<ul>\n<li>Plain manifest files, <\/li>\n<li><a href=\"https:\/\/devopscube.com\/create-helm-chart\/\" rel=\"noreferrer\">Helm charts<\/a>, and <\/li>\n<li><a href=\"https:\/\/devopscube.com\/kustomize-tutorial\/\" rel=\"noreferrer\">Kustomize<\/a>.<\/li>\n<\/ul>\n<h3 id=\"argo-cd-dex-server\">Argo CD Dex Server<\/h3>\n<p>Dex server is an <a href=\"https:\/\/devopscube.com\/github-actions-oidc-aws\/\" rel=\"noreferrer\">OIDC<\/a> (OpenID Connect) provider for Argo CD, which helps to authenticate and authorize with external identity providers.<\/p>\n<p>It supports a wide range of OIDC providers like,<\/p>\n<ul>\n<li>AWS SSO<\/li>\n<li>Okta<\/li>\n<li>Google<\/li>\n<li>Microsoft (Azure AD)<\/li>\n<li>GitHub, etc.<\/li>\n<\/ul>\n<p><strong>In enterprise environments<\/strong>, you usually have a centralized identity manager. If it&#8217;s a supported OIDC provider, you can configure it to Argo CD, and you can allow people in a certain group to access Argo CD.<\/p>\n<p>In Argo CD, not allowing everyone to do anything is a best practice. You can use <strong>OIDC combined with RBAC <\/strong>to limit their permissions. <\/p>\n<p>For example, <\/p>\n<ul>\n<li>DevOps engineers can create, delete, and sync applications <\/li>\n<li>Developers can only access the UI to view the application and its logs.<\/li>\n<\/ul>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture8.3.png\" class=\"kg-image\" alt=\"Argo CD Dex Server\" loading=\"lazy\" width=\"1812\" height=\"996\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/01\/architecture8.3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2026\/01\/architecture8.3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1600\/2026\/01\/architecture8.3.png 1600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture8.3.png 1812w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<h3 id=\"redis\">Redis<\/h3>\n<p>Redis is used in Argo CD for caching, which makes the request fast and reduces the stress on other components by caching repeated API calls.<\/p>\n<p>As we see in the Repo server, the manifest cloned by the repo server during application deployment will be <strong>cached for 24 hrs.<\/strong> And it also caches the information of the resource Argo CD creates, caches the application state like its status, sync state.<\/p>\n<p>It <strong>does not store any credentials<\/strong> or configuration temporarily, they are stored in Kubernetes secrets and configmap.<\/p>\n<p>With Redis, there will be low resource usage, syncing applications get faster, and frequent requests to Git will be reduced if the cache is present.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture9.2.png\" class=\"kg-image\" alt=\"Redis in argo cd\" loading=\"lazy\" width=\"1512\" height=\"998\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/01\/architecture9.2.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2026\/01\/architecture9.2.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture9.2.png 1512w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<h3 id=\"argo-cd-notification-controller\">Argo CD Notification Controller<\/h3>\n<p>The Notification Controller monitors the Application custom resource for new events (changes) and s<strong>ends them as notifications<\/strong>, such as emails and Slack messages.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture10.3.png\" class=\"kg-image\" alt=\"Argo CD Notification Controller\" loading=\"lazy\" width=\"1368\" height=\"948\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2026\/01\/architecture10.3.png 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w1000\/2026\/01\/architecture10.3.png 1000w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2026\/01\/architecture10.3.png 1368w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Argo CD events such as changes in sync status, health status, when a new version is deployed, etc., can be configured to send notifications. And, you can use custom messages or templates to send in the notifications.<\/p>\n<p>Argo CD supports a wide range of notification services like ,<\/p>\n<ul>\n<li>AWS SQS, <\/li>\n<li>Slack, <\/li>\n<li>Email, <\/li>\n<li>Microsoft Teams<\/li>\n<li>PagerDuty <\/li>\n<li>And more..<\/li>\n<\/ul>\n<p>Now that you have an understanding of each component, let&#8217;s see how Argo CD saves its data.<\/p>\n<h2 id=\"argo-cd-storage-and-backup\">Argo CD Storage and Backup<\/h2>\n<p>Unlike other tools, Argo CD does not store its data in PV for persistence.<\/p>\n<p>It has a Redis database, but it is only for caching. The actual configuration data is stored as native <a href=\"https:\/\/devopscube.com\/kubernetes-objects-resources\/\" rel=\"noreferrer\">Kubernetes objects<\/a>.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/11\/1756465118036.jpeg\" class=\"kg-image\" alt=\"argocd storage\" loading=\"lazy\" width=\"800\" height=\"776\" srcset=\"https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/size\/w600\/2025\/11\/1756465118036.jpeg 600w, https:\/\/storage.ghost.io\/c\/5f\/2f\/5f2f4d20-2abf-4534-8d40-7aa233aedd43\/content\/images\/2025\/11\/1756465118036.jpeg 800w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>The CRDs of Argo CD store data related to applications and projects.<\/p>\n<p>The configmaps in the argocd namespace contain general server configurations such as UI settings, <a href=\"https:\/\/devopscube.com\/create-a-new-account-in-argo-cd\/\" rel=\"noreferrer\">RBAC<\/a>, etc.<\/p>\n<p>The secrets in the argocd namespace store all credentials, such as account username and password, cluster credentials, and all other authentication credentials.<\/p>\n<p>You can change the configurations on the configmap to make the changes, or when you change settings by CLI or UI, Argo CD will update the related configmap automatically.<\/p>\n<p>If you lose this data, recreating the configs manually can be time consuming.<\/p>\n<p>To perform a backup, you just need to back up the Argo CD namespace and the related CRDs.<\/p>\n<p>There are two main backup options:<\/p>\n<ul>\n<li><strong>Option 1:<\/strong> Using argocd admin &#8211; It&#8217;s a built-in method, which is good for quick backups.<\/li>\n<li><strong>Option 2:<\/strong> Using <a href=\"https:\/\/devopscube.com\/backup-and-restore-eks-cluster-velero\/\" rel=\"noreferrer\">Velero<\/a> (Recommended for Production) Velero performs full namespace-level backups including all Secrets, ConfigMaps, and CRDs. This is the recommended approach for disaster recovery, as it captures everything and supports scheduled, automated backups.<\/li>\n<\/ul>\n<h2 id=\"argo-cd-high-availability-scaling\">Argo CD High Availability &amp; Scaling<\/h2>\n<p>A single-replica Argo CD setup is a single point of failure. For production, you need to deploy Argo CD in high availability mode.<\/p>\n<h3 id=\"scaling-the-api-and-repo-servers\">Scaling the API and Repo Servers<\/h3>\n<p>Argo CD provides a separate high availability setup manifest to make the setup simple.<\/p>\n<p>Instead of relying on 1 replica, you can scale the replicas so even if one replica goes down, the other keeps the processes running.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\">If you are setting up Argo HA, make sure you have at least 3 nodes because the HA configuration <b><strong style=\"white-space: pre-wrap;\">has a pod anti-affinity rule<\/strong><\/b> that prevents multiple replicas to schedule on same node.<\/div>\n<\/div>\n<p>A single node cluster will not work for Argo CD HA setup.<\/p>\n<h3 id=\"redis-ha-with-sentinel\">Redis HA with Sentinel<\/h3>\n<p>In the HA setup, the pods Argocd server, and repo server are scaled to a minimum of 2 replicas, and Redis will use HA mode with 3 sentinels.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\">Min 3 replicas are required because sentinals uses quorum for leader selection, when one is down.<\/div>\n<\/div>\n<h3 id=\"application-controller-sharding\">Application Controller Sharding<\/h3>\n<p>Since Application Controller is deployed as a StatefulSet, even in an HA setup, the replicas will be 1 by default.<\/p>\n<p>But if you are managing more cluster using Argo CD, the Application Controller will consume more memory.<\/p>\n<p>In such a case, you can increase the replica of the Application Controller and enable Sharding to split workloads among the replicas.<\/p>\n<p>For example, there are 30 clusters managed by a single Application Controller, by enabling Sharding and increasing the replicas to 3, each replica will manage 10 clusters each.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\">While configuring, the number of shard value count should match the Application Controller replica count. <\/div>\n<\/div>\n<p>By default, it uses a hash-based shard algorithm, but it can be modified to use round-robin or other custom algorithms.<\/p>\n<h2 id=\"argo-cd-security\">Argo CD Security<\/h2>\n<p>Given below are some of the security features in Argo CD<\/p>\n<h3 id=\"authorization\">Authorization<\/h3>\n<p>When setting up Argo CD, there will be only one user present which is an admin user.<\/p>\n<p>The admin user gets a random password to log in to Argo CD, and you need to update the password once you log in.<\/p>\n<p>The updated password is stored in <code>argocd-secret<\/code> secret as an encrypted bcrypt hash <code>($2a$10$)<\/code>, not just the password of the user, but also all the credentials are saved as Kubernetes secrets.<\/p>\n<p>For example, even though the repo-server is responsible for getting the manifest from Git, the Git authentication credentials are saved as Kubernetes secrets.<\/p>\n<h3 id=\"tls-communication\">TLS Communication<\/h3>\n<p>All the communication in Argo CD happens over TLS.<\/p>\n<p>Even the service-to-service communication between the components <code>argocd-server, repo-server, and application-controller<\/code> are on TLS.<\/p>\n<p>We can also set up TLS communication for Redis, but by default, the Redis communication is unencrypted.<\/p>\n<h3 id=\"rbac\">RBAC<\/h3>\n<p>By default, Argo CD has two roles, readonly and admin.<\/p>\n<p>But you can create custom roles for users to limit their permissions, such as watch, deploy, update, delete, etc.<\/p>\n<p>You can even limit the namespace permission for argocd-server and application-controller by modifying their cluster roles. This will prevent Argo CD from accessing sensitive information in other applications that are not deployed by Argo CD.<\/p>\n<h2 id=\"monitoring-argo-cd\">Monitoring Argo CD<\/h2>\n<p>The status and health of the application created by Argo CD is not monitored from Argo CD, you have to configure Prometheus and Grafana for it.<\/p>\n<div class=\"kg-card kg-callout-card kg-callout-card-blue\">\n<div class=\"kg-callout-emoji\">\ud83d\udca1<\/div>\n<div class=\"kg-callout-text\">By default, the Argo CD components do not expose metrics, you need to enable it for each component while deployment or update the configuration if Argo CD is running.<\/div>\n<\/div>\n<p>All components are exposed on <code>\/metrics<\/code> endpoint and the port used by each component is given in the table below.<\/p>\n<p><!--kg-card-begin: html--><\/p>\n<table class=\"auto-wrap\" style=\"width:100% !important; max-width:100% !important; border-collapse:collapse; margin-top:12px; display:table; table-layout:fixed;\">\n<thead>\n<tr>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">Application Controller<\/td>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">8082<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">API Server<\/td>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">8083<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">Repo Server<\/td>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">8084<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">ApplicationSet Controller<\/td>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">8080<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">Notification Controller<\/td>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">9001<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">Dex Server<\/td>\n<td style=\"border: 1px solid #ccc; padding: 12px;\">5558<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><!--kg-card-end: html--><\/p>\n<p>The metrics, such as check application health, sync status, git request, and number of clusters managed, are some of the key metrics monitored.<\/p>\n<p>The Argo CD community <strong>maintains a set of Grafana dashboards<\/strong> you can import directly. Pair these with <strong>alerting rules on sync failure rate and controller queue depth<\/strong> to catch problems before they become incidents.<\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>In summary, we have learned about the components of Argo CD, how they work, storage, High Availability security features, and monitoring of Argo CD.<\/p>\n<p>As a DevOps engineer or SRE, understanding the core architecture of Argo CD helps you in troubleshooting, scaling, and security.<\/p>\n<p>If you have any questions, drop a comment below.<\/p>\n<hr>\n<p><strong>Ngu\u1ed3n:<\/strong> <a href=\"https:\/\/devopscube.com\/argo-cd-architecture\/\" target=\"_blank\" rel=\"noopener noreferrer\">Argo CD Architecture: A Complete Guide \u2014 DevOpsCube<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Source: https:\/\/devopscube.com\/argo-cd-architecture\/<\/p>\n","protected":false},"author":1,"featured_media":322,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-321","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=321"}],"version-history":[{"count":0,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/posts\/321\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=\/wp\/v2\/media\/322"}],"wp:attachment":[{"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ngocha.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}