Overview

How Kuberise.io uses ArgoCD and the app-of-apps pattern.

GitOps with ArgoCD

Kuberise.io follows the GitOps model: the Git repository is the single source of truth. ArgoCD watches the repository and ensures the Kubernetes cluster matches the desired state in code. If someone manually changes something in the cluster, ArgoCD reverts it.

App-of-Apps Pattern

After running install.sh, ArgoCD is installed first, then a single root ArgoCD Application (the "app-of-apps") is created. This root application is a Helm chart in the app-of-apps/ folder that generates all other ArgoCD Applications.

install.sh
  └── installs ArgoCD
        └── creates app-of-apps (root Application)
              ├── generates ArgoCD App: ingress-nginx-external
              ├── generates ArgoCD App: cert-manager
              ├── generates ArgoCD App: kube-prometheus-stack
              ├── generates ArgoCD App: loki
              └── ... (all enabled applications)

Application Types

Each ArgoCD Application can deploy resources in one of three formats:

TypeDescriptionExample
helm (default)Helm chart — either from an external repo or a local chart in charts/kube-prometheus-stack, backstage
kustomizeKustomize-based manifestsdashboards, hello
rawPlain Kubernetes YAML filesdatabase, policy

Multi-Source Applications

Helm applications use ArgoCD's multi-source feature with two sources:

  1. Chart source — the external Helm chart repository (or local chart path)
  2. Values source — this Git repository, providing value files

This means values are passed directly to the upstream chart — no wrapper charts, no subchart nesting. Also, value files can reside in a different repository, enabling developer-owned configuration in separate repos.

Operator + Config Chart Pattern

Components that install an operator and also need custom resources (CRDs) are split into two ArgoCD Applications:

  • Operator app — installs the operator (e.g. cert-manager)
  • Config app — deploys CRD instances and configuration (e.g. cert-manager-config)

Config apps use syncWave: 2 to ensure the operator is installed first.