Skip to main content
Redhat Developers  Logo
  • AI

    Get started with AI

    • Red Hat AI
      Accelerate the development and deployment of enterprise AI solutions.
    • AI learning hub
      Explore learning materials and tools, organized by task.
    • AI interactive demos
      Click through scenarios with Red Hat AI, including training LLMs and more.
    • AI/ML learning paths
      Expand your OpenShift AI knowledge using these learning resources.
    • AI quickstarts
      Focused AI use cases designed for fast deployment on Red Hat AI platforms.
    • No-cost AI training
      Foundational Red Hat AI training.

    Featured resources

    • OpenShift AI learning
    • Open source AI for developers
    • AI product application development
    • Open source-powered AI/ML for hybrid cloud
    • AI and Node.js cheat sheet

    Red Hat AI Factory with NVIDIA

    • Red Hat AI Factory with NVIDIA is a co-engineered, enterprise-grade AI solution for building, deploying, and managing AI at scale across hybrid cloud environments.
    • Explore the solution
  • Learn

    Self-guided

    • Documentation
      Find answers, get step-by-step guidance, and learn how to use Red Hat products.
    • Learning paths
      Explore curated walkthroughs for common development tasks.
    • Guided learning
      Receive custom learning paths powered by our AI assistant.
    • See all learning

    Hands-on

    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.
    • Interactive labs
      Learn by doing in these hands-on, browser-based experiences.
    • Interactive demos
      Click through product features in these guided tours.

    Browse by topic

    • AI/ML
    • Automation
    • Java
    • Kubernetes
    • Linux
    • See all topics

    Training & certifications

    • Courses and exams
    • Certifications
    • Skills assessments
    • Red Hat Academy
    • Learning subscription
    • Explore training
  • Build

    Get started

    • Red Hat build of Podman Desktop
      A downloadable, local development hub to experiment with our products and builds.
    • Developer Sandbox
      Spin up Red Hat's products and technologies without setup or configuration.

    Download products

    • Access product downloads to start building and testing right away.
    • Red Hat Enterprise Linux
    • Red Hat AI
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Featured

    • Red Hat build of OpenJDK
    • Red Hat JBoss Enterprise Application Platform
    • Red Hat OpenShift Dev Spaces
    • Red Hat Developer Toolset

    References

    • E-books
    • Documentation
    • Cheat sheets
    • Architecture center
  • Community

    Get involved

    • Events
    • Live AI events
    • Red Hat Summit
    • Red Hat Accelerators
    • Community discussions

    Follow along

    • Articles & blogs
    • Developer newsletter
    • Videos
    • Github

    Get help

    • Customer service
    • Customer support
    • Regional contacts
    • Find a partner

    Join the Red Hat Developer program

    • Download Red Hat products and project builds, access support documentation, learning content, and more.
    • Explore the benefits

How to configure and manage Argo CD instances

