Argo CD

Deploy Argo CD for declarative GitOps delivery to Kubernetes clusters you control, with SSO, project boundaries, high availability and recovery planned.

On this page

Where Argo CD fits in delivery

Argo CD is a declarative GitOps continuous delivery tool for Kubernetes, licensed under Apache 2.0 and part of the Argo project, a CNCF graduated project since December 2022. Its application controller compares live state with the desired state in Git, marks drift as OutOfSync and can correct it automatically or wait for an operator.

Argo CD does not build images or run tests. A CI system produces artifacts and updates manifests, Helm values or Kustomize overlays in Git, and Argo CD applies what Git describes. Once it is in place, permission to merge into a deployment repository is permission to change a cluster, so branch protection and path ownership become production change controls.

What runs inside an Argo CD installation

Most state lives in Kubernetes objects, which shapes scaling and recovery.

API server

Serves the UI, CLI and API, manages repository and cluster credentials, enforces RBAC and receives Git webhooks.

Repository server

Caches Git repositories and renders manifests with Helm, Kustomize or plain YAML. It holds no Kubernetes privileges, but large repositories drive its memory use.

Application controller

Compares live and desired state, runs syncs and hooks, and needs cluster-wide read access to every managed cluster. It is the component sharded at scale.

ApplicationSet controller

Generates Applications from templates using list, cluster, Git and matrix generators. Bundled since version 2.3.

Redis

A cache for rendered manifests and state that can be rebuilt without service disruption.

Dex and notifications

Dex is an optional identity broker for providers without OIDC. Notifications sends sync and health events to services such as Slack or email.

Choose a control topology

One instance manages many clusters, each registered as a cluster secret. Operators get one place for visibility and policy, but that instance holds credentials for every cluster, so its namespace and administrators need the strictest controls in the estate.

Define project boundaries before onboarding teams

AppProjects decide what each team may deploy, from where and to where. The built-in default project permits any repository, any cluster and all resource kinds.

ControlWhat it restrictsPractice
Source repositoriesWhich repositories a project's Applications may use.List specific repositories per team, and scope repository credentials to projects. Limit push access to admin-level project repositories.
DestinationsWhich clusters and namespaces Applications may target.Give each team its own namespaces. Never let a team project deploy into the Argo CD namespace, which grants admin access.
Resource kindsWhich cluster-scoped and namespaced kinds may be created.Deny cluster-scoped kinds by default and allow only what a team needs.
Project rolesPermissions for groups and automation tokens.Give CI an expiring JWT token that can sync one application without changing its source or destination.

Connect SSO and limit what Argo CD can change

Connect Argo CD directly to an OIDC provider such as Keycloak, Entra ID or Okta, or use the bundled Dex when you need to broker SAML, LDAP or GitHub organizations. Map group claims to roles in argocd-rbac-cm, set policy.default to the most restrictive workable role, and disable the built-in admin account once SSO works.

By default, the application controller and API server use a cluster-admin level role. Argo CD needs cluster-wide read access, but write access can be narrowed to specific namespaces and resource kinds through its ClusterRoles. Disable configuration management tools you do not use.

Keep secrets out of rendered manifests. Argo CD's documentation strongly recommends populating secrets on the destination cluster, for example with an external secrets operator, and cautions against injecting them during manifest generation. Set a minimum TLS version on the API server, and configure TLS for Redis explicitly, because Redis traffic is unencrypted by default.

Run it highly available and scale the controllers

Argo CD's HA manifests run more replicas and Redis in a sentinel topology, and need at least three nodes because of pod anti-affinity. Run three or more API server replicas for zero-downtime upgrades. Dex keeps data in memory, so multiple Dex replicas can disagree, which favors direct OIDC in larger installations.

Scale the repository server horizontally and cap concurrent rendering with its parallelism limit. For many clusters, shard the application controller by raising its replicas and setting ARGOCD_CONTROLLER_REPLICAS to match. In large monorepos, the manifest-generate-paths annotation limits which Applications a commit refreshes.

Plan recovery and upgrades

Projects, cluster secrets, repository credentials, RBAC and settings live as Kubernetes objects. Export them on a schedule with argocd admin export at the running version, pass the namespace explicitly, and protect the output as a secret. The export does not fail in the wrong namespace, so check it.

Argo CD operating ownership

The platform team runs Argo CD. Application teams own what their repositories declare. Security owns the boundaries between them.

Platform team

  • Monitor sync failures, reconciliation time and repository server memory.
  • Stay within the three supported minor versions.
  • Run scheduled exports and restore rehearsals.

Application teams

  • Own manifests, values and sync policies.
  • Resolve drift and failed hooks.
  • Request project changes through review.

Security

  • Review AppProject destinations, kinds and roles.
  • Rotate cluster and repository credentials.
  • Approve changes to Argo CD RBAC and ClusterRoles.

Change record

  • Keep Argo CD configuration in Git.
  • Record registered clusters and owners.
  • Log upgrades and the checks run.

Argo CD deployment questions

Should we enable automated sync everywhere?

Automated sync with self-heal suits environments where Git is the only accepted change path. For production, consider starting with manual sync or automated sync without pruning, then tighten as teams gain confidence.

Dex or direct OIDC?

Use direct OIDC when your provider returns group claims. Use Dex to broker SAML, LDAP or GitHub organizations. Test group mapping and logout with ordinary accounts either way.

How do CI pipelines trigger deployments?

Usually by committing a new image tag or values change to Git. If a pipeline must call Argo CD directly, give it a project role token limited to one application.

Scope and handover

DeployOpen designs the control topology with your platform team, installs Argo CD in HA form inside your clusters, integrates SSO and RBAC, defines AppProjects for the first teams, narrows cluster privileges and sets up a secrets pattern that keeps plaintext out of Git. We set up export-based backups, rehearse a restore, plan upgrades within the supported window, document the platform and can provide ongoing support.

Handover includes the topology decision, configuration in Git, the RBAC and group mapping, an AppProject template for new teams, the cluster inventory with credential rotation plan, the latest restore result and the current version with its support status.

Sources and further reading

More on Argo CD

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.