Blog
Product
Deployment
10
minutes

How to Deploy Helm Charts on Kubernetes the Easy Way with Qovery

Deploying Helm charts on Kubernetes can be complex, especially when dealing with configuration overrides, security, and environment-specific setups. In this article, we show how Qovery simplifies Helm chart deployment through a seamless developer experience, robust security defaults, and powerful automation, without sacrificing flexibility.
Alessandro Carrano
Head of Product
Summary
Twitter icon
linkedin icon

Helm is the most widely used package manager for Kubernetes. It allows Kubernetes administrators to manage deployments (also known as releases) of applications on a cluster, assigning resources and constraints to the deployed components.

At Qovery, Helm has been part of our platform’s foundation from the beginning. Our engine automatically pulls your code, builds a container image, and generates a custom Helm chart to deploy it seamlessly onto your Kubernetes cluster. This behind-the-scenes use of Helm was ideal for enabling automation without exposing its complexity to users. It aligned perfectly with our mission to eliminate the burden of managing infrastructure and configurations that would otherwise require advanced knowledge or a dedicated DevOps team.

A few years ago, we didn’t offer the possibility to deploy external Helm charts directly on a cluster due to the complexity and challenges involved:

  • Secrets and sensitive values need to be passed securely and managed across environments.
  • Custom Resource Definitions (CRDs) require careful handling and shouldn’t be managed freely by all users.
  • Kubernetes version upgrades can break running applications if Helm charts are not kept up to date.
  • Deeply nested configuration values in values.yaml files can become hard to manage and prone to errors.

Despite these challenges, there are situations where deploying a Helm chart directly is the only practical option. Many commercial or open source tools are distributed exclusively as Helm charts, making this method essential for installation. Examples include monitoring and observability tools like Datadog, Prometheus, and others.

That’s why we decided to make Helm a first-class citizen in Qovery and empower every developer to deploy their own Helm charts easily and safely.

This required us to rethink Helm integration from the ground up, with a strong focus on user experience: simple configuration, transparent deployment, safe updates, and full lifecycle management. No DevOps intervention needed.

In this article, we’ll walk through the challenges of managing Helm charts and the design decisions we’ve made to deliver on that promise.

Making Helm deployment easy

Below, we’ll walk through some of the key design decisions we made to reduce friction and make life easier for our users 👇

Helm sources management

One of the first challenges when dealing with Helm is managing the list of authorized sources from which charts can be pulled. By default, Helm lets you install anything from anywhere. While that power is great, it also introduces risks and opens the door to misconfigurations or unauthorized deployments.

To complicate things further, Helm supports multiple source types:

  • Classic Helm repositories
  • Git repositories
  • OCI registries

Each of these behaves slightly differently, which can make integration messy and error-prone.

When designing our Helm integration, we studied how other platforms handled source management and decided to go all-in. Qovery supports all standard Helm source types, including Helm repositories, Git repositories, and OCI registries.

To ensure security and governance, only organization admins can define the list of whitelisted Helm sources.

Managing Helm repositories all in one place

This means:

  • You have full control over what can be deployed.
  • You can include access credentials and secrets for private sources.
  • Developers don’t need to worry about source setup, they just select from a pre-approved list.

Once a source is registered, using it is easy. The interface retrieves for you the list of charts and versions available within the selected repository, reducing to zero the risk of selecting a non-existing chart of version.

Easily select Chart name and version

Helm values management

(This was the part that drove us crazy.)

Helm charts are typically distributed with a values.yaml file, which defines configuration parameters and includes default values.

These values can be overridden via the Helm CLI to customize the deployment. The official Helm documentation outlines how this process works, but in practice, it can quickly become a mess, especially when managing multiple environments or dealing with deeply nested configuration trees. To give you an idea, you can look at the ~2500 lines Datadog values file here.

We focused on simplifying three critical pain points of this process:

1) Viewing and defining overrides

Understanding what configuration parameters you can override isn’t always obvious. You usually have to dig through the values.yaml file manually, often navigating layers of nested values.

To improve this, we integrated the default values.yaml directly into the resource creation UI. This gives users a clear side-by-side view of both the default values and the custom overrides they’re applying.

Filling Helm Values the easy way

2) Dynamic values override

Often, Helm value overrides vary depending on the environment in which a chart is deployed. For instance, you might deploy the same chart across different clusters, each requiring unique settings.