July 1, 2025
Radu Domnu Ilias Raftoulis
Related topics:
CI/CDGitOpsHelm
Related products:
Red Hat OpenShift GitOpsRed Hat OpenShift

    In the previous article, How to automate multi-cluster deployments using Argo CD, you learned how to get your admin Argo CD instance up and running. You're now ready to explore how to manage and configure your Argo CD instances. By the end of this article, you'll be ready to start deploying applications.

    Configure a tenant-level Argo CD instance

    In our design proposal, one of the important roles of admin Argo CD is to manage and configure the tenant-level Argo CD instances. Let's dive into that process here.

    In this management and configuration stage, you will:

    • Create secrets.
    • Create service accounts.
    • Create tokens.
    • Create a namespace.

    Bootstrap your tenant application

    On the hub cluster, create the namespace and the Argo CD tenant instance(s). In this example, we’ll call the tenant team-foo.

    Create a namespace:

    ---
    apiVersion: v1
    kind: Namespace
    metadata:
        name: argocd-team-foo

    Then create an Argo CD instance as follows:

    ---
    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: argocd-team-foo
      namespace: argocd-team-foo
    spec:
      server:
        route:
          enabled: true

    You can customize the Argo CD instance as desired. One important aspect to configure is the Argo CD role-based access control (RBAC) permissions where the tenant groups should be configured to access and use this Argo CD instance.

    Here is an example:

    rbac: 
        defaultPolicy: role:readonly
        policy: |-
          g, system:cluster-admins, role:admin
          # team-foo is the OpenShift group corresponding to team-foo tenant
          g, team-foo, role:admin
        scopes: '[groups]'

    You can find additional details for configuring Argo CD in the OpenShift GitOps documentation.

    Now move to the spoke cluster(s) and configure API credentials (OAuth tokens) with proper permissions to manage tenant namespaces.

    Create a namespace:

    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: argocd-team-foo

    Create a ServiceAccount:

    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: argocd-team-foo
      namespace: argocd-team-foo

    Create a secret for obtaining long-life tokens for API Access:

    —
    apiVersion: v1
    kind: Secret
    metadata:
      name: argocd-foo-tenant-sa-secret
      annotations:
        kubernetes.io/service-account.name: argocd-admin-sa
    type: kubernetes.io/service-account-token

    Extract the long-term token using the following command:

    oc get secret argocd-foo-tenant-sa-secret -o jsonpath='{.data.token}'

    Extract the CA certificate of the API server of the spoke clusters as follows:

    echo | openssl s_client -connect https://<API_SERVER>:6443/api 2>/dev/null | openssl x509 -outform PEM

    The tenant Argo CD instance will only have permissions to the namespaces of the team to which it belongs, and these RBAC permissions will be provided at the namespace creation step. I will describe this in more detail in the namespace creation section.

    Move back to the hub cluster and create the ArgoCD cluster Secret (similar to the admin Argo CD):

    apiVersion: v1
    kind: Secret
    metadata:
      name: spoke-cluster-1
      labels:
        argocd.argoproj.io/secret-type: cluster
    type: Opaque
    stringData:
      name: spoke-cluster-1
      server: https://api.<cluster-name>.<cluster-domain>:6443
      config: |
        {
           "bearerToken": "<authentication token>",
           "tlsClientConfig": {
            "insecure": false,
            "caData": "<base64 encoded certificate>"
           }
         }

    Disclaimer:

    Plain Kubernetes secrets shouldn’t be directly committed to Git repositories. Use a secret management solution to better manage your secrets.

    Similar to the creation of admin Argo CD, the previous steps for deploying tenant Argo CD instances (except for token configuration in the hub cluster) can be automated using a declarative approach leveraging Helm and GitOps, with the help of the admin Argo CD instance.

    You can configure each of the tenant Argo CD instances with the automation:

    • Connect with the Red Hat OpenShift spoke clusters (using previous Kubernetes secrets of type argocd.argoproj.io/secret-type: cluster).
    • Connect with Git and Helm repositories (using Kubernetes secrets of type argocd.argoproj.io/secret-type: repository).
    • Manage the managed tenant namespaces.

    Create namespaces

    As mentioned earlier, one of the responsibilities of the admin Argo CD instance is to create and configure new namespaces. This includes the creation of objects like egress, ingress, quotas, and RBAC permissions. Of course, a Helm chart may help with the automation of creating all of these.

    This process is depicted in Figure 1.

    Figure 1: The workflow of namespace creation.
    Figure 1: The workflow of namespace creation.

    Whenever the admin Argo CD instance creates a new namespace (besides the previously mentioned objects configuration), these two additional tasks will happen:

    • An edit role will be assigned to the Argo CD tenant service account (I'll explain the creation of the service account in the next section).
    • The new namespace will also be labeled with argocd.argoproj.io/managed-by: argocd-team-foo. This will provide the tenant Argo CD instance with the permissions to deploy applications into that namespace.

    With the admin and tenant Argo CD instances set up, we are now ready to deploy the application.

    Application deployment

    Let's dive into the final step of this process.

    In this section, you will:

    • Understand the application development workflow.
    • Use Helm charts.
    • Configure and correlate Helm charts.

    Figure 2 depicts the application deployment workflow.

    Figure 2: This is the application deployment workflow.
    Figure 2: This is the application deployment workflow.

    The diagram in Figure 2 illustrates how a tenant called team1 deploys its applications to OpenShift. As explained in the previous sections, a dedicated Argo CD instance for the tenant runs on the hub cluster, and it handles application deployment.

    Helm chart repositories

    Helm charts are a popular choice for the application deployment process. To support the deployment of applications and infrastructure services, use Helm umbrella charts to map Argo CD applications with business applications or infrastructure configurations. 

    In our design, we use the concept of Helm umbrella charts, which requires these two types of Helm charts:

    • Base Helm charts deploy basic components ( i.e., Spring Boot applications).
    • Configuration Helm charts correspond to business applications or business application components. 

    Disclaimer:

    Starting with Argo CD 2.13, multiple repository sources are associated with a single Argo CD application. As a result, you can use the repository storing the base charts and the application configuration chart within a single Argo CD application, eliminating the need for umbrella charts. Find more details in the documentation.

    Configure Helm charts

    The first set of Helm charts, or base charts, are designed for deploying generic services. They are versioned and uploaded to a Helm repository for consumption by GitOps repositories and customized by any of the configuration Helm charts as necessary.

    As mentioned earlier, application GitOps repositories make use of the umbrella Helm chart pattern. They only define dependencies for base Helm charts and specific customizations through values files. 

    If business applications are multi-component, which is usually the case, another design consideration is how to group these components together. Should you group at Helm level, or at Argo CD level? 

    For the Helm level approach, a configuration Helm chart represents a multi-component application, leveraging the Helm dependency model for grouping application components. For the Argo CD level approach, a configuration Helm chart is bound to a single application component (i.e., a Spring Boot service). Then, an Argo CD application corresponds to one component. However, to group all the components of the apps, an Argo CD ApplicationSet might be required. 

    Let’s take an example of an application consisting of two backends, backend-payment and backend-customer, deployed in an OpenShift cluster residing in an internally protected network zone, and one front-end component that deploys in another OpenShift cluster residing in a DMZ network zone.

    For the rest of this article, we will describe the backend approach. Let’s look at what a GitOps configuration repository consisting of Helm multi-component application deployments might look like.

    To group the back-end components of the aforementioned application, we can use the following Helm dependency construct:

    apiVersion: v2
    name: business-application1-<spoke-cluster-1>
    description: Business Application 1 Spoke Cluster 1
    type: Chart
    version: 1.1.1
    dependencies:
    - name: springboot
      version: 1.0.10
      repository: "@charts"
      alias: backend-payment
    - name: springboot
      version: 1.0.10
      repository: "@charts"
      alias: backend-customer

    The GitOps configuration repository may have a structure similar to the following:

    dev-team1
    ├── business-application1
    │   ├── business-app1-app-of-apps.yaml
    │   ├── argo-applications
    │   │   ├── app-dev-<spoke-cluster-1>.yaml
    │   │   ├── app-dev-<spoke-cluster-2>.yaml
    │   │   ├── app-test-<spoke-cluster-1>.yaml
    │   │   ├── app-test-<spoke-cluster-2>.yaml
    │   └── charts
    │       ├── values-common-frontend.yaml
    │       ├── values-common-backend.yaml
    │       ├── dev
    │       │   ├── chart-<spoke-cluster-1>
    │       │   │   ├── Chart.yaml
    │       │   │   └── values-frontend.yaml
    │       │   └── chart-<spoke-cluster-2>
    │       │       ├── Chart.yaml
    │       │       └── values-backend.yaml
    │       └── test
    │           ├── chart-<spoke-cluster-1>
    │           └── chart-<spoke-cluster-2>
    │
    └── business-application2
        ├── argo-applications
        ├── business-app2-app-of-apps.yaml
        └── charts
            └──...

    The Argo CD application definition for the back-end components may have a structure similar to the following:

    apiVersion: argoproj.io/v1alpha1
    kind: Application
    metadata:
      name: app-dev-<spoke-cluster-1>
      namespace: dev-team1-gitops
    spec: 
      project: dev-team1-applications
      source: 
        repoURL: https://argocdadmin@bitbucket.org/dev-team1.git
        targetRevision: master
        path: business-application1/charts/dev/chart-<spoke-cluster-1>
        helm:    
          releaseName: business-application1-dev-<spoke-cluster-1> 
          valueFiles: 
            - ../../values-common-backend.yaml
            - values-backend.yaml
      destination: 
        server: https://api.ocp-t-<spoke-cluster-1>-01.net:6443
        namespace: business-application1-dev
      syncPolicy: 
        automated: 
          prune: true
        selfHeal: true

    Helm charts correlation

    Figure 3 depicts the relationship between base and configuration Helm charts.

    A diagram depicting the relationship between base and configuration Helm charts.
    Figure 3: These Helm charts have more multi-component dependencies.

    You can see in Figure 3 how both kinds of Helm charts are connected to each other. Basically, yellow base Helm charts are versioned and published so they can be used from light blue configuration Helm charts as base configuration dependencies, which will then be customized to trigger new deployments. This enables an easy-to-implement workflow.

    Now that we have described the architecture in detail, take a look at Figure 4, which sums up all of the components and their relationship to one another.

    Figure 4: This is the overall GitOps-driven procedure.
    Figure 4: This is the overall GitOps-driven procedure.

    Learn more

    In this series, we described an automated approach to deploying applications on multi-cluster OpenShift environments using Argo CD. We accomplished this by setting up an administrative Argo CD instance that will be responsible for all infrastructure-related tasks, such as creating namespaces, managing the Argo CD instances for application teams, and deploying/configuring additional operational tools. 

    Then, we explored the namespace creation process using the admin Argo CD instance as well as the setup and configuration of the tenant Argo CD instance, which is responsible for deploying applications on multiple OpenShift clusters. 

    Finally, by implementing a GitOps-driven delivery using Helm, we can trigger and configure new OpenShift clusters with ease. By following a similar approach in your environments, you should be able to experience many of these same benefits.

    Interested in learning more about GitOps, Argo CD, and Helm? Explore these offerings:

    • E-book: Getting GitOps: A practical platform with OpenShift, Argo CD, and Tekton
    • Learning path: Deploy to Red Hat OpenShift using Helm charts
    • E-book: GitOps Cookbook: Kubernetes Automation in Practice
    • Learning path: Manage OpenShift virtual machines with GitOps
    • Video: Deploying an application using Red Hat OpenShift GitOps (Argo CD)

    Related Posts

    • Building modern CI/CD workflows for serverless applications with Red Hat OpenShift Pipelines and Argo CD, Part 1

    • Prevent auto-reboot during Argo CD sync with machine configs

    • Multi-primary multi-cluster setup in OpenShift Service Mesh

    • Why should developers care about GitOps?

    Recent Posts

    • Protect data offloaded to GPU-accelerated environments with OpenShift sandboxed containers

    • Case study: Measuring energy efficiency on the x64 platform

    • How to prevent AI inference stack silent failures

    • Preventing GPU waste: A guide to JIT checkpointing with Kubeflow Trainer on OpenShift AI

    • How to manage TLS certificates used by OpenShift GitOps operator

    What’s up next?

    Read The Path to GitOps for a comprehensive look at the tools, workflows, and structures teams need to have in place in order to enable a complete GitOps workflow.

    Get the e-book
    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Platforms

    • Red Hat AI
    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform
    • See all products

    Build

    • Developer Sandbox
    • Developer tools
    • Interactive tutorials
    • API catalog

    Quicklinks

    • Learning resources
    • E-books
    • Cheat sheets
    • Blog
    • Events
    • Newsletter

    Communicate

    • About us
    • Contact sales
    • Find a partner
    • Report a website issue
    • Site status dashboard
    • Report a security problem

    RED HAT DEVELOPER

    Build here. Go anywhere.

    We serve the builders. The problem solvers who create careers with code.

    Join us if you’re a developer, software engineer, web designer, front-end designer, UX designer, computer scientist, architect, tester, product manager, project manager or team lead.

    Sign me up

    Red Hat legal and privacy links

    • About Red Hat
    • Jobs
    • Events
    • Locations
    • Contact Red Hat
    • Red Hat Blog
    • Inclusion at Red Hat
    • Cool Stuff Store
    • Red Hat Summit
    © 2026 Red Hat

    Red Hat legal and privacy links

    • Privacy statement
    • Terms of use
    • All policies and guidelines
    • Digital accessibility

    Chat Support

    Please log in with your Red Hat account to access chat support.