This commit is contained in:
2026-04-27 20:35:27 +02:00
parent b4100bd456
commit 7132f5000e
3 changed files with 111 additions and 80 deletions

View File

@@ -84,24 +84,25 @@ This repository contains the complete GitOps configuration for our Kubernetes cl
├── _app-of-apps.yaml # Root ArgoCD Application (App-of-Apps pattern) ├── _app-of-apps.yaml # Root ArgoCD Application (App-of-Apps pattern)
├── infra/ # Infrastructure ArgoCD Applications (Kustomize multi-cluster) ├── infra/ # Infrastructure ArgoCD Applications (Kustomize multi-cluster)
│ ├── base/ # Base ArgoCD Application manifests (EU defaults) │ ├── base/ # Base ArgoCD Application manifests (one dir per component)
│ │ ├── kustomization.yaml │ │ ├── kustomization.yaml # Aggregates all component subdirectories
│ │ ├── traefik-application.yaml │ │ ├── traefik-application/
│ │ ├── keycloak.yaml │ │ ├── kustomization.yaml
│ │ ── grafana.yaml │ │ │ └── traefik-application.yaml
│ │ ├── gitea.yaml │ │ ├── keycloak/
│ │ ├── gitea-actions.yaml │ │ │ ├── kustomization.yaml
│ │ ├── tempo.yaml │ │ │ └── keycloak.yaml
│ │ ├── renovate.yaml │ │ ├── grafana/
│ │ ├── ... # All other Application manifests │ │ ├── prometheus/
│ │ ── secrets.yaml │ │ ── ... # Each component in its own subdirectory
│ │ └── secrets/
│ ├── overlays/ # Per-cluster overrides (Kustomize) │ ├── overlays/ # Per-cluster overrides (Kustomize)
│ │ ├── upc-dev/ # UpCloud Dev (uses base as-is) │ │ ├── upc-dev/ # UpCloud Dev — includes all base components
│ │ ├── upc-prod/ # UpCloud Prod (patches value paths) │ │ ├── upc-prod/ # UpCloud Prod — all components + patches
│ │ ├── aks-dev/ # Azure AKS Dev — selective components only
│ │ ├── aks-prod/ # Azure AKS Prod
│ │ ├── eks-dev/ # AWS EKS Dev │ │ ├── eks-dev/ # AWS EKS Dev
│ │ ├── eks-prod/ # AWS EKS Prod │ │ ├── eks-prod/ # AWS EKS Prod
│ │ ├── aks-dev/ # Azure AKS Dev
│ │ ├── aks-prod/ # Azure AKS Prod
│ │ ├── gke-dev/ # GCP GKE Dev │ │ ├── gke-dev/ # GCP GKE Dev
│ │ └── gke-prod/ # GCP GKE Prod │ │ └── gke-prod/ # GCP GKE Prod
│ ├── dashboards/ # Grafana dashboard ConfigMaps │ ├── dashboards/ # Grafana dashboard ConfigMaps
@@ -116,11 +117,18 @@ This repository contains the complete GitOps configuration for our Kubernetes cl
│ ├── gke-dev/ # GCP GKE Dev │ ├── gke-dev/ # GCP GKE Dev
│ └── gke-prod/ # GCP GKE Prod │ └── gke-prod/ # GCP GKE Prod
├── apps/ # Business Applications ├── apps/ # Business Applications (Kustomize, same pattern as infra)
│ ├── mcp10x.yaml │ ├── base/ # One subdirectory per app
│ ├── musicman.yaml │ ├── kustomization.yaml
│ ├── dot-ai-stack.yaml │ ├── musicman/
└── argo-mcp.yaml │ ├── mcp10x/
│ │ ├── dot-ai-stack/
│ │ ├── ts-mcp/
│ │ └── argo-mcp/
│ └── overlays/ # Per-cluster: cherry-pick or include all
│ ├── upc-dev/ # All apps
│ ├── upc-prod/ # All apps + patches
│ └── aks-dev/ # Selective apps only
├── cluster-resources/ # Cluster-wide Kubernetes resources ├── cluster-resources/ # Cluster-wide Kubernetes resources
│ ├── letsencrypt-issuer.yaml │ ├── letsencrypt-issuer.yaml
@@ -372,7 +380,7 @@ kubectl patch application myapp -n argocd \
## 📖 Key Concepts ## 📖 Key Concepts
### App-of-Apps Pattern ### App-of-Apps Pattern
`_app-of-apps-{cluster}.yaml` is the root Application that manages all other Applications in `infra/`. Kustomize overlays in `infra/overlays/{cluster}/` render the base Applications with per-cluster patches (e.g., swapping value file paths). Supported clusters: `upc-dev`, `upc-prod`, `eks-dev`, `eks-prod`, `aks-dev`, `aks-prod`, `gke-dev`, `gke-prod`. `_app-of-apps-{cluster}.yaml` is the root Application that manages all other Applications in `infra/`. Each component in `infra/base/` lives in its own subdirectory (e.g., `infra/base/grafana/`). Overlays can either include **all** components (via `../../base`) or **cherry-pick** specific ones (via `../../base/grafana`, `../../base/prometheus`, etc.). Per-cluster patches swap Helm value file paths. Supported clusters: `upc-dev`, `upc-prod`, `eks-dev`, `eks-prod`, `aks-dev`, `aks-prod`, `gke-dev`, `gke-prod`.
### Multi-Source Pattern ### Multi-Source Pattern
Applications reference both: Applications reference both:

