Production Argo CD with the HA manifests

The HA manifests change replica counts, scheduling rules and the Redis layout compared with the default install. This page explains what changes, what your cluster must provide, and what to confirm before you run it in production.

On this page

Why a production Argo CD install needs the HA manifests

The HA manifests are the upstream starting point for running Argo CD components with redundancy, and they are not a complete production design. When a platform team relies on Argo CD to decide what runs in production clusters, a single pod or node failure can stop deliveries, so the question is whether the installation survives routine failures without someone intervening. The HA manifests change the default layout to run multiple replicas of the components, but the surrounding decisions about node capacity, storage, network paths and cluster access are still yours to make and document.

Argo CD is largely stateless. Its data lives in Kubernetes objects such as Applications, AppProjects and repository Secrets, and Redis is a disposable cache that Argo CD can rebuild. That shifts recovery work away from restoring a database and toward the design of the cluster that hosts Argo CD and the Git repositories it reads. Before you plan backups, confirm what the control plane of that cluster can restore, how quickly you can recreate Argo CD from Git and exports, and who holds the access needed to do it.

Two gating questions should be settled before anyone copies the manifests. First, the HA manifests need at least three nodes because of pod anti-affinity rules, so confirm that your target cluster has three schedulable nodes that can be spread across failure domains, and that your capacity plan allows for losing one. Second, the HA documentation states that IPv6-only clusters are not supported, so verify the address families of the cluster before you start. Answering these early avoids discovering a blocked rollout during a change window, and the Argo CD high availability documentation is the source to check against your own cluster.

What the HA manifests change from the default install

The HA manifests change how many replicas run for each Argo CD component, where those pods land, and how Redis fails over. Read each card as a question to answer for your cluster: what gets redundant, what still has a single point of failure, and what you must set yourself. Exact replica counts and Sentinel settings belong to the high availability page for the release you deploy.

API server replicas

The API server serves the web UI, the CLI and the gRPC and REST calls that automation makes. The HA manifests run more than one API server replica behind a Service, so a pod restart does not take the UI or CLI offline. What stays the same is that login, sessions and the admin account still depend on the configuration in the argocd-cm and argocd-secret objects, which every replica shares. Confirm the replica count and any login rate limit settings on the high availability page for your release before you size ingress and TLS termination.

Repo-server replicas and Git access

The repo-server clones Git repositories and runs Helm and Kustomize to render manifests, so it is the component most exposed to slow or failing renders. The HA manifests run multiple repo-server replicas, which spreads that work and keeps rendering available if one pod is busy or restarting. What does not change is that every replica needs network access to your Git hosts and Helm registries, and rendering still runs tools on repository content. Check the replica count and the tool timeout settings for your release.

Application controller and sharding

The application controller reconciles live cluster state against Git and is the component that runs out of capacity first as clusters grow. The HA manifests can run it with more than one replica, and the high availability documentation describes sharding the controller so each replica owns a subset of clusters. Replicas do not simply add throughput for one cluster: each managed cluster is handled by one shard. Confirm the sharding mode your release supports and how a cluster is assigned before you rely on replicas for capacity.

Redis as a disposable cache

Redis holds cached application state and does not hold the source of truth, which lives in Git and in Kubernetes objects. The HA manifests move Redis to a highly available layout with Sentinels so a primary failure triggers a failover instead of a cache outage. Losing the cache forces a rebuild and slower first syncs, not data loss. Confirm the Sentinel quorum, the number of Redis replicas and the Service name your applications use against the high availability page for your release.

Dex or the external OIDC setup

Login depends on either the bundled Dex or a direct OIDC connection to Okta, Keycloak, Microsoft or another provider. The HA manifests make the Argo CD side of the login path redundant, but Dex and your identity provider are separate systems with their own availability. If you run bundled Dex, check its replica settings in the HA manifests. If you connect directly to an external provider, the identity provider's uptime becomes the login ceiling for every user, so plan a break-glass path before you disable the admin account.

Pod anti-affinity and node count

The HA manifests apply pod anti-affinity rules so replicas of the same component do not share a node. The high availability documentation states that these rules need at least three nodes, so a two-node cluster cannot schedule the HA layout as written. Spreading pods helps only if your nodes sit in separate failure domains. Confirm the topology labels your cluster uses, and check that your cluster does not run IPv6-only, which the same documentation says is not supported.

