24 Commits
Author SHA1 Message Date
duynguyen 0905f5ca86 fix: ServerSideApply on argocd Application to prune stale fields
argocd was originally helm-installed by hand before ArgoCD existed to
manage it; client-side 3-way merge apply can't prune fields it never
saw in a last-applied-configuration, so a later chart bump left a stale
args on repo-server's copyutil init container (old shell-string command
lingering alongside the new plain cp command) -> cp got 4 args instead
of 3 -> 'No such file or directory' -> CrashLoopBackOff -> Degraded.

Same bug class as envoy-gateway (020b248). ServerSideApply=true tracks
field ownership properly and prunes the stray field on next sync.
2026-09-02 23:12:00 +07:00
duynguyen f7334a5480 fix: bump argocd route timeout past Envoy's 15s default
Envoy Gateway's per-route default timeout (15s, unset anywhere in this
cluster) was cutting the connection to argocd-server mid-Sync, surfacing
as 'Gateway Timeout' in the UI — confirmed even a single-resource sync
hit exactly ~15.0s every attempt, ruling out chart size/congestion.

BackendTrafficPolicy on the argocd HTTPRoute raises requestTimeout to 120s.
2026-09-02 16:24:58 +07:00
duynguyen ca028013ce chore: manual sync for leaf apps, keep root app-of-apps automated
Convention: only the root app-of-apps (bootstrap) auto-syncs so it picks up
new/changed child Application definitions from Git. Every leaf service app
(metallb, metallb-config, envoy-gateway, envoy-gateway-config, nfs-provisioner)
now requires an explicit manual Sync — matches the existing argocd (self-manage)
and ignis convention.
2026-09-02 16:22:15 +07:00
duynguyen 36958c35a4 docs: point to cluster-platform repo for platform services
cluster-bootstrap only brings up the minimal layer (argocd, metallb,
envoy-gateway, storage). App/platform services now live in a separate
cluster-platform repo, applied after this one finishes.
2026-07-29 23:32:02 +07:00
duynguyen e2781babf4 docs: extend PVC test to include pod write + persistence check
Prior test only checked PVC reaches Bound. Add a pod that writes a
file, then a second pod re-mounting the same PVC to confirm data
survives pod delete/recreate (proves NFS-backed, not emptyDir).
2026-07-29 23:18:23 +07:00
duynguyen 0e0968b352 fix: drop unsupported nfs-retain StorageClass via extraObjects
nfs-subdir-external-provisioner chart v4.0.18 has no extraObjects
values key - it was silently ignored, so nfs-retain never actually
existed. Only nfs-delete (native storageClass.* key) is real.
Updated README expected output to match.
2026-07-29 23:15:53 +07:00
duynguyen 020b248bbe fix: force ServerSideApply on envoy-gateway Application
Gateway API CRDs (httproutes, envoyproxies) have schemas large enough that
client-side apply's last-applied-configuration annotation exceeds the
262144-byte annotation limit. SSA skips that annotation entirely.
2026-07-21 12:07:59 +07:00
duynguyen fef69d587f fix: register envoy-gateway OCI repo declaratively in argocd values
ArgoCD only builds a helm-pull command for oci:// sources when the repo is
registered with enableOCI: true; otherwise it falls back to classic --repo
handling, which errors on an oci:// URL. Registered via configs.repositories
in argocd's own values.yaml (Git-managed), Application source updated to
the bare host/path form ArgoCD expects for OCI repos.
2026-07-21 12:02:02 +07:00
duynguyen 2a07b6decf fix: use OCI registry for envoy-gateway helm chart source
https://charts.gateway.envoyproxy.io no longer resolves (NXDOMAIN); chart is
now published at oci://docker.io/envoyproxy/gateway-helm.
2026-07-21 11:24:21 +07:00
duynguyen 7dda8715c1 fix: disable auto-sync on argocd Application
Allows manual Service edits (e.g. NodePort for temp access) without self-heal reverting them.
2026-07-21 10:41:20 +07:00
duynguyen 02b4f1f926 fix: ignore CRD status/caBundle drift on metallb Application
Prevents perpetual OutOfSync on bgppeers.metallb.io and other metallb CRDs caused by apiserver-populated .status fields not present in the Helm chart source.
2026-07-21 10:39:39 +07:00
duynguyen 2e5037d6f4 docs: trim README explanations, keep steps short 2026-07-14 19:35:34 +07:00
duynguyen c2c265c898 docs: never store argocd admin password hash in git
Drop .env/envsubst/bake-hash-into-values.yaml flow entirely. Chart's
configs.secret block is removed for good, so the rendered manifest
never declares admin.password/admin.passwordMtime. Password hash is
set once directly on the live argocd-secret via kubectl patch, and
survives every self-heal sync since ArgoCD never owns those fields.
2026-07-14 18:52:46 +07:00
duynguyen cffaa7449d fix argocd install + add root bootstrap Application manifest
- remove server.httproute from argocd values.yaml: helm install failed
  since Gateway API CRDs (installed by envoy-gateway, wave 2) don't
  exist yet; HTTPRoute is already applied manually in Phase 6
- add bootstrap-app.yaml as the Git-committed root/seed Application,
  replacing ad-hoc UI creation (GitOps anti-pattern: apps not stored
  in Git can't be recreated)
2026-07-14 17:50:06 +07:00
duynguyen 1432e9e114 docs: add missing argocd wave -1 to README 2026-07-14 17:27:47 +07:00
duynguyen 4c214a9928 add git ignore 2026-07-10 16:30:27 +07:00
duynguyen e10c72a34f add argocd self-managed Application (sync-wave -1) 2026-06-14 18:30:21 +07:00
duynguyen fd769794f9 use envsubst to inject password hash from .env into values.yaml at install time 2026-06-14 18:17:05 +07:00
duynguyen b6af771fd9 move password hash to values.yaml, simplify helm install command 2026-06-14 18:14:55 +07:00
duynguyen 40d7f794aa store bcrypt hash in .env, pass to helm via --set at install time 2026-06-14 18:10:39 +07:00
duynguyen 73b35bfd14 add .env for argocd admin password, update install command to set bcrypt hash 2026-06-14 18:09:16 +07:00
duynguyen f6469a73a2 set nfs server and path 2026-06-14 17:55:17 +07:00
duynguyen 083478f980 add README with step-by-step bootstrap instructions 2026-06-14 16:55:40 +07:00
duynguyen c44c2f6736 initial bootstrap: argocd, metallb, envoy-gateway, nfs-provisioner 2026-06-14 16:00:21 +07:00