k8s

ADR-001: Use Argo CD App-of-Apps Pattern

Status

Accepted

Context

I needed a GitOps orchestration strategy for managing a complex, multi-component Kubernetes platform across multiple clusters. The platform consists of 10+ interdependent components (monitoring, logging, ingress, secrets management, policy enforcement, etc.) that need to be:

Traditional approaches had limitations:

Decision

I adopted the App-of-Apps pattern using a Helm chart (charts/app-of-apps) that generates Argo CD Application resources declaratively.

The pattern works as follows:

  1. A single bootstrap Application (e.g., argocd-bootstrap-apps/ops-01.yaml) installs the app-of-apps Helm chart
  2. The chart renders Application CRs for each enabled component based on values
  3. Each component block in values.yaml includes: enable toggle, project, namespace, source repo/path/revision, and optional annotations
  4. Environment-specific overrides (values.dev-01.yaml, values.prod-01.yaml) customize per-cluster behavior
  5. Sync waves control deployment order via annotations

Key Features:

Consequences

Positive

Negative

Mitigations

Alternatives Considered

1. Individual Application Manifests

Rejected because:

2. Kustomize-based App-of-Apps

Rejected because:

3. Argo CD ApplicationSets

Rejected because:

4. Terraform/Crossplane for Application Management

Rejected because:

References