Skip to main content

ArgoCD

Web UI

https://argocd.k8s.instance.onyourmarks.tech — live ArgoCD dashboard for the cluster. Use it to check sync status, view app health, and trigger manual syncs.

ArgoCD pulls Helm chart releases from the GitLab OCI registry and reconciles them onto the cluster. Configuration lives in argocd/ (cluster-wide setup), k8s/app/system/*/*.app.yaml (system apps) and k8s/app/platform/<project>/definition/xplatformapp.yaml (per-project apps).

Two layers

  1. Cluster baselineargocd/cluster-baseline-set.yaml declares an ApplicationSet that watches k8s/cluster/* and applies each directory as an Application. This is the shared platform layer (Traefik, cert-manager, kube-prometheus-stack, etc.).
  2. Per-project apps — each project under k8s/app/platform/<project>/definition/ contains one xplatformapp.yaml, a Crossplane XPlatformApp resource. The composition in k8s/app/system/crossplane-system/config/composition/composition-xplatformapps.yaml expands it into one ArgoCD Application per environment (<project>-staging, <project>-production) in the platform AppProject, plus the matching Kargo Project, Warehouses and Stages. Nobody writes Application manifests for projects by hand.

XPlatformApp resources are not synced by ArgoCD themselves: after adding or changing one, run ./argocd/sync-apps.sh (see Bootstrap). The generated Applications are then fully GitOps (automated, prune, selfHeal).

Generated Application shape

Each generated Application is multi-source: one source is the chart (OCI), the other is this repo (for the values file). With overlaysDir set on the XPlatformApp, a third kustomize source is added for extra manifests per environment.

spec:
project: platform
sources:
- repoURL: oci://registry.gitlab.com/onyourmarks/k8s/oym-k8s-cluster/helm/node-generic
chart: node-generic
targetRevision: "1.3.3" # = parameters.chartVersion
helm:
releaseName: node-generic
valueFiles:
- $values/k8s/app/platform/unisport-agent/helm/values-staging.yaml
- repoURL: https://gitlab.com/onyourmarks/k8s/oym-k8s-cluster.git
targetRevision: main
ref: values
# only with parameters.overlaysDir:
- repoURL: https://gitlab.com/onyourmarks/k8s/oym-k8s-cluster.git
targetRevision: main
path: k8s/app/platform/unisport-agent/overlays/staging
destination:
server: https://kubernetes.default.svc
namespace: unisport-agent-staging

Bumping chartVersion in xplatformapp.yaml (and re-applying) rolls out a new chart version. Editing the values file rolls out config changes. The platform AppProject only allows destination namespaces matching *-staging, *-sprint, *-production and *-kargo.

Step-by-step onboarding: Publishing a project.