Choosing between the default install, the HA manifests and a sharded controller

This table compares three Argo CD layouts: the default manifests, the HA manifests on one cluster, and HA combined with application controller sharding. Read each row as a decision: find the layout that matches your fleet size and availability needs, then check what it requires from the cluster and what it costs to run.

LayoutWhen it fitsWhat it requiresMain trade-off
Default manifestsEvaluation, a lab, or a small non-critical deployment where a short outage is acceptableA single cluster with standard capacity, and no need to survive a node lossComponents run as single replicas, so a node failure stops deployments until the pods reschedule
HA manifestsOne production cluster that must keep syncing through a node lossAt least three nodes, since the HA manifests use pod anti-affinity rules, and an IPv6-only cluster is not supportedMore pods and Redis Sentinels to run, with extra node capacity and upgrade steps to plan
HA plus controller shardingLarge fleets with many applications or clusters that load one application controller heavilyHA layout plus a plan to assign clusters to controller shards and to watch their balanceHighest operational complexity, since shard assignment and balance must be monitored and adjusted over time
Who decidesPlatform lead with the application and cluster inventoryNode count, cluster inventory and an upgrade window agreed up frontConfirm the replica and sharding settings for your Argo CD version in the official HA documentation before you size nodes

Why three nodes are a hard requirement for HA Argo CD

The HA manifests need at least three nodes because they use pod anti-affinity rules to spread each replicated component across different nodes. The Argo CD high availability documentation states this requirement directly. Replicas of the API server, repo-server, application controller and the Redis HA components are meant to land on separate nodes, so that losing one node does not take out every copy of a component. With only two nodes, the scheduler cannot place all the required replicas under those rules, so some pods stay in Pending and the installation looks healthy only until a node fails. With a single node, the anti-affinity rules cannot be satisfied at all, and the cluster offers no node-level redundancy for Argo CD.

The failure is easy to miss in managed clusters. Node pools with autoscaling may start small, and a pool that scales to zero or to two nodes during quiet periods will leave HA replicas unschedulable exactly when a rollout or a node replacement needs them. Taints on dedicated node pools can also block Argo CD pods unless matching tolerations are set, and a pool limited to a single availability zone defeats the purpose of spreading replicas. Resource requests can be a hidden blocker too: if the nodes are already reserved by other workloads, the replicas will be Pending even when the node count looks correct. Before installing, confirm that the target cluster has at least three schedulable nodes in the pools Argo CD will use, that those nodes carry no taints the manifests lack tolerations for, and that the spread across failure domains matches what your availability requirements need.

Treat the node check as part of the acceptance test, not as a one-time setup step. After installation, run kubectl get pods -n argocd -o wide and confirm that replicas of each component sit on different nodes and that none remain Pending. Then drain one node in a non-production cluster and confirm that the UI, CLI and syncs keep working while the replacements schedule. Ask your platform team or managed-service provider to confirm the node pool minimums, autoscaler settings and any admission policies that could block scheduling, since those settings change outside the Argo CD manifests.

Installing the HA manifests in a production cluster

