Files
hermes-skills/devops/rke2-cluster-administration/references/argocd-self-management-cutover-2026-07.md
T
Debian 01bd921ced feat: add home-assistant-dashboard-conventions skill + update multiple skills
- New: smart-home/home-assistant-dashboard-conventions (Mushroom cards, view tabs, no Bubble Cards)
- Updated: rke2, ceph, galera, proxmox, brainstorming, compound-learning, 1password-cli, smart-home-automation skills
- New references: ceph-cluster-administration, docker-volume-forensics, ceph-crush-weight, ceph-ec-mixed-size
2026-07-14 18:35:16 +00:00

2.3 KiB

ArgoCD Self-Management Cutover — 2026-07-14

Context

Migrating ArgoCD's Git source from external Gitea (CT108, LXC, 10.0.30.105:3000) to K8s-internal Gitea (Helm chart in gitea namespace, reachable via Traefik VIP 10.0.30.203). The chicken-and-egg problem: ArgoCD deploys Gitea, but ArgoCD also pulls from Gitea.

Sequence

1. CoreDNS Internal DNS Override

Added hosts plugin to CoreDNS via HelmChartConfig so git.schoen.codes resolves to 10.0.30.203 (Traefik VIP) inside K8s — no public DNS needed.

File: clusters/main/operators/coredns-config.yaml

Key pitfall: Initial attempt used valuesContent: corefile: | — silently ignored. The RKE2 CoreDNS chart uses servers[].plugins[] structure. Fixed by using the correct chart values structure.

Key pitfall: HelmChartConfig was synched by ArgoCD but ConfigMap didn't update until we directly patched it + waited 30s for CoreDNS reload plugin to pick up the change.

2. ArgoCD Repository Secret

Created argocd-repo-k8s-gitea secret in argocd namespace with URL, username, password, type=git.

Critical pitfall: Secret existed but ArgoCD showed authentication required: Unauthorized because the secret was NOT labeled with argocd.argoproj.io/secret-type=repository. Without this label, ArgoCD does not recognize the secret as a repository credential.

3. ArgoCD Application URL Patching

Patched all 7 Applications (root + 6 children) from http://10.0.30.105:3000/dominik/iac-homelab.git to http://git.schoen.codes/dominik/iac-homelab.git using kubectl patch --type json.

4. Verification

  • Root app: Synced/Healthy
  • Revision: commit hash from new Gitea
  • All child apps converging

Result

ArgoCD now pulls from K8s Gitea via:

ArgoCD → git.schoen.codes → CoreDNS → 10.0.30.203 (Cilium VIP)
    → Traefik DaemonSet → Gitea pod

The entire GitOps loop is self-contained in K8s. CT108 kept as fallback.

Files Changed

  • clusters/main/operators/coredns-config.yaml — CoreDNS HelmChartConfig
  • clusters/main/proxy/traefik-lb-service.yaml — Traefik LoadBalancer VIP
  • clusters/main/proxy/namespace.yaml — proxy namespace
  • clusters/main/apps/proxy.yaml — ArgoCD app for proxy namespace
  • docs/plans/2026-07-14-traefik-ct99999-k8s-migration.md — migration plan