stack.basicstack.de/apps
CTO Agent 1c3cd31381 fix(dns): cap hostNetwork/coredns pod DNS at 3 upstreams (DEV-527)
Hetzner OS publishes 4 systemd-resolved upstreams and Kubernetes limits
pod resolv.conf to 3 nameservers, so kubelet drops the 4th and fires a
DNSConfigForming Warning event on every hostNetwork or dnsPolicy=Default
pod restart. Silence the noise by pinning the pods to 3 explicit servers
(same 3 kubelet was already picking).

- apps/observability/patches/node-exporter-dns-config.yaml — strategic-
  merge patch adding dnsPolicy=None + dnsConfig to the
  kube-prometheus-stack node-exporter DaemonSet (Helm-managed, applied
  by hand)
- apps/observability/patches/coredns-dns-config.yaml — companion patch
  for the k3s built-in CoreDNS Deployment. kubectl patch alone is not
  durable because the k3s addon controller reverts dnsPolicy; kept as a
  quick manual re-apply hook
- infrastructure/k3s-manifests/coredns.yaml — the authoritative modified
  k3s addon manifest that must live at
  /var/lib/rancher/k3s/server/manifests/coredns.yaml on all 3 CP nodes
- infrastructure/k3s-manifests/README-DEV-527.md — apply procedure,
  verification steps, and upgrade caveat

Applied and verified on the live cluster:
- node-exporter DaemonSet rolled with dnsPolicy=None; no
  DNSConfigForming events on current pods
- coredns Deployment reconciled after pushing the modified manifest to
  all 3 CPs; new pod runs with dnsPolicy=None and 3-nameserver dnsConfig
- internal + external DNS resolution still works

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-08-23 12:05:12 +00:00
..
argocd fix(argocd): label argocd-oidc-secret so Argo CD reads its keys (DEV-523) 2026-08-23 10:37:01 +00:00
basicstack-org apps/basicstack-org/deployment.yaml aktualisiert 2026-07-18 17:42:30 +00:00
bookstack fix(bookstack): point probes at /status instead of / (DEV-528) 2026-08-23 11:56:37 +00:00
directus Add IgnoreExtraneous annotation to Directus sealed secrets 2026-07-25 14:57:27 +00:00
dozzle Add metrics.k8s.io permissions to Dozzle ClusterRole 2026-07-25 11:34:26 +00:00
forgejo feat(forgejo-backup): migrate to pg_dump -> restic -> Hetzner S3 (DEV-514) 2026-08-23 01:16:38 +00:00
forgejo-runner fix(forgejo-runner): pin to nodes with docker installed (DEV-498) 2026-08-16 20:15:16 +00:00
harbor fix(harbor): set updateStrategy=Recreate for RWO PVC rollouts 2026-08-08 15:51:06 +00:00
headlamp apps/headlamp/deployment.yaml aktualisiert 2026-07-18 08:45:24 +00:00
monitoring chore(monitoring): add restic alerts for forgejo repo (DEV-514) 2026-08-23 01:16:38 +00:00
observability/patches fix(dns): cap hostNetwork/coredns pod DNS at 3 upstreams (DEV-527) 2026-08-23 12:05:12 +00:00
opencloud apps/opencloud/init-job.yaml gelöscht 2026-08-01 08:46:46 +00:00
pangolin docs(pangolin): add apps/pangolin/README.md (DEV-461) 2026-08-08 16:49:22 +00:00
paperclip chore(paperclip): Remove legacy plain Ingress for paperclip.basicstack.de (DEV-456) 2026-08-08 14:56:06 +00:00
passbolt Fix Passbolt ArgoCD degraded status 2026-07-26 09:17:04 +00:00
pocket-id apps/pocket-id/README.md aktualisiert 2026-07-18 13:12:34 +00:00
stalwart feat(stalwart): switch config/data store from RocksDB to PostgreSQL (DEV-476) 2026-08-15 14:46:29 +00:00
app-argocd.yaml feat(argocd): switch to community Helm chart (DEV-519) 2026-08-23 08:32:23 +00:00
app-basicstack-org.yaml feat: migrate basicstack.org deployment to stack repo 2026-07-18 17:13:31 +00:00
app-bookstack.yaml Enable auto-sync for bookstack application 2026-07-12 17:17:53 +00:00
app-directus.yaml ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00
app-dozzle.yaml Add Dozzle container log viewer deployment 2026-07-19 13:25:08 +00:00
app-forgejo-runner.yaml Add Forgejo Actions runner deployment configuration 2026-07-18 14:21:57 +00:00
app-forgejo.yaml ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00
app-harbor.yaml fix(harbor): enable automated selfHeal on harbor Application 2026-08-08 15:52:55 +00:00
app-headlamp.yaml Enable automated sync for Headlamp ArgoCD application 2026-07-18 07:38:58 +00:00
app-opencloud.yaml ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00
app-pangolin.yaml Add Pangolin Kubernetes manifests 2026-07-26 12:09:07 +00:00
app-paperclip.yaml ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00
app-passbolt.yaml ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00
app-pocket-id.yaml ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00
app-stalwart.yaml ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00
ARGOCD-MIGRATION.md ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00
README.md ArgoCD: Replace complex stack sync with individual application syncs 2026-07-12 10:44:41 +00:00

Applications

This directory contains deployment configurations for all applications running on the basicstack.de cluster.

ArgoCD Application Management

Each application has two types of files:

  1. app-<name>.yaml: ArgoCD Application manifest that tells ArgoCD to sync the app subdirectory
  2. <name>/: Application-specific Kubernetes manifests and configuration

The app-*.yaml files are synced by ArgoCD and create/manage the corresponding Application resources. Each application's manifests in its subdirectory are then synced by its Application resource.

Structure

Each application should have its own subdirectory containing:

  • Kubernetes manifests: Deployment, StatefulSet, Service, ConfigMap, Secret definitions
  • Helm values: If using Helm charts, include values.yaml files
  • Configuration files: Application-specific configs (TOML, JSON, YAML)
  • Documentation: README or guide specific to the application deployment
  • Patches: Any kubectl patches or modifications needed

Example: Stalwart

The stalwart/ directory serves as a reference implementation, containing:

  • Multiple deployment variants (basic, with OIDC, etc.)
  • Helm values files
  • Monitoring dashboard configurations
  • Backup/restore procedures
  • Operational documentation

Adding a New Application

  1. Create a new directory: apps/<application-name>/
  2. Add your Kubernetes manifests
  3. Include a README.md explaining:
    • What the application does
    • How to deploy it
    • Configuration options
    • Troubleshooting steps
  4. Test the deployment in a dev environment
  5. Commit with a descriptive message

Naming Conventions

  • Directory names: lowercase, hyphen-separated (e.g., my-app)
  • Manifest files: descriptive names indicating resource type (e.g., deployment.yaml, service.yaml)
  • Use consistent naming across applications