SynfraCore
Synfracore
Start Learning
Navigation

Academies

Platform

RoadmapsLabsCertificationsInterviewPYQsAI AssistantCareer
Start Learning Free🗺️ Learning Roadmaps

ArgoCDInterview Q&A

Most asked interview questions with detailed answers

💬
Verified by practitioners with 5+ years production experience· Updated 2025 · SynfraCore ArgoCD Team
Expert Content

ArgoCD Interview Questions

Core Concepts

Q: What is ArgoCD and how does it implement GitOps?

ArgoCD is a declarative GitOps continuous delivery tool for Kubernetes. It follows the GitOps principle: Git is the single source of truth for both application code AND infrastructure configuration.

GitOps principles ArgoCD implements:

1.Declarative: Desired state described in Git (YAML manifests, Helm charts, Kustomize)
2.Versioned and immutable: Every change tracked in Git history — full auditability
3.Pulled automatically: ArgoCD continuously syncs cluster to match Git (pull, not push)
4.Continuously reconciled: ArgoCD detects drift and can auto-correct

How it works:

Developer pushes to Git → ArgoCD detects change → compares desired (Git) vs actual (K8s)
→ shows diff → syncs cluster to match Git → reports status

Without ArgoCD: CI pipeline pushes to cluster (push model — credentials in CI).

With ArgoCD: ArgoCD pulls from Git and pushes to cluster (no CI cluster access needed).


Q: Explain ArgoCD architecture.

[Git Repository] ← ArgoCD watches
[ArgoCD Server]
  ├── API Server: REST/gRPC API, web UI backend, auth
  ├── Repository Server: Clones repos, generates manifests (Helm, Kustomize, plain YAML)
  ├── Application Controller: Watches K8s state, compares with desired state, syncs
  └── Redis: Caching
[Kubernetes Cluster(s)] ← ArgoCD manages

ArgoCD runs in a Kubernetes cluster and can manage:

The same cluster it runs in (in-cluster)
External clusters (multi-cluster management)

Q: What is an ArgoCD Application? Explain the spec.

An Application is the core ArgoCD CRD — defines what to deploy and where.

yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io  # Cascade deletes resources on app deletion
spec:
  project: default
  
  source:
    repoURL: https://github.com/myorg/myapp-config
    targetRevision: HEAD    # Branch, tag, or commit SHA
    path: manifests/prod    # Path within repo
    # OR for Helm:
    # chart: myapp
    # helm:
    #   values: |
    #     image.tag: v2.0
    
  destination:
    server: https://kubernetes.default.svc  # Target cluster
    namespace: production
    
  syncPolicy:
    automated:
      prune: true       # Delete resources removed from Git
      selfHeal: true    # Auto-correct drift (someone manually changed cluster)
    syncOptions:
      - CreateNamespace=true  # Create namespace if not exists
      - PrunePropagationPolicy=foreground
      
  ignoreDifferences:  # Don't consider these fields when detecting drift
    - group: apps
      kind: Deployment
      jsonPointers:
        - /spec/replicas  # Ignore replica count (managed by HPA)

Q: Explain sync strategies — automated vs manual, and sync options.

Manual sync (default): ArgoCD detects drift and reports OutOfSync. Operator reviews and manually clicks sync or runs argocd app sync myapp.

Automated sync: ArgoCD auto-syncs when Git changes.

yaml
syncPolicy:
  automated:
    prune: false    # Don't delete resources removed from Git (safe default)
    selfHeal: false # Don't auto-correct manual cluster changes (safe default)

Production recommendation:

prune: true — important, or deleted resources stay forever
selfHeal: true — dangerous if you make emergency cluster changes; consider disabling

Sync options:

--force: Force sync even if no diff detected
--replace: Replace resources (use kubectl replace instead of apply) — for immutable fields
RespectIgnoreDifferences: Respect the ignoreDifferences spec during sync
ApplyOutOfSyncOnly: Only apply changed resources (not all)

Q: What is an AppProject? Why use them?

AppProject provides multi-tenancy and RBAC in ArgoCD — restricts what applications can do.

yaml
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-backend
  namespace: argocd
