summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--f3s/argocd-apps/README.md179
-rw-r--r--f3s/argocd-apps/infra/registry.yaml (renamed from f3s/argocd-apps/registry.yaml)0
-rw-r--r--f3s/argocd-apps/monitoring/alloy.yaml (renamed from f3s/argocd-apps/alloy.yaml)0
-rw-r--r--f3s/argocd-apps/monitoring/grafana-ingress.yaml (renamed from f3s/argocd-apps/grafana-ingress.yaml)0
-rw-r--r--f3s/argocd-apps/monitoring/loki.yaml (renamed from f3s/argocd-apps/loki.yaml)0
-rw-r--r--f3s/argocd-apps/monitoring/prometheus.yaml (renamed from f3s/argocd-apps/prometheus.yaml)0
-rw-r--r--f3s/argocd-apps/monitoring/pushgateway.yaml (renamed from f3s/argocd-apps/pushgateway.yaml)0
-rw-r--r--f3s/argocd-apps/monitoring/tempo.yaml (renamed from f3s/argocd-apps/tempo.yaml)0
-rw-r--r--f3s/argocd-apps/services/anki-sync-server.yaml (renamed from f3s/argocd-apps/anki-sync-server.yaml)0
-rw-r--r--f3s/argocd-apps/services/audiobookshelf.yaml (renamed from f3s/argocd-apps/audiobookshelf.yaml)0
-rw-r--r--f3s/argocd-apps/services/filebrowser.yaml (renamed from f3s/argocd-apps/filebrowser.yaml)0
-rw-r--r--f3s/argocd-apps/services/immich.yaml (renamed from f3s/argocd-apps/immich.yaml)0
-rw-r--r--f3s/argocd-apps/services/keybr.yaml (renamed from f3s/argocd-apps/keybr.yaml)0
-rw-r--r--f3s/argocd-apps/services/kobo-sync-server.yaml (renamed from f3s/argocd-apps/kobo-sync-server.yaml)0
-rw-r--r--f3s/argocd-apps/services/miniflux.yaml (renamed from f3s/argocd-apps/miniflux.yaml)0
-rw-r--r--f3s/argocd-apps/services/opodsync.yaml (renamed from f3s/argocd-apps/opodsync.yaml)0
-rw-r--r--f3s/argocd-apps/services/radicale.yaml (renamed from f3s/argocd-apps/radicale.yaml)0
-rw-r--r--f3s/argocd-apps/services/syncthing.yaml (renamed from f3s/argocd-apps/syncthing.yaml)0
-rw-r--r--f3s/argocd-apps/services/tracing-demo.yaml (renamed from f3s/argocd-apps/tracing-demo.yaml)0
-rw-r--r--f3s/argocd-apps/services/wallabag.yaml (renamed from f3s/argocd-apps/wallabag.yaml)0
-rw-r--r--f3s/argocd-apps/services/webdav.yaml (renamed from f3s/argocd-apps/webdav.yaml)0
-rw-r--r--f3s/argocd-apps/test/example-apache-volume-claim.yaml (renamed from f3s/argocd-apps/example-apache-volume-claim.yaml)0
22 files changed, 179 insertions, 0 deletions
diff --git a/f3s/argocd-apps/README.md b/f3s/argocd-apps/README.md
new file mode 100644
index 0000000..e12bacc
--- /dev/null
+++ b/f3s/argocd-apps/README.md
@@ -0,0 +1,179 @@
+# ArgoCD Applications
+
+This directory contains ArgoCD Application manifests that define all workloads deployed to the f3s cluster.
+
+## Directory Structure
+
+Applications are organized by Kubernetes namespace:
+
+```
+argocd-apps/
+├── monitoring/ # Observability stack (namespace: monitoring)
+│ ├── alloy.yaml # Log collection (DaemonSet)
+│ ├── grafana-ingress.yaml # Grafana external access
+│ ├── loki.yaml # Log aggregation
+│ ├── prometheus.yaml # Metrics collection and monitoring (kube-prometheus-stack)
+│ ├── pushgateway.yaml # Prometheus Pushgateway for metrics ingestion
+│ └── tempo.yaml # Distributed tracing
+├── services/ # User-facing applications (namespace: services)
+│ ├── anki-sync-server.yaml # Anki flashcard synchronization
+│ ├── audiobookshelf.yaml # Audiobook/podcast streaming
+│ ├── filebrowser.yaml # Web-based file browser
+│ ├── freshrss.yaml # RSS feed reader
+│ ├── immich.yaml # Photo management
+│ ├── keybr.yaml # Typing practice
+│ ├── kobo-sync-server.yaml # KOReader sync server
+│ ├── miniflux.yaml # Minimalist RSS reader
+│ ├── opodsync.yaml # Podcast synchronization
+│ ├── radicale.yaml # CalDAV/CardDAV server
+│ ├── syncthing.yaml # File synchronization
+│ ├── tracing-demo.yaml # Distributed tracing demo app
+│ ├── wallabag.yaml # Read-it-later service
+│ └── webdav.yaml # WebDAV server
+├── infra/ # Infrastructure services (namespace: infra)
+│ └── registry.yaml # Private Docker registry
+└── test/ # Test/example applications (namespace: test)
+ └── example-apache-volume-claim.yaml # Example Apache with PVC
+
+```
+
+## Application Count by Namespace
+
+- **monitoring**: 6 applications
+- **services**: 13 applications
+- **infra**: 1 application
+- **test**: 1 application
+
+**Total**: 21 applications
+
+## Usage
+
+### Apply all applications
+
+```bash
+# Apply all applications at once
+kubectl apply -f argocd-apps/ -R
+
+# Or apply by namespace
+kubectl apply -f argocd-apps/monitoring/
+kubectl apply -f argocd-apps/services/
+kubectl apply -f argocd-apps/infra/
+kubectl apply -f argocd-apps/test/
+```
+
+### View application status
+
+```bash
+# List all applications
+argocd app list
+
+# View specific application
+argocd app get miniflux
+
+# View by namespace (using labels)
+argocd app list -l "namespace=monitoring"
+```
+
+### Sync all applications
+
+```bash
+# Sync all applications
+argocd app sync -l "argocd.argoproj.io/instance"
+
+# Sync specific namespace
+argocd app sync -l "namespace=monitoring"
+```
+
+## Application Manifest Structure
+
+Each Application manifest follows this pattern:
+
+```yaml
+apiVersion: argoproj.io/v1alpha1
+kind: Application
+metadata:
+ name: <app-name>
+ namespace: cicd # ArgoCD runs in the cicd namespace
+ finalizers:
+ - resources-finalizer.argocd.argoproj.io
+spec:
+ project: default
+ source:
+ repoURL: https://codeberg.org/snonux/conf.git
+ targetRevision: master
+ path: f3s/<app-name>/helm-chart
+ destination:
+ server: https://kubernetes.default.svc
+ namespace: <target-namespace>
+ syncPolicy:
+ automated:
+ prune: true # Delete resources removed from Git
+ selfHeal: true # Automatically revert manual changes
+ syncOptions:
+ - CreateNamespace=false
+ retry:
+ limit: 3
+ backoff:
+ duration: 5s
+ factor: 2
+ maxDuration: 1m
+```
+
+## Sync Policies
+
+All applications use automated sync with:
+
+- **prune: true** - Resources removed from Git are deleted from the cluster
+- **selfHeal: true** - Manual changes in the cluster are automatically reverted to match Git
+
+Exception: **prometheus** has `prune: false` for safety due to its complexity.
+
+## Complex Applications
+
+Some applications use advanced ArgoCD features:
+
+### Multi-Source Applications
+
+**prometheus.yaml** combines multiple sources:
+- Upstream Helm chart from prometheus-community
+- Custom manifests from Git (recording rules, dashboards, hooks)
+
+### Sync Waves and Hooks
+
+**prometheus.yaml** uses sync waves to control deployment order:
+- Wave 0: PersistentVolumes, RBAC
+- Wave 1: Secrets, ConfigMaps
+- Wave 3: PrometheusRule CRDs (recording rules)
+- Wave 4: Dashboard ConfigMaps
+- Wave 10: PostSync hook (Grafana restart)
+
+## Disaster Recovery
+
+To rebuild the entire cluster from scratch:
+
+1. Bootstrap k3s cluster
+2. Create namespaces:
+```bash
+kubectl create namespace cicd
+kubectl create namespace monitoring
+kubectl create namespace services
+kubectl create namespace infra
+kubectl create namespace test
+```
+
+3. Install ArgoCD (see `/home/paul/git/conf/f3s/argocd/`)
+
+4. Apply all Application manifests:
+```bash
+kubectl apply -f argocd-apps/ -R
+```
+
+5. ArgoCD automatically deploys all 21 applications
+
+Total recovery time: ~30 minutes.
+
+## See Also
+
+- [ArgoCD Documentation](https://argo-cd.readthedocs.io)
+- [f3s Configuration Repository](https://codeberg.org/snonux/conf/src/branch/master/f3s)
+- Blog post: f3s: Kubernetes with FreeBSD - Part X: GitOps with ArgoCD
diff --git a/f3s/argocd-apps/registry.yaml b/f3s/argocd-apps/infra/registry.yaml
index 2948233..2948233 100644
--- a/f3s/argocd-apps/registry.yaml
+++ b/f3s/argocd-apps/infra/registry.yaml
diff --git a/f3s/argocd-apps/alloy.yaml b/f3s/argocd-apps/monitoring/alloy.yaml
index c5574b1..c5574b1 100644
--- a/f3s/argocd-apps/alloy.yaml
+++ b/f3s/argocd-apps/monitoring/alloy.yaml
diff --git a/f3s/argocd-apps/grafana-ingress.yaml b/f3s/argocd-apps/monitoring/grafana-ingress.yaml
index bc99f02..bc99f02 100644
--- a/f3s/argocd-apps/grafana-ingress.yaml
+++ b/f3s/argocd-apps/monitoring/grafana-ingress.yaml
diff --git a/f3s/argocd-apps/loki.yaml b/f3s/argocd-apps/monitoring/loki.yaml
index c7985c2..c7985c2 100644
--- a/f3s/argocd-apps/loki.yaml
+++ b/f3s/argocd-apps/monitoring/loki.yaml
diff --git a/f3s/argocd-apps/prometheus.yaml b/f3s/argocd-apps/monitoring/prometheus.yaml
index 4265168..4265168 100644
--- a/f3s/argocd-apps/prometheus.yaml
+++ b/f3s/argocd-apps/monitoring/prometheus.yaml
diff --git a/f3s/argocd-apps/pushgateway.yaml b/f3s/argocd-apps/monitoring/pushgateway.yaml
index 46d69ca..46d69ca 100644
--- a/f3s/argocd-apps/pushgateway.yaml
+++ b/f3s/argocd-apps/monitoring/pushgateway.yaml
diff --git a/f3s/argocd-apps/tempo.yaml b/f3s/argocd-apps/monitoring/tempo.yaml
index 0fd6bc1..0fd6bc1 100644
--- a/f3s/argocd-apps/tempo.yaml
+++ b/f3s/argocd-apps/monitoring/tempo.yaml
diff --git a/f3s/argocd-apps/anki-sync-server.yaml b/f3s/argocd-apps/services/anki-sync-server.yaml
index 850af3e..850af3e 100644
--- a/f3s/argocd-apps/anki-sync-server.yaml
+++ b/f3s/argocd-apps/services/anki-sync-server.yaml
diff --git a/f3s/argocd-apps/audiobookshelf.yaml b/f3s/argocd-apps/services/audiobookshelf.yaml
index e90e374..e90e374 100644
--- a/f3s/argocd-apps/audiobookshelf.yaml
+++ b/f3s/argocd-apps/services/audiobookshelf.yaml
diff --git a/f3s/argocd-apps/filebrowser.yaml b/f3s/argocd-apps/services/filebrowser.yaml
index 5e32211..5e32211 100644
--- a/f3s/argocd-apps/filebrowser.yaml
+++ b/f3s/argocd-apps/services/filebrowser.yaml
diff --git a/f3s/argocd-apps/immich.yaml b/f3s/argocd-apps/services/immich.yaml
index 6fac25b..6fac25b 100644
--- a/f3s/argocd-apps/immich.yaml
+++ b/f3s/argocd-apps/services/immich.yaml
diff --git a/f3s/argocd-apps/keybr.yaml b/f3s/argocd-apps/services/keybr.yaml
index 411ca6a..411ca6a 100644
--- a/f3s/argocd-apps/keybr.yaml
+++ b/f3s/argocd-apps/services/keybr.yaml
diff --git a/f3s/argocd-apps/kobo-sync-server.yaml b/f3s/argocd-apps/services/kobo-sync-server.yaml
index eaae84c..eaae84c 100644
--- a/f3s/argocd-apps/kobo-sync-server.yaml
+++ b/f3s/argocd-apps/services/kobo-sync-server.yaml
diff --git a/f3s/argocd-apps/miniflux.yaml b/f3s/argocd-apps/services/miniflux.yaml
index 9b3a23a..9b3a23a 100644
--- a/f3s/argocd-apps/miniflux.yaml
+++ b/f3s/argocd-apps/services/miniflux.yaml
diff --git a/f3s/argocd-apps/opodsync.yaml b/f3s/argocd-apps/services/opodsync.yaml
index b4b0e54..b4b0e54 100644
--- a/f3s/argocd-apps/opodsync.yaml
+++ b/f3s/argocd-apps/services/opodsync.yaml
diff --git a/f3s/argocd-apps/radicale.yaml b/f3s/argocd-apps/services/radicale.yaml
index d12d771..d12d771 100644
--- a/f3s/argocd-apps/radicale.yaml
+++ b/f3s/argocd-apps/services/radicale.yaml
diff --git a/f3s/argocd-apps/syncthing.yaml b/f3s/argocd-apps/services/syncthing.yaml
index 6cec5d3..6cec5d3 100644
--- a/f3s/argocd-apps/syncthing.yaml
+++ b/f3s/argocd-apps/services/syncthing.yaml
diff --git a/f3s/argocd-apps/tracing-demo.yaml b/f3s/argocd-apps/services/tracing-demo.yaml
index 30ab9b0..30ab9b0 100644
--- a/f3s/argocd-apps/tracing-demo.yaml
+++ b/f3s/argocd-apps/services/tracing-demo.yaml
diff --git a/f3s/argocd-apps/wallabag.yaml b/f3s/argocd-apps/services/wallabag.yaml
index e723b64..e723b64 100644
--- a/f3s/argocd-apps/wallabag.yaml
+++ b/f3s/argocd-apps/services/wallabag.yaml
diff --git a/f3s/argocd-apps/webdav.yaml b/f3s/argocd-apps/services/webdav.yaml
index 3c3158b..3c3158b 100644
--- a/f3s/argocd-apps/webdav.yaml
+++ b/f3s/argocd-apps/services/webdav.yaml
diff --git a/f3s/argocd-apps/example-apache-volume-claim.yaml b/f3s/argocd-apps/test/example-apache-volume-claim.yaml
index e918e87..e918e87 100644
--- a/f3s/argocd-apps/example-apache-volume-claim.yaml
+++ b/f3s/argocd-apps/test/example-apache-volume-claim.yaml