Ghid GitOps în Producție cu ArgoCD: Sincronizare Declarativă din Git, Reconciliere Automată și Rollback Instant în Kubernetes (kubectl)

Noduri și Helm ArgoCD v2.10+ / K8s

Ghid de implementare a metodologiei GitOps în Kubernetes folosind ArgoCD: Git ca unică sursă de adevăr (Single Source of Truth), sincronizare automată continuă, detecția deviațiilor (Drift Detection) și auditul complet al modificărilor.

Sintaxă comandă
argocd app sync <app> | argocd app get <app> | syncPolicy: automated: selfHeal: true

Metodologia GitOps reprezintă standardul modern de operare a infrastructurilor cloud native: depozitul Git (GitHub, GitLab, Bitbucket) este unica sursă de adevăr (Single Source of Truth) pentru starea întregului cluster Kubernetes. În loc ca dezvoltatorii sau serverele de CI (GitHub Actions/Jenkins) să primească drepturi administrative de scriere prin kubectl apply (modelul tradițional de tip Push), un operator dedicat precum ArgoCD rulează în interiorul clusterului și trage modificările din Git (modelul de tip Pull), asigurând convergența automată.

De ce este GitOps superior conductelor tradiționale de Push?

  • Securitate sporită: Nu mai este nevoie să stocați fișiere kubeconfig administrative sau certificate TLS de cluster pe serverele de CI/CD externe.
  • Autovindecare și corectarea deviațiilor (Drift Detection): Dacă un inginer modifică manual un Deployment pe cluster prin kubectl edit, ArgoCD detectează imediat abaterea și suprascrie modificarea neautorizată cu starea oficială din Git (selfHeal)!
  • Rollback instantaneu în caz de incident: Revenirea la o versiune anterioară stabilă nu necesită relansarea unui pipeline complicat; se execută pur și simplu o comandă git revert în depozitul Git.
Definirea unei aplicații declarative în ArgoCD (Application CRD)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: magazin-online-api
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  # 1. SURSA ADEVĂRULUI (Depozitul Git):
  source:
    repoURL: 'https://github.com/companie/k8s-manifests.git'
    targetRevision: main
    path: overlays/production

  # 2. DESTINAȚIA (Clusterul și Namespace-ul de aplicare):
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: productia

  # 3. POLITICA DE RECONCILIERE AUTOMATĂ:
  syncPolicy:
    automated:
      prune: true    # Șterge automat resursele din cluster care au fost eliminate din Git!
      selfHeal: true # Repară automat orice deviație manuală făcută pe cluster!
    syncOptions:
      - CreateNamespace=true
      - ApplyOutOfSyncOnly=true

Fluxul Zilnic de Lucru în Echipă cu GitOps

  1. Dezvoltatorul deschide un Pull Request în depozitul de aplicație, modificând codul sursă.
  2. Pipeline-ul CI construiește imaginea Docker, o scanează de vulnerabilități cu Docker Scout și o publică cu eticheta v2.4.0.
  3. CI-ul deschide un commit în depozitul de infrastructură K8s, actualizând eticheta imaginii în fișierul kustomization.yaml.
  4. După aprobarea Pull Request-ului de către echipa DevOps și îmbinarea pe ramura main, ArgoCD detectează noul commit în câteva secunde și orchestrează lansarea fără downtime pe cluster.
Comenzi utile din ArgoCD CLI
# Verificăm starea de sincronizare a tuturor aplicațiilor din cluster:
argocd app list

# Forțăm manual sincronizarea unei aplicații fără a aștepta intervalul de polling:
argocd app sync magazin-online-api

# Vizualizăm istoricul lansărilor și diferențele față de starea curentă din Git:
argocd app history magazin-online-api
argocd app diff magazin-online-api