This sequence takes a cluster from a node check through a verified HA Argo CD install, with pod placement, Redis and Sentinel health and SSO confirmed before the built-in admin user is turned off.

  1. Confirm nodes and cluster networking

    The platform team confirms that the target cluster has at least three schedulable nodes, because the HA manifests use pod anti-affinity rules that need three nodes to place replicas. Also confirm the cluster is not IPv6-only, since the HA documentation says IPv6-only clusters are not supported. Run kubectl get nodes -o wide and check that three or more nodes show Ready, that none carry a taint that blocks the Argo CD workloads, and that the node addresses include IPv4. The step is done when the list shows at least three Ready nodes that can take the workloads and you have written down the cluster name and node count for the change record.

  2. Select the Argo CD release and check support

    Choose the minor release you will install and confirm it is within the window the project supports with patch releases. The release process page says only the three most recent minor versions receive patch releases and that a minor release ships every three months. Compare your chosen version with the latest patch releases on the Argo CD GitHub releases page, and pin the exact patch version in your change record. Ask your vendor or DeployOpen engineer to confirm the upgrade path if you are replacing an older installation. The step is done when the target version is named, dated and marked as inside the patch support window.

  3. Apply the HA manifests for that release

    Apply the high availability manifests that match the pinned release, using the paths listed in the official HA documentation rather than the default install manifests. Keep the manifests in Git so the exact source is recorded and can be reapplied. Namespace, CRDs and the HA components (application controller, API server, repo-server, Redis HA and Sentinels) should be created in one pass. Check the apply output for errors and confirm the Argo CD custom resource definitions are present with kubectl get crd | grep argoproj.io. The step is done when the apply completes without errors and the release version reported by the API server matches the pinned version.

  4. Verify pod placement across nodes

    Confirm that each replicated component runs on different nodes so one node failure does not take out a whole tier. List the pods with kubectl get pods -n argocd -o wide and check the NODE column for the application controller, API server, repo-server, Redis and Sentinel pods. Each component should have its replicas spread across at least three nodes, with no two replicas of the same component sharing a node. If a replica is pending, describe the pod and read the scheduling events, which usually point to anti-affinity or resource limits. The step is done when every replicated component shows Running pods on distinct nodes.

  5. Confirm Redis and Sentinel health

    Check that the Redis HA layout has a primary and replicas, and that the Sentinel pods agree on which Redis instance is primary. List pods with kubectl get pods -n argocd filtered to the Redis and Sentinel workloads, then check their logs or the Sentinel status for the current primary and quorum. Argo CD treats Redis as a disposable cache, so a failover should not lose application state, but you still need to see that failover completes. Ask your team to confirm how the Sentinel status is read in your release, because the output format depends on the version. The step is done when the Sentinels report a single primary, the replicas are attached, and the application controller can reach Redis.

  6. Log in and configure SSO

    Reach the Argo CD UI or CLI through its ingress, log in with the initial admin account, and configure SSO through the bundled Dex connectors or a direct OIDC provider such as Okta, Auth0, Microsoft, Keycloak or Google Workspace. The user management documentation describes both options. Map identity provider groups to Argo CD roles, then sign in with a named user from each group and confirm the expected permissions. Store the initial admin password in your secrets process and record who has access to it. The step is done when at least one SSO user has logged in and the role assignment behaves as designed.

  7. Disable the built-in admin user

    Once SSO or local users work, set admin.enabled to false in the argocd-cm ConfigMap, as the user management documentation recommends. Apply the change through your Git-managed configuration, then confirm the change took effect by attempting an admin login, which should be refused, and by checking that SSO users still sign in and can perform their assigned tasks. Remove the initial admin secret only after you have confirmed a recovery path, such as a documented break-glass process. The step is done when the admin login is refused, SSO users still have access and the change is recorded in version control.

Adjusting the HA install for your environment

On a managed Kubernetes service, the main risk is that autoscaling node pools shrink below the number of nodes the anti-affinity rules need. The HA manifests require at least three nodes, so the node pool that hosts Argo CD must keep a minimum size that the autoscaler cannot go under, and it should span failure domains where the provider offers them.

  • Node pool minimums: Set the minimum node count of the pool that runs Argo CD to at least three, and confirm the autoscaler respects that floor during scale-down.
  • Taints and tolerations: If you reserve a pool for platform workloads, add a toleration to the Argo CD pods and confirm the pool carries the matching taint, or the pods will stay pending.
  • Zone spread: Ask whether the provider places nodes across zones in a region and whether the pool can be pinned to those zones, so a single zone outage does not remove a majority of replicas.
  • Storage classes: Argo CD keeps its state in Kubernetes objects, so most managed installs need no persistent volume changes. Confirm this against your own Redis and add-on choices.
  • Upgrades: Ask the provider how node upgrades drain nodes and whether a pod disruption budget is honored during the drain.

Before go-live, confirm the node pool minimums, zone behavior and drain rules with your cloud provider's documentation and your support contact.

Security controls that stay in place after the HA install

Moving to the HA manifests adds replicas and endpoints, but it does not change how Argo CD authenticates, encrypts or handles credentials. The cards below cover the controls the security documentation describes and the review steps that keep them intact after the install.

JWT-only API authentication

Argo CD authenticates API requests only with JSON Web Tokens, so every UI, CLI and automation call depends on how those tokens are issued, expired and revoked. Confirm which identity path issues tokens for your users and pipelines, and check that the admin login is turned off once SSO works. With several API server replicas, verify that every replica validates tokens the same way behind your load balancer.

TLS between components

