I'm currently using ArgoCD with per-cluster setups and generators to deploy Helm charts with customized values for different tiers, regions, and clusters. However, I've been struggling with the lack of visibility regarding how changes in values or chart versions might affect the deployments in my clusters. I'm considering the "Rendered manifests pattern" to get clearer insights on what will be deployed by ArgoCD. I've come across a few options but I'm uncertain which to choose. I'm looking into Kargo, Holos, the ArgoCD Source Hydrator, and Make ArgoCd Fly. However, Kargo seems to add complexity, Holos requires learning CUE, and the other options have their limitations. Ideally, I'd like to set up CI to render manifests for different clusters and help automate the process of generating MRs toward the right projects or branches. Any advice or experiences with these tools would be greatly appreciated!
7 Answers
A couple of weeks ago, I wrote a tool specifically for this purpose called kubesource. It simplifies the process of rendering Kubernetes manifests.
You should check out Atmos too; it can render templates nicely. If you're starting from scratch, I recommend giving Holos a shot. Yes, the learning curve is steep, but it offers long-term benefits. You might also consider scripting out the helm template commands for more control.
I'm using FluxCD instead of ArgoCD, so my experience might vary. I mainly use kustomize but have some HelmRelease manifests. I set up a GitHub workflow that generates and diffs the manifests, expanding them with the provided values from HelmRelease files. The output becomes part of a PR comment. It works well with some Python scripting to format everything neatly.
I found this article helpful for understanding Helm chart diffs between versions: https://codefresh.io/blog/argo-cd-preview-diff/. It clarified a lot for me.
We developed an in-house API that renders manifests when provided with values files. This API is integrated with our ArgoCD plugin, allowing us to see the manifest before deployment. It alleviates the complications of Helm templating and gives us the benefit of using logical expressions instead.
I use Nix for packaging Helm charts with flakes, along with a tool called Kubenix. It's been helpful for managing rendered manifests.
I've had great experiences with Cdk8s. It helps simplify Kubernetes manifest generation, and it might fit your needs well.

Sounds interesting! Do you have any resources or examples on how you're using these tools?