flowchart LR
A[Ansible bootstrap] --> B[ArgoCD controller]
B --> C[ApplicationSet homelab-root]
C --> D[Apps descomentadas, por olas -1 a 3]
D --> E[Apps manual]
Cada fila es una Application de ArgoCD (salvo manifiestos auxiliares).
Sync auto = la sincroniza homelab-root (si está descomentada en root-appset.yaml); manual = queda comentada hasta que la actives.
ApplicationSet: genera la Application raíz homelab-root con las apps descomentadas de su lista, desplegadas por olas. Es el único kubectl apply GitOps tras tener el controller; ArgoCD no lo gestiona, así que se vuelve a aplicar con kubectl apply -f cada vez que cambia la lista.
El CNI (Container Network Interface) se elige en Fase 3 — K3s (k3s_install.core.cni).
Por defecto Flannel embebido (Ansible, sin Application). Las apps anteriores
son alternativa GitOps si K3s (distribución ligera de Kubernetes) ya tiene --flannel-backend=none. Ver
playbook-options — CNI.
arc-runnersOutOfSync y el pod del listener se reinicia cada pocos minutos
ArgoCD poda en bucle los recursos que crea el controlador de ARC (AutoscalingListener, Role, RoleBinding: copian la etiqueta app.kubernetes.io/instance). Se corrige con application.resourceTrackingMethod: annotation en argocd-cm (ya está en gitops/argocd/config). Comprueba: kubectl -n argocd get cm argocd-cm -o jsonpath='{.data.application\.resourceTrackingMethod}' → annotation; si no, sincroniza argocd y reinicia el controlador: kubectl -n argocd rollout restart statefulset argocd-application-controller