Skip to content

Components Overview

All platform components are deployed as ArgoCD Applications through the App of Apps pattern. Each component lives under components/<name>/ as a Helm chart wrapper.

Component Table

Component Namespace Sync Wave Upstream Chart Version
ArgoCD argocd 0 argo-cd 7.8.13
Vault vault 1 vault 0.29.1
External Secrets external-secrets 1 external-secrets 0.14.3
Prometheus Operator CRDs monitoring 2 prometheus-operator-crds 27.0.0
ArgoCD Repo Secret argocd 2 Custom
Reloader reloader 2 reloader 2.2.8
Kube Prometheus Stack monitoring 3 kube-prometheus-stack 82.0.0
Trivy Operator trivy-system 3 trivy-operator 0.32.0

Component Pattern

Each component follows the same structure:

components/<name>/
├── Chart.yaml          # Declares upstream dependency
├── templates/          # Optional custom templates
└── values/
    ├── base.yaml       # Shared configuration
    ├── dev.yaml        # Dev overrides
    ├── staging.yaml    # Staging overrides
    └── prod.yaml       # Prod overrides

Chart.yaml

Most components declare a single upstream Helm chart as a dependency:

apiVersion: v2
name: <component>
version: 0.1.0
dependencies:
  - name: <upstream-chart>
    version: <version>
    repository: <helm-repo-url>

Values Cascade

ArgoCD applies values files in order:

  1. values/base.yaml — defaults shared across environments
  2. values/<env>.yaml — environment-specific overrides

Environment values take precedence over base values. This allows setting sensible defaults in base while adjusting replicas, resources, and features per environment.

ArgoCD Application

All components are generated by a single dynamic template (apps/templates/application.yaml) that iterates over the components map in apps/values.yaml. For each enabled component, it:

  • Sets the target namespace
  • Configures the sync wave annotation
  • References the component's Helm chart path
  • Specifies both values files (unless hasValues: false)
  • Enables automated sync with prune and self-heal