View File

@@ -120,24 +120,25 @@ launchpad/
├── _app-of-apps-upc-prod.yaml # Root ArgoCD Application (upc-prod cluster) ├── _app-of-apps-upc-prod.yaml # Root ArgoCD Application (upc-prod cluster)
├── infra/ # Infrastructure ArgoCD Applications (Kustomize) ├── infra/ # Infrastructure ArgoCD Applications (Kustomize)
│ ├── base/ # Base Application manifests (upc-dev defaults) │ ├── base/ # Base Application manifests (one dir per component)
│ │ ├── kustomization.yaml │ │ ├── kustomization.yaml # Aggregates all component subdirectories
│ │ ├── traefik-application.yaml │ │ ├── traefik-application/
│ │ ├── keycloak.yaml │ │ ├── kustomization.yaml
│ │ ── grafana.yaml │ │ │ └── traefik-application.yaml
│ │ ├── gitea.yaml │ │ ├── keycloak/
│ │ ├── gitea-actions.yaml │ │ │ ├── kustomization.yaml
│ │ ├── tempo.yaml │ │ │ └── keycloak.yaml
│ │ ├── renovate.yaml │ │ ├── grafana/
│ │ ├── ... # All other Application manifests │ │ ├── prometheus/
│ │ ── secrets.yaml │ │ ── ... # Each component in its own subdirectory
│ │ └── secrets/
│ ├── overlays/ # Per-cluster Kustomize overrides │ ├── overlays/ # Per-cluster Kustomize overrides
│ │ ├── upc-dev/ # UpCloud Dev (uses base as-is) │ │ ├── upc-dev/ # UpCloud Dev — includes all (resources: ../../base)
│ │ ├── upc-prod/ # UpCloud Prod (patches value paths) │ │ ├── upc-prod/ # UpCloud Prod — all + patches
│ │ ├── aks-dev/ # Azure AKS Dev — selective components
│ │ ├── aks-prod/ # Azure AKS Prod
│ │ ├── eks-dev/ # AWS EKS Dev │ │ ├── eks-dev/ # AWS EKS Dev
│ │ ├── eks-prod/ # AWS EKS Prod │ │ ├── eks-prod/ # AWS EKS Prod
│ │ ├── aks-dev/ # Azure AKS Dev
│ │ ├── aks-prod/ # Azure AKS Prod
│ │ ├── gke-dev/ # GCP GKE Dev │ │ ├── gke-dev/ # GCP GKE Dev
│ │ └── gke-prod/ # GCP GKE Prod │ │ └── gke-prod/ # GCP GKE Prod
│ ├── dashboards/ # Grafana dashboard ConfigMaps │ ├── dashboards/ # Grafana dashboard ConfigMaps
@@ -149,13 +150,17 @@ launchpad/
│ └── gcp-{dev,prod}/ # GCP: premium-rwo, L4 LB │ └── gcp-{dev,prod}/ # GCP: premium-rwo, L4 LB
├── apps/ # Business Application ArgoCD manifests (Kustomize) ├── apps/ # Business Application ArgoCD manifests (Kustomize)
│ ├── base/ # Base app manifests │ ├── base/ # One subdirectory per app
│ │ ├── kustomization.yaml │ │ ├── kustomization.yaml
│ │ ├── dot-ai-stack.yaml │ │ ├── musicman/
│ │ ── ... │ │ ── mcp10x/
│ │ ├── dot-ai-stack/
│ │ ├── ts-mcp/
│ │ └── argo-mcp/
│ └── overlays/ │ └── overlays/
│ ├── upc-dev/ # Uses base as-is │ ├── upc-dev/ # All apps (resources: ../../base)
── upc-prod/ # Patches value paths ── upc-prod/ # All apps + patches
│ └── aks-dev/ # Selective apps only
├── cluster-resources/ # Cluster-wide Kubernetes resources ├── cluster-resources/ # Cluster-wide Kubernetes resources
│ ├── ... │ ├── ...
@@ -171,6 +176,8 @@ launchpad/
**Key Points**: **Key Points**:
- `_app-of-apps-upc-dev.yaml` and `_app-of-apps-upc-prod.yaml` are the per-cluster root Applications - `_app-of-apps-upc-dev.yaml` and `_app-of-apps-upc-prod.yaml` are the per-cluster root Applications
- Each component in `base/` has its own subdirectory with a `kustomization.yaml`
- Overlays can include **all** components (`resources: [../../base]`) or **cherry-pick** specific ones (`resources: [../../base/grafana, ../../base/prometheus]`)
- Kustomize overlays in `infra/overlays/` render base Applications with per-cluster patches - Kustomize overlays in `infra/overlays/` render base Applications with per-cluster patches
- Helm values are split: `values/base/` (shared) + `values/upc-dev/` or `values/upc-prod/` (cluster-specific) - Helm values are split: `values/base/` (shared) + `values/upc-dev/` or `values/upc-prod/` (cluster-specific)
- `apps/` follows the same base/overlays pattern for business applications - `apps/` follows the same base/overlays pattern for business applications
@@ -353,16 +360,30 @@ spec:
### Multi-Cluster Pattern ### Multi-Cluster Pattern
Kustomize overlays enable deploying the same Applications across clusters with different configurations: Kustomize overlays enable deploying the same Applications across clusters with different configurations.
Each component in `infra/base/` and `apps/base/` lives in its own subdirectory. Overlays define **which components to include** and optionally **patch** them:
```yaml ```yaml
# infra/base/ contains default (upc-dev) Applications # Option 1: Include ALL components (full cluster)
# Helm values are layered: base + cluster-specific # infra/overlays/upc-dev/kustomization.yaml
valueFiles: resources:
- $values/infra/values/base/traefik-values.yaml # Shared config - ../../base # Pulls in every component subdirectory
- $values/infra/values/upc-dev/traefik-values.yaml # Cluster-specific
# infra/overlays/upc-prod/kustomization.yaml patches the second valueFile # Option 2: Cherry-pick specific components (lightweight cluster)
# infra/overlays/aks-dev/kustomization.yaml
resources:
- ../../base/traefik-application
- ../../base/grafana
- ../../base/prometheus
- ../../base/loki
# Only listed components are deployed — others are excluded
```
Per-cluster patches swap Helm value file paths:
```yaml
# infra/overlays/upc-prod/kustomization.yaml
patches: patches:
- target: - target:
kind: Application kind: Application