spec:
  description: Backend team's applications
  
  sourceRepos:          # Only these repos allowed
    - https://github.com/myorg/backend-*
    
  destinations:         # Only these clusters/namespaces
    - namespace: backend-*
      server: https://kubernetes.default.svc
      
  clusterResourceWhitelist:  # What cluster-level resources can be managed
    - group: ''
      kind: Namespace
      
  namespaceResourceBlacklist:  # What CAN'T be created in namespace
    - group: ''
      kind: ResourceQuota
      
  roles:
    - name: developer
      description: Can sync but not delete
      policies:
        - p, proj:team-backend:developer, applications, get, team-backend/*, allow
        - p, proj:team-backend:developer, applications, sync, team-backend/*, allow
      groups:
        - github-org:backend-team

Q: Explain App of Apps pattern and ApplicationSet.

App of Apps: One ArgoCD Application manages other ArgoCD Applications.

yaml
# "root" application manages the applications themselves
source:
  path: argocd-apps/    # Contains Application CRDs

Use case: Bootstrap entire cluster by deploying one application that creates all others.

ApplicationSet (more powerful): Automatically generate Applications from a template.

yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: guestbook
spec:
  generators:
    # Generate one app per cluster
    - clusters:
        selector:
          matchLabels:
            environment: production
    # OR generate one app per directory in repo
    - git:
        repoURL: https://github.com/myorg/apps
        revision: HEAD
        directories:
          - path: apps/*
    # OR generate from list
    - list:
        elements:
          - cluster: dev
            url: https://dev.cluster.local
          - cluster: prod
            url: https://prod.cluster.local
  template:
    metadata:
      name: '{{cluster}}-guestbook'
    spec:
      project: default
      source:
        path: guestbook
      destination:
        server: '{{url}}'
        namespace: guestbook

Q: How does ArgoCD handle secrets?

ArgoCD does NOT store secrets — it should never see secret values. Approaches:

1.Sealed Secrets (Bitnami): Encrypt secrets before committing to Git.

`bash

kubeseal --cert=cert.pem < secret.yaml > sealed-secret.yaml

# Commit sealed-secret.yaml to Git safely

`

2.External Secrets Operator: ArgoCD deploys ExternalSecret CRDs; operator pulls from Vault/AWS Secrets Manager at runtime.

`yaml

apiVersion: external-secrets.io/v1beta1

kind: ExternalSecret

spec:

secretStoreRef:

name: vault-backend

data:

- secretKey: password

remoteRef:

key: myapp/db

property: password

`

3.Vault Agent Injection: HashiCorp Vault sidecar injects secrets into pods.
4.SOPS (Mozilla Secrets OPerationS): Encrypt files in Git, decrypt during deployment.

Q: How do you implement progressive delivery with ArgoCD?

ArgoCD Rollouts (separate controller) enables advanced deployment strategies:

yaml
apiVersion: argoproj.io/v1alpha1
kind: Rollout
spec:
  strategy:
    canary:
      steps:
        - setWeight: 10          # Send 10% traffic to new version
        - pause: {duration: 5m}  # Wait 5 minutes
        - analysis:              # Run automated analysis
            templates:
              - templateName: success-rate
        - setWeight: 50          # Increase to 50%
        - pause: {duration: 10m}
        - setWeight: 100         # Full rollout
      trafficRouting:
        nginx:
          stableIngress: myapp-stable

AnalysisTemplate: Query Prometheus to decide whether to promote or abort.

yaml
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
spec:
  metrics:
    - name: success-rate
      interval: 1m
      successCondition: result[0] >= 0.95
      provider:
        prometheus:
          address: http://prometheus:9090
          query: |
            sum(rate(http_requests_total{status!~"5.."}[5m]))
            / sum(rate(http_requests_total[5m]))

Revision Notes

GITOPS PRINCIPLES: Declarative + Versioned + Pull-based + Continuously reconciled

ARGOCD COMPONENTS:
API Server: UI/API | Repo Server: manifest generation | App Controller: sync engine

APPLICATION CRD: source(repo+path) + destination(cluster+namespace) + syncPolicy
SYNC POLICY:
automated: false = manual | prune: true = delete removed resources
selfHeal: true = auto-correct drift (careful with emergency changes)

APPPROJECT: multi-tenancy, RBAC, restrict repos/clusters/resources per team

APP OF APPS: root app manages other apps (bootstrap pattern)
APPLICATIONSET: generate apps from template (clusters, directories, lists)

SECRETS: Never in Git in plain text
Sealed Secrets: encrypt before Git | External Secrets: pull from Vault at runtime
SOPS: file-level encryption | Vault Agent: sidecar injection

PROGRESSIVE DELIVERY (ArgoCD Rollouts):
Canary: gradual traffic shift with automated analysis
Blue-Green: instant switch with rollback capability
AnalysisTemplate: query Prometheus metrics to decide promote/abort
Share:
Join our Community
Daily tips, job alerts, interview help — join engineers learning together
Quick Check — ArgoCD
1 / 2

What is the most important concept to understand about ArgoCD for interviews?

Up Next
🔧
ArgoCDTroubleshooting
Debug common issues with root cause analysis
Also Worth Exploring
← Back to all ArgoCD modules
ProjectsTroubleshooting