To support this use case and instead of multiply the values override files, we extended Qovery’s environment variable system and introduced support for dynamic value resolution using Qovery macros.

You can define overrides using macros like qovery.env.QOVERY_KUBERNETES_CLUSTER_NAME, which will be automatically resolved at deployment time based on the target environment.

Dynamically fill your variables file

3) Testing Helm charts easily

We also wanted Helm deployments to feel as simple and fast as deploying application code from a Git repository.

You can choose between two options for managing your override values:

  • Store in Git: Ideal for versioning and collaboration, especially in production scenarios.
  • Store in the Qovery Control Plane: Useful for rapid iteration and testing changes quickly, without needing a full GitOps setup. Learn more about the control plane here.

In addition, we’ve added parameter-level overrides using the --set, --set-string, and --set-json options. This is perfect for quick tests where you only want to tweak a single value without modifying the whole values.yaml.

Override as arguments

Improved security with self-service

Helm charts are a powerful way to deploy applications and services on Kubernetes, but they are not inherently safe for self-service usage, especially in shared or production environments.

Without proper permissions in place, anyone could deploy resources that affect the entire cluster, such as DaemonSets, CRDs, or other cluster-wide components. This poses a serious risk to cluster stability and security.

To strike the right balance between flexibility and control, we introduced a strict security boundary: by default, resources can only be deployed within the namespace associated with the Qovery environment where the Helm chart is defined.

Note: Each Qovery environment maps directly to a Kubernetes namespace.

If a Helm chart tries to deploy resources outside of its assigned namespace, the deployment is automatically blocked and the operation is aborted.

Helm deployment failure due to missing permission

This approach ensures that Helm deployments remain safe and isolated, giving developers the ability to deploy confidently without compromising cluster integrity.

Of course, we also recognize that advanced users and platform engineers sometimes need to install cluster-wide resources. In these cases, Qovery administrators can override the namespace restriction by enabling the “Allow cluster-wide resources” option in the Helm settings of the Qovery console.

This opt-in mechanism allows full flexibility, but only under strict access control, keeping your clusters safe while still enabling power users when needed.

Exposing a service publicly

Out of the box, most Helm charts do not include everything needed to make deployed services accessible over the internet. Typically, they configure services with a ClusterIP, which restricts access to within the Kubernetes cluster. As a result, developers often need to use kubectl port-forward to access these services locally, far from ideal in a modern developer workflow.

On Qovery, exposing a service publicly is straightforward. When deploying a standard application, you can simply define the port and check the “Publicly exposed” option. Qovery takes care of the rest. On the next deployment, it will:

  • Assign a domain name to the service and handle DNS configuration
  • Automatically generate and apply an SSL certificate
  • Create and manage the necessary Kubernetes Ingress resources

More info on public exposure settings

When it came to Helm deployments, we wanted to offer the exact same simplicity.

Once your Helm chart is deployed with Qovery, you can go to the chart’s settings and select directly from a dropdown:

  • The service name you want to expose
  • The port on which that service is running

Qovery will then automatically provision and deploy all the required infrastructure to make that service available on a secure, publicly accessible URL, no manual Ingress setup, no external DNS configuration, and no certificate management required.

Exposing easily your service

Monitoring and logging

Monitoring the health of applications deployed via Helm charts can quickly become challenging. A single chart might spin up dozens of pods across different services, making manual tracking and log access nearly impossible, especially at scale.

At Qovery, we wanted to offer the same level of visibility and observability for Helm-based deployments as we do for applications deployed through our standard workflows.

To achieve this, we developed a dedicated Kubernetes controller that watches for resources created by Helm charts. This controller automatically injects specific labels and annotations into the deployed resources.

These labels allow the Qovery platform to:

  • Identify which resources belong to which Helm deployment
  • Monitor their real-time status
  • Collect and surface logs directly in the Qovery console

This way, developers gain immediate access to pod logs and health metrics, even for complex Helm deployments, without any extra setup or configuration.

Last but not least: Kubernetes version upgrades

Everything might run smoothly, until you receive a notification from your cloud provider that it’s time to upgrade your Kubernetes cluster.

While clicking an “Upgrade” button may sound simple, the reality is often far from it. Kubernetes upgrades are notoriously painful, and one of the main reasons is Helm chart compatibility. Many charts are only compatible with specific Kubernetes versions, and upgrading without validation can lead to broken deployments and application downtime.

At some point, the Helm chart you’re relying on may no longer be compatible with a newer Kubernetes version. Proceeding with the upgrade without verifying this can result in your application failing post-upgrade.

To address this, we’ve integrated a proactive compatibility check into our Managed Kubernetes Cluster offering.

Before performing a cluster upgrade, Qovery automatically checks all Helm charts deployed on the cluster for compatibility with the target Kubernetes version. If any potential issues are detected, the upgrade is blocked and a clear warning is displayed in the UI. This includes:

  • A list of incompatible Helm charts
  • Details on the resources that may fail post-upgrade
  • Recommendations for resolving the issues before retrying

This safety mechanism ensures your applications stay online and stable, even as your infrastructure evolves.

Helm deployment in action

Have a look at the video below showing the first version we delivered 👇

Conclusion

Helm is a powerful tool, but with that power comes complexity, especially when scaling across teams, environments, and use cases. At Qovery, we didn’t just want to “support” Helm. We wanted to redefine what using Helm could look like for developers: intuitive, secure, and frictionless.

From source management and dynamic value overrides to monitoring, access control, and upgrade safety, we built Helm support that works seamlessly in real-world environments and frees developers from the burden of infrastructure

If you want to know more about our Helm deployment feature, have a look at this material:

Ready to give it a try?

Share on :
Twitter icon
linkedin icon
Ready to rethink the way you do DevOps?
Qovery is a DevOps automation platform that enables organizations to deliver faster and focus on creating great products.
Book a demo

Suggested articles

DevOps
 minutes
Best 10 VMware alternatives: the DevOps guide to escaping the "Broadcom Tax"

Facing VMware price hikes after the Broadcom acquisition? Explore the top 10 alternatives - from Proxmox to Qovery, and discover why leading teams are switching from legacy VMs to modern DevOps automation.

Mélanie Dallé
Senior Marketing Manager
DevOps
DevSecOps
 minutes
Zero-friction DevSecOps: get instant compliance and security in your PaaS pipeline

Shifting security left shouldn't slow you down. Discover how to achieve "Zero-Friction DevSecOps" by automating secrets, compliance, and governance directly within your PaaS pipeline.

Mélanie Dallé
Senior Marketing Manager
DevOps
Observability
Heroku
 minutes
Deploy to EKS, AKS, or GKE without writing a single line of YAML

Stop choosing between Heroku's simplicity and Kubernetes' power. Learn how to deploy to EKS, GKE, or AKS with a PaaS-like experience - zero YAML required, full control retained.

Mélanie Dallé
Senior Marketing Manager
DevOps
Platform Engineering
 minutes
GitOps vs. DevOps: how can they work together?

Is it GitOps or DevOps? Stop choosing between them. Learn how DevOps culture and GitOps workflows work together to automate Kubernetes, eliminate drift, and accelerate software delivery.

Mélanie Dallé
Senior Marketing Manager
DevSecOps
Platform Engineering
Internal Developer Platform
 minutes
Cut tool sprawl: automate your tech stack with a unified platform

Stop letting tool sprawl drain your engineering resources. Discover how unified automation platforms eliminate configuration drift, close security gaps, and accelerate delivery by consolidating your fragmented DevOps stack.

Mélanie Dallé
Senior Marketing Manager
DevOps
Developer Experience
 minutes
Top 10 GitHub actions alternatives: stop optimizing for "price per minute"

GitHub’s new self-hosted fees are a wake-up call. But moving to the "cheapest" runner provider is a strategic error. Discover the top alternatives that optimize for Total Cost of Ownership, not just compute costs.

Mélanie Dallé
Senior Marketing Manager
Product
Observability
5
 minutes
Alerting with guided troubleshooting in Qovery Observe

Get alerted and fix issues with full context. Qovery Observe notifies you when something goes wrong and guides you straight to the metrics and signals that explain why, all in one place.

Alessandro Carrano
Head of Product
DevOps
Developer Experience
 minutes
Top 10 Terraform cloud alternatives: the DevOps guide to escaping "State File Nightmares"

Tired of rising licensing costs and complex state management? Discover the top 10 alternatives to modernize your Infrastructure as Code, empower developers, and regain control of your cloud spend.

Mélanie Dallé
Senior Marketing Manager

It’s time to rethink
the way you do DevOps

Turn DevOps into your strategic advantage with Qovery, automating the heavy lifting while you stay in control.