View File

@@ -76,33 +76,28 @@ launchpad/
├── _app-of-apps-upc-dev.yaml # Root ArgoCD Application (upc-dev) ├── _app-of-apps-upc-dev.yaml # Root ArgoCD Application (upc-dev)
├── _app-of-apps-upc-prod.yaml # Root ArgoCD Application (upc-prod) ├── _app-of-apps-upc-prod.yaml # Root ArgoCD Application (upc-prod)
├── infra/ # Infrastructure applications ├── infra/ # Infrastructure applications (Kustomize)
│ ├── cluster-resources-application.yaml │ ├── base/ # One subdirectory per component
│ ├── enterprise-apps.yaml │ ├── kustomization.yaml # Aggregates all component subdirectories
│ ├── traefik-application.yaml │ ├── traefik-application/
├── cert-manager-application.yaml │ │ ├── kustomization.yaml
├── kyverno.yaml │ │ └── traefik-application.yaml
│ ├── kyverno-policies.yaml │ ├── keycloak/
├── prometheus.yaml │ │ ├── kustomization.yaml
├── grafana.yaml │ │ └── keycloak.yaml
│ ├── loki.yaml │ ├── grafana/
│ ├── tempo.yaml │ ├── prometheus/
│ ├── fluent-bit.yaml │ ├── loki/
│ ├── gitea.yaml │ ├── tempo/
│ ├── gitea-actions.yaml │ ├── gitea/
│ ├── sealedsecrets.yaml │ ├── opencost/
│ ├── secrets.yaml │ ├── ... # Each component in own directory
├── renovate.yaml │ └── secrets/
│ ├── base/ # ArgoCD Application manifests (Kustomize base) │ ├── overlays/ # Per-cluster: include all or cherry-pick
│ │ ├── gitea.yaml │ │ ├── upc-dev/ # resources: [../../base] (all components)
│ │ ├── opencost.yaml │ │ ├── upc-prod/ # resources: [../../base] + patches
│ │ ├── traefik-application.yaml │ │ ├── aks-dev/ # resources: [../../base/grafana, ...] (selective)
│ │ ── keycloak.yaml │ │ ── .../ # 8 clusters total
│ │ ├── grafana.yaml
│ │ └── ...
│ ├── overlays/
│ │ └── upc-prod/
│ │ └── kustomization.yaml # Patches upc-dev → upc-prod valueFile paths
│ └── values/ │ └── values/
│ ├── base/ # Cloud-agnostic Helm values │ ├── base/ # Cloud-agnostic Helm values
│ │ ├── gitea-values.yaml │ │ ├── gitea-values.yaml
@@ -122,11 +117,18 @@ launchpad/
│ ├── gitea-values.yaml │ ├── gitea-values.yaml
│ └── opencost-values.yaml │ └── opencost-values.yaml
├── apps/ # Business applications ├── apps/ # Business applications (Kustomize)
│ ├── mcp10x.yaml │ ├── base/ # One subdirectory per app
│ ├── musicman.yaml │ ├── kustomization.yaml
│ ├── dot-ai-stack.yaml │ ├── musicman/
└── argo-mcp.yaml │ ├── mcp10x/
│ │ ├── dot-ai-stack/
│ │ ├── ts-mcp/
│ │ └── argo-mcp/
│ └── overlays/ # Per-cluster: include all or cherry-pick
│ ├── upc-dev/
│ ├── upc-prod/
│ └── aks-dev/ # Selective apps only
├── cluster-resources/ # Cluster-level resources ├── cluster-resources/ # Cluster-level resources
│ ├── cert-manager-namespace.yaml │ ├── cert-manager-namespace.yaml