ArgoCD
Pense-bête ArgoCD
Section titled “Pense-bête ArgoCD”Débloquer une application ArgoCD “Fantôme”
Section titled “Débloquer une application ArgoCD “Fantôme””Le contexte : Vous avez supprimé une application depuis l’interface web ArgoCD ou via Git, mais elle reste affichée avec une icône de chargement infinie et le statut Deleting.
Le problème d’architecture : ArgoCD attache un “Finalizer” (souvent resources-finalizer.argocd.argoproj.io) à l’objet Application. Ce mécanisme de Kubernetes interdit la suppression de l’objet tant qu’ArgoCD n’a pas confirmé que toutes les ressources enfants (pods, services, ingress…) ont bien été détruites. Si une seule ressource enfant bloque, l’application entière reste bloquée.
La solution : Retirer brutalement le finalizer en patchant l’objet directement sur le cluster où tourne ArgoCD.
kubectl patch applications.argoproj.io <NOM_DE_L_APP> -n argocd -p '{"metadata":{"finalizers":null}}' --type mergeDès que cette commande est lancée, l’application disparaîtra instantanément de l’interface.
Cas de force majeure : Forcer la suppression d’une ressource K8s
Section titled “Cas de force majeure : Forcer la suppression d’une ressource K8s”Le contexte : C’est souvent la cause racine du problème précédent. Si l’application ArgoCD bloquait, c’est parce qu’une ressource K8s spécifique (comme un Ingress ou une ressource Custom) refusait de mourir.
Pourquoi ça arrive ? Très souvent, cela concerne des ressources liées à des opérateurs externes ou des fournisseurs cloud. Par exemple, un Ingress attend que l’Ingress Controller (ou le cloud provider) supprime le Load Balancer physique avant de valider sa propre suppression. Si le contrôleur est planté, la ressource K8s attendra pour l’éternité.
La solution : Réduire le délai de grâce de Kubernetes à zéro et forcer la suppression.
Exemple avec un Ingress bloqué
Section titled “Exemple avec un Ingress bloqué”kubectl delete ingress <NOM_INGRESS> -n <NAMESPACE> --force --grace-period=0Exemple avec une ressource Custom (CRD) bloquée
Section titled “Exemple avec une ressource Custom (CRD) bloquée”Cela arrive souvent avec des outils d’observabilité ou de sécurité (ex: OpenTelemetry, Cert-Manager).
kubectl delete instrumentation.opentelemetry.io <NOM_INSTRUMENTATION> -n <NAMESPACE> --force --grace-period=0⚠️ Avertissement : Utiliser
--force --grace-period=0ne détruit que l’objet logique dans la base de données de Kubernetes (etcd). Si cette ressource pilotait une infrastructure externe (comme un Load Balancer AWS/Azure ou un volume persistant), cette infrastructure externe n’a peut-être pas été supprimée ! Pensez à vérifier du côté de votre Cloud Provider pour éviter les coûts inutiles (ressources orphelines).