v0.1: Dogfood deployment on k3s via Forgejo → Argo CD (then Helm chart) #3

Closed
opened 2026-07-18 20:17:06 +00:00 by Cordy · 1 comment
Owner

Dogfood Cairn on the CordyCeps k3s cluster through the existing GitOps pipeline. This is both the v0.1 proof and the template for the eventual public Helm chart.

  • Build multi-arch image (amd64 for Proxmox LXC option, arm64 for the Pis) — extend CI to build and push to Forgejo's container registry
  • Dedicated TrueNAS NFS dataset (e.g. cairn-data) + PV/PVC or hostPath-style NFS mount
  • Deployment + Service (MetalLB IP from the 192.168.10.240–250 pool) + config via Secret
  • Manifests in homelab-config repo under k3s/cairn/ → Argo CD picks it up (remember directory.recurse: true is already set)
  • /healthz wired as liveness/readiness probes
  • Once stable: extract a proper Helm chart into this repo under deploy/chart/

Storage note: NFS + the POSIX driver's atomic temp-file-rename is the exact production pattern the product targets — any weirdness found here (root squash, permissions, rename semantics over NFS) is product feedback, not just ops noise. Write findings to the wiki.

Dogfood Cairn on the CordyCeps k3s cluster through the existing GitOps pipeline. This is both the v0.1 proof and the template for the eventual public Helm chart. - [ ] Build multi-arch image (amd64 for Proxmox LXC option, arm64 for the Pis) — extend CI to build and push to Forgejo's container registry - [ ] Dedicated TrueNAS NFS dataset (e.g. `cairn-data`) + PV/PVC or hostPath-style NFS mount - [ ] Deployment + Service (MetalLB IP from the 192.168.10.240–250 pool) + config via Secret - [ ] Manifests in `homelab-config` repo under `k3s/cairn/` → Argo CD picks it up (remember `directory.recurse: true` is already set) - [ ] `/healthz` wired as liveness/readiness probes - [ ] Once stable: extract a proper Helm chart into this repo under `deploy/chart/` Storage note: NFS + the POSIX driver's atomic temp-file-rename is the exact production pattern the product targets — any weirdness found here (root squash, permissions, rename semantics over NFS) is product feedback, not just ops noise. Write findings to the wiki.
Author
Owner

Manifests written and staged as homelab-config PR #3 — namespace, static NFS PV/PVC (DaPool/cairn-data), Deployment (non-root uid 1000, Recreate strategy, /healthz probes, config from Secret), MetalLB Service on 192.168.10.247.

Deliberately a PR rather than a push to main: Argo CD auto-syncs main, and the image doesn't exist in the registry yet — merging now would produce ImagePullBackOff + Discord alert noise. The PR body carries the full pre-merge checklist (TrueNAS dataset, k3s registries.yaml for the HTTP registry via Ansible, multi-arch buildx push, manual Secrets, then merge).

Remaining after merge:

  • Run the interop smoke (Cairn UI at http://192.168.10.247, WebDAV mount) — feeds #2
  • Extract Helm chart into deploy/chart/ once the raw manifests have proven themselves
  • CI job to build+push the image from Forgejo Actions (needs verification of what the runner can do re: docker/buildah — kept out of scope here rather than committing untested workflow YAML)
Manifests written and staged as **[homelab-config PR #3](http://192.168.10.245/Cordy/homelab-config/pulls/3)** — namespace, static NFS PV/PVC (`DaPool/cairn-data`), Deployment (non-root uid 1000, Recreate strategy, `/healthz` probes, config from Secret), MetalLB Service on **192.168.10.247**. Deliberately a PR rather than a push to main: Argo CD auto-syncs main, and the image doesn't exist in the registry yet — merging now would produce ImagePullBackOff + Discord alert noise. The PR body carries the full pre-merge checklist (TrueNAS dataset, k3s `registries.yaml` for the HTTP registry via Ansible, multi-arch buildx push, manual Secrets, then merge). Remaining after merge: - [ ] Run the interop smoke (Cairn UI at http://192.168.10.247, WebDAV mount) — feeds #2 - [ ] Extract Helm chart into `deploy/chart/` once the raw manifests have proven themselves - [ ] CI job to build+push the image from Forgejo Actions (needs verification of what the runner can do re: docker/buildah — kept out of scope here rather than committing untested workflow YAML)
Cordy closed this issue 2026-07-25 16:27:05 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#3
No description provided.