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

3 patterns for deploying Helm charts with Argo CD

May 25, 2023
Trevor Royer
Related topics:
GitOpsHelmKubernetes
Related products:
Red Hat OpenShift GitOpsRed Hat OpenShift Container Platform

    Argo CD provides numerous ways to deploy resources from a Helm chart. In this article, you will learn about three patterns used to manage and deploy Helm charts, including when and where to use each pattern in your GitOps environment and the advantages and disadvantages.

    3 patterns for Helm charts

    We will discuss the following three patterns used to manage and deploy Helm charts:

    1. Argo application pointing at a chart in a Helm repo.
    2. Argo application pointing at a chart in a Git repo.
    3. Argo application pointing at a Kustomize folder to render a chart.

    1. Argo application pointing at a chart in a Helm repo

    The first option for deploying a Helm chart is by referencing a chart that is hosted in a Helm repository.

    When deploying a chart from the Argo CD UI, users provide a URL to the Helm repo containing a collection of charts and selects the Helm option in the Source menu. The Chart and Version fields will provide a list of available options from a dropdown menu (Figure 1).

    A screenshot of the Argo CD Helm repo configuration form.
    Figure 1: The ArgoCD Helm repo configuration page.

    Once you have entered the a chart in the Source section, a Helm section will become available, allowing you to specify a values file, values in a YAML format, or the default parameters auto-populated by the chart (Figure 2).

    A screenshot of the Argo CD Helm parameters configuration form.
    Figure 2: The ArgoCD Helm parameters configuration page.

    Advantages and disadvantages of deploying a chart from a Helm repo

    The advantage of deploying a chart directly from a Helm repo is that the UI provides a simple and intuitive user experience. The UI auto-populates the default parameters, presenting configurable options to end users and avoiding mistakes such as misspelled parameter names. This ease of use makes this one of the first options for new users of Argo.

    However, this option makes it challenging to troubleshoot or render a helm chart from a development machine with the helm template command. Any parameters that are populated in the UI are added into the Argo application object which can be manually duplicated on the command line when running helm template. But this option leaves room for errors and typos. The future option to add a values.yaml file from a separate Git repo greatly improves the ability to render the chart locally, but it can leave the values.yaml file orphaned in the Git repo without any additional context, such as the chart repo, name, and version.

    Another disadvantage is that this design pattern does not allow for any flexibility or customization to objects deployed in the chart that are not explicitly allowed by the original chart author. For example, if the original author does not include options to set a nodeSelector in the values, users will not have the ability to set that option in a deployment.

    Other considerations

    Deploying the chart directly from a Helm repo is best for deploying charts that are well maintained, documented, and require minimal troubleshooting. This option is great for rapid chart deployment and prototyping or set-it-and-forget-it deployments.

    The challenges of rendering the chart locally can make this option especially challenging when developing custom charts. In many cases, too much logic and configuration ends up in the Argo application object making it difficult to maintain. This feature in Argo does not currently allow you to utilize another Git repo as a source for the values.yaml file, which is one of the main challenges of using this pattern for resources that need to be maintained over time.

    2. Argo application pointing at a chart in a Git repo

    Another option for deploying a Helm chart with Argo is generating a chart and storing it directly in a Git repo. When using this option, users provide a Git repo URL and the path to the Chart.yaml file. Argo will automatically detect the Helm chart and render the chart when deploying.

    Charts stored in the Git repo can be a fully self-contained chart with their own yaml templates or it can take advantage of chart dependencies to deploy charts hosted in a Helm repo or another chart in the same Git repo. Utilizing a chart to configure a dependency and setting parameters with the values.yaml file of that chart are sometimes referred to as a proxy chart.

    To utilize a chart stored in a Helm repo, you can provide the dependency information in the Chart.yaml object as follows:

    dependencies:
      - name: "mlflow-server"
        version: "0.5.7"
        repository: "https://strangiato.github.io/helm-charts/"
    

    To reference another chart located in the same Git repo, you can utilize the file:// protocol in the Chart.yaml files repository field:

    dependencies:
      - name: "my-local-chart"
        version: "0.1.0"
        repository: "file://../my-local-chart/"
    

    You can configure parameters in the local Helm chart by using the values.yaml file, and Argo will automatically utilize this file when rendering the chart.

    Leveraging chart dependencies within the same Git repo allows for a flexible pattern for building out a multi-tiered application deployment to different environments. By creating a simple chart folder structure, such as the following example, users can develop a custom chart for an application deployed to multiple environments and provide configuration differences in the environment-charts values.yaml file.

    .
    ├── common-charts
    │   └── my-application
    └── environment-charts
        ├── dev
        │   └── my-application
        ├── prod
        │   └── my-application
        └── test
            └── my-application
    

    Advantages and disadvantages of deploying a chart from a Git repo

    An advantage of this design pattern provides the most native Helm developer experience and allows developers to take advantage of Helm features, such as helm template and helm lint in their local environment, allowing them to easily render the chart locally for testing.

    Another advantage of this pattern is when deploying to multiple environments, it enables you to manage the lifecycle of your chart separately in each environment. When utilizing a dependency of a chart stored in a Helm repo, your dev environment can be utilizing v1.1.0 while your prod environment is utilizing v1.0.0.

    A disadvantage of deploying a chart from a Git repo is similar to the Helm repo pattern. If the original author does not provide an option to configure a specific setting, users will not have the ability to set those options.

    This option is also limited to only allowing users to provide parameters in the values.yaml file. Users are not able to create separate values.yaml files for different environments in a single chart and instead must create a separate chart for each environment they wish to configure.

    Another disadvantage is that this pattern can create junk files for a simple deployment that may not be necessary in the final Git repo, such as .helmignore, Chart.lock or dependent chart *.tgz files downloaded locally for testing. Some of these files may be added to the .gitignore file to reduce clutter in the repo.

    Other considerations

    This option is ideal for getting maximum flexibility when developing a custom charts. The ability to create a simple chart without packaging and storing it in a Helm repo allows for extremely rapid prototyping.

    If you manage a chart with a more complex lifecycle, this pattern allows users to maintain different environments with different chart versions and promote changes through the environments in a similar way that images can be promoted to different environments.

    3. Argo application pointing at a Kustomize folder to render a chart

    The third pattern for deploying Helm charts with Argo is by rendering a Helm chart with Kustomize. In your kustomization.yaml file, you can provide chart details, including the Helm repo, chart version, and values. This provides similar capabilities to the proxy chart capabilities with the Kustomize tooling.

    Values can be provided using valuesFile to reference a file relative to the kustomization.yaml file or with valuesInline where you can directly specify parameters.

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    helmCharts:
    - name: mlflow-server
      repo: https://strangiato.github.io/helm-charts/
      version: "0.5.7"
      releaseName: mlflow-server
      namespace: my-namespace
      valuesFile: values.yaml
      valuesInline:
        fullnameOverride: helloagain
    

    From your local environment, you can render the chart by running kustomize build . --enable-helm.

    To utilize this option with Argo, you must provide the enable-helm flag in the Argo CD object definition as follows:

    apiVersion: argoproj.io/v1alpha1
    kind: ArgoCD
    metadata:
      name: argocd
    spec:
      kustomizeBuildOptions: "--enable-helm"
    

    Advantages and disadvantages of rendering a Helm chart with Kustomize

    If a team is already heavily relying on Kustomize in their GitOps environments, utilizing Kustomize to render a Helm chart can help to keep a higher consistency with other configurations and reduce the number of tools needed in the repo.

    Another advantage is that the combination of Kustomize with Helm also provides a powerful option to patch objects. When leveraging the base/overlays Kustomize pattern, a Helm chart renders in the base layer and additional patches apply in overlays. The ability to apply patches after the Helm chart renders allows you to modify the objects in ways the original chart author did not include.

    A disadvantage is that the --enable-helm flag introduces complexity when attempting to troubleshoot a chart locally. Users may also experience issues when attempting to apply the Kustomize resources with oc apply -k since the Kustomize tools built into oc/kubectl do not support the --enable-helm flag. Additionally, this option does require modification to the default Argo CD deployment to enable the feature, which some users may not have permission to do.

    Another disadvantage when using this pattern, is that once Kustomize has inflated the chart, the objects are treated just like any other YAML objects, and is no longer Helm chart. When utilizing the base/overlays model as previously described, you will lose the ability to control the chart objects using the values parameters.

    Other considerations

    This option is ideal for users that are already heavily relying on Kustomize and don't want to introduce another tool their environment. This option is also fantastic when you do not control the Helm chart that you are attempting to deploy, and you need to modify it in a way that the original author didn't include as a configurable option.

    Helping you choose a pattern for Helm chart deployment

    In future versions of Red Hat OpenShift GitOps, Argo CD will support the ability to define multiple sources for objects, such as a Helm chart from one repo and a values.yaml file from another, which could help to eliminate some of the shortcomings of deploying a Helm chart directly from a Helm repo. This feature is discussed in more detail in the article Multiple sources for Argo CD applications.

    One of the major challenges faced by the GitOps community is finding the correct way to manage resources and a GitOps repo with growing complexity. In many cases, there is no one correct solution, and the three options presented here are valid patterns for deploying and managing Helm charts. Hopefully, the advantages and disadvantages discussed in this article provided insight for the next time you need to choose the best option to incorporate a Helm chart into your environment.

    Last updated: April 14, 2025

    Related Posts

    • Multiple sources for Argo CD applications

    • Git best practices: Workflows for GitOps deployments

    • GitOps Cookbook: Kubernetes automation in practice

    • Deploy a Java application using Helm, Part 1

    • 5 global environment variables provided by OpenShift GitOps

    • Manage namespaces in multitenant clusters with Argo CD, Kustomize, and Helm

    Recent Posts

    • Tekton joins the CNCF as an incubating project

    • Federated identity across the hybrid cloud using zero trust workload identity manager

    • Confidential virtual machine storage attack scenarios

    • Introducing virtualization platform autopilot

    • Integrate zero trust workload identity manager with Red Hat OpenShift GitOps

    What’s up next?

    Path to GitOps cover card

    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.