Argo CD uses TLS for traffic, including traffic between its own components. The HA layout adds more connections, such as API server to repo-server, controller to Redis and Sentinel traffic, so each path should be checked rather than assumed. Confirm certificate issuance, rotation and trust bundles for every internal connection in your environment, and test that a replica restart does not break a connection.

Credential redaction in responses and logs

Cluster, Git and OAuth2 credentials are redacted from API responses and logs. Redaction protects the common leak paths, but it does not cover values you paste into annotations, custom plugins or notification templates. Review log shipping and the access your team has to Argo CD logs, and search a test deployment's logs for known test secrets after each upgrade.

Repo-server exposure to untrusted content

The repo-server runs Helm and Kustomize on repository content, so a malicious chart, Kustomization or out-of-tree file reference can reach the cluster through manifest generation. Limit which repositories are registered, restrict the sources each project may use, and review which files and paths a Kustomize or Helm build can read. Scale of HA replicas does not reduce this risk, so treat the repo-server as the highest-review component.

Admin user and HA endpoint exposure

The built-in admin user should be used only for initial setup, then disabled with admin.enabled set to false once local users or SSO are configured. Each HA replica also adds an endpoint, so the ingress, load balancer and network policies that front the API server need the same review as the single-replica install. Confirm which namespaces and networks can reach each service, and test that access rules still hold after a scale change.

Questions teams ask before running HA Argo CD in production

How much effort does an HA Argo CD installation take?

The effort depends less on the manifests than on what surrounds them. Applying the HA manifests is quick once the cluster is ready, but the work that takes time is confirming the cluster has at least three schedulable nodes for the pod anti-affinity rules, deciding how SSO and RBAC will map to your groups, setting up network access and TLS for the API server, and testing failover of the components and Redis. Ask any partner to split its quote into these parts so you can see which ones your team already owns.

Can a platform team install HA Argo CD without outside help?

Yes, many platform teams do, provided they have Kubernetes operations experience and time to test. The manifests are documented in the Argo CD high availability guide, and the main risks are configuration gaps: IPv6-only clusters are not supported, Redis HA with Sentinels needs careful testing, and identity settings from the upgrade notes change between versions. Outside help is most useful for the design decisions, a rehearsed failover, and a written runbook your on-call staff can follow.

What do we need to provide before the work starts?

Expect to provide access that is scoped to the work, not broad administrator rights. Typical inputs include:

  • Kubernetes cluster access and node capacity, with confirmation of the three-node minimum
  • Git hosting details, repository layout and credentials for the Git server
  • Identity provider details, such as an OIDC client or the group claims you want mapped to Argo CD roles
  • Network rules, DNS names, certificates and any proxy requirements
  • Change windows for the install, cutover and failover tests

Confirm with your team how secrets will be handed over before sharing any of these.

How long does an HA Argo CD project take?

Duration follows the written scope. A single cluster with the HA manifests, one identity provider and a basic failover test is a much smaller piece of work than a project that adds several clusters, Dex connectors, repository credentials migrated into Kubernetes Secrets, and a restore rehearsal. Your change control process can also add time, because approvals and change windows are often the longest waits. Ask for the timeline as milestones tied to deliverables so you can track progress.

What recurs after an HA Argo CD goes live?

Most of the cost after go-live is recurring operational work. The project supports only the three most recent minor releases with patch releases, and a new minor ships roughly every three months, so someone must plan regular upgrades and patching. Redis is a disposable cache, but its health, controller health and sync backlog still need monitoring and alert thresholds. Budget for on-call coverage, reviewing release notes before each upgrade, and periodic failover tests.

How does fixed-scope work differ from a retainer?

Fixed-scope work covers an agreed set of deliverables, such as the HA installation, SSO configuration and a failover test, with scope and timeline agreed in writing before work begins. A retainer covers ongoing work over time, such as upgrades on the supported minor releases, patch review, monitoring and responses to incidents. Many teams start with a fixed-scope build and then move to a retainer for day-two operations. DeployOpen does not publish a price list, and a quote follows from the written scope for either option.

What does the cost of an HA install depend on?

The main cost drivers are the number of clusters, the identity model, the state of your Git and network setup, and the amount of testing you require. Each cluster that needs its own controller shards, every additional identity connector, and each recovery test adds work. Costs are one-time for the build and recurring for upgrades, patching and monitoring. When you request a quote, ask for each line item to name who does the work, what it delivers, and which parts recur.

Which Argo CD settings do we need to verify after installation?

Check that the admin account is disabled with admin.enabled set to false once local users or SSO work, that the Redis HA components are running on separate nodes, and that the application controller replicas are healthy. Confirm that repositories are defined as Kubernetes Secrets, since Argo CD 3.0 removed them from argocd-cm. Review RBAC against the federated_claims.user_id claim if you use Dex. Record each check in your runbook so an auditor or on-call engineer can repeat it.

Limits to confirm before you commit to the HA layout

The HA manifests carry constraints that shape where and how Argo CD can run. Each card names one limit to verify in your own environment before you size hardware, write the deployment plan or start an upgrade.

IPv6-only clusters are unsupported

The HA documentation states that IPv6-only clusters are not supported. If your clusters, nodes or service networks are IPv6-only or depend on IPv6 for pod addressing, the HA layout is not a fit as documented. Confirm the address families on every cluster that will host Argo CD and the clusters it deploys to, and raise any gap with your platform team before design starts.

Three schedulable nodes minimum

The HA manifests use pod anti-affinity rules, which need at least three nodes to schedule. Confirm that the target cluster has three schedulable worker nodes after taints, node pools and resource reservations are applied. Also confirm that a single node failure leaves enough capacity for all Argo CD replicas, because a two-node cluster will leave pods pending.

Redis Sentinel and API server replicas

Redis HA with Sentinels and the API server replica settings change between releases. Do not copy replica counts or Sentinel settings from an older guide. Read the high availability page for the exact release you plan to deploy, render the manifests, and compare the Redis and API server objects against what your change record approves.

Repo-server sizing depends on your manifests

The repo-server runs Helm and Kustomize to render manifests, so it is usually the most resource-hungry component. Its CPU and memory needs depend on chart size, the number of applications and how often Git changes. Measure render time and memory on a representative set of applications in a non-production cluster before you fix the replica count and resource limits.

Patch support covers three minor versions

Only the three most recent minor versions receive patch releases. Confirm which minor version your HA install targets and when the next minor release is due, and plan a regular patch window. A deployment pinned to an older minor will stop receiving security fixes, so the HA setup needs a standing upgrade schedule owned by a named team.

RBAC and repository changes in 3.0

The 2.14 to 3.0 upgrade notes change how update and delete permissions apply, require an explicit logs permission for log access, and move repository definitions from argocd-cm into Kubernetes Secrets. Dex RBAC also uses the federated_claims.user_id claim. Existing HA installs must review roles, repository objects and SSO mappings before the upgrade, or access and syncs may change unexpectedly.

How DeployOpen scopes and delivers a production Argo CD install

DeployOpen plans and builds the HA installation inside your own clusters and cloud accounts, starting from a written scope. The work covers the HA topology, identity, access, backup and handover, so your team can run the installation after the engagement ends.

How we scope

  • Engagements are fixed-scope, with the HA topology, clusters and components agreed in writing before work starts.
  • We confirm your cluster count, node capacity and whether the three-node minimum for anti-affinity is met.
  • We confirm your IPv6 requirements early, since IPv6-only clusters are not supported by the HA manifests.
  • The written scope names SSO, admin account handling, repository credentials and who owns each decision.

How we build

  • We deploy the HA manifests with replicas, anti-affinity and Redis HA with Sentinels set to match your scope.
  • We configure identity through Dex or a direct OIDC provider and map groups to Argo CD roles.
  • We disable the built-in admin user once local users or SSO are working, and test that access still holds.
  • We test failover of API server, repo-server, controller and Redis pods, and record the results.

How we hand over

  • You receive the configuration as version-controlled manifests, with the decisions and their reasons documented.
  • We document the upgrade path for the current minor release line, including the 3.0 changes your team must check.
  • We walk your operators through health checks, backup and export steps, and failover behavior in your environment.
  • Runbooks cover what to do when a component is unavailable, so your team does not depend on us to recover.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers, scoped separately from the build.
  • Retainers can cover patch releases for the three most recent minor versions, as set by the project's release process.
  • Scaling work such as controller sharding or Redis tuning can be scoped as a follow-on engagement.
  • Ask us to confirm which support items, response arrangements and recurring costs apply before you sign.

Sources and further reading

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.