Deploy more than plain manifests. ArgoCD renders Helm charts and Kustomize overlays from git, so you keep your existing packaging while gaining GitOps delivery.
Why: most real repos are not plain YAML — they are Helm charts or Kustomize overlays. ArgoCD detects the tool from the source and renders the final manifests itself before applying, so you keep your existing packaging. The git repo still holds the desired state; ArgoCD just knows how to build it.
source in git ArgoCD renders applies to cluster
───────────── ────────────── ──────────────────
plain manifests ─────▶ (as-is) ─────▶
Helm chart ─────▶ helm template ─────▶ final manifests
Kustomize overlay ─────▶ kustomize build ─────▶Why: point the source at a chart and set values right in the Application — ArgoCD runs the equivalent of helm template and applies the result. You get Helm packaging with GitOps delivery, and the values live in git under review, not in someone's shell history.
spec:
source:
repoURL: https://github.com/myorg/charts
path: charts/web
targetRevision: HEAD
helm:
values: |
replicaCount: 3
image:
tag: "1.4.0"Why: Kustomize layers environment-specific patches over a shared base. Point the source at an overlay directory (overlays/prod) and ArgoCD runs kustomize build and applies it. One repo, a base plus per-environment overlays, each deployed by its own Application.
spec:
source:
repoURL: https://github.com/myorg/app
path: overlays/prod # the prod Kustomize overlay
targetRevision: HEAD
destination:
server: https://kubernetes.default.svc
namespace: prodNote: a common pattern keeps a Helm chart in one repo and its environment values in another (a "config" repo). ArgoCD supports multiple sources on one Application — pull the chart from one, the values file from another. This separates application packaging from environment configuration cleanly, each with its own review process.
spec:
sources:
- repoURL: https://github.com/myorg/charts
path: charts/web
helm:
valueFiles:
- $values/prod/web.yaml # from the second source
- repoURL: https://github.com/myorg/config
targetRevision: HEAD
ref: values # named so the chart can reference it