Bird
Raised Fist0
Kubernetesdevops~5 mins

GitOps with ArgoCD in Kubernetes - Commands & Configuration

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
GitOps with ArgoCD helps you keep your Kubernetes apps in sync with your Git repository automatically. It solves the problem of manually updating your cluster by watching your Git repo and applying changes for you.
When you want to automatically deploy app updates by just pushing code to Git.
When you want a clear history of all changes made to your Kubernetes apps.
When you want to avoid manual errors by having a single source of truth in Git.
When you want to easily roll back to previous app versions using Git history.
When you want to monitor app health and sync status from a web dashboard.
Config File - argocd-app.yaml
argocd-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

This file defines an ArgoCD Application resource.

metadata.name is the app name in ArgoCD.

spec.source tells ArgoCD where your Git repo is and which folder to use.

spec.destination tells ArgoCD which Kubernetes cluster and namespace to deploy to.

spec.syncPolicy.automated enables automatic syncing and cleanup of resources.

Commands
Create a separate namespace for ArgoCD to keep its components organized.
Terminal
kubectl create namespace argocd
Expected OutputExpected
namespace/argocd created
Install ArgoCD components into the cluster in the argocd namespace.
Terminal
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Expected OutputExpected
namespace/argocd created serviceaccount/argocd-server created service/argocd-server created deployment.apps/argocd-server created ... (other resources created)
Create an ArgoCD Application resource that tells ArgoCD which Git repo and path to sync to the cluster.
Terminal
kubectl apply -n argocd -f argocd-app.yaml
Expected OutputExpected
application.argoproj.io/example-app created
Check the status of your ArgoCD applications to see if they are synced and healthy.
Terminal
kubectl get applications -n argocd
Expected OutputExpected
NAME SYNCED HEALTH STATUS example-app Synced Healthy Synced to HEAD
Key Concept

If you remember nothing else from this pattern, remember: ArgoCD watches your Git repo and automatically applies changes to your Kubernetes cluster to keep them in sync.

Common Mistakes
Not creating the argocd namespace before installing ArgoCD.
ArgoCD installation fails or installs in the wrong namespace causing confusion.
Always run 'kubectl create namespace argocd' before installing ArgoCD.
Using incorrect repoURL or path in the Application manifest.
ArgoCD cannot find the Kubernetes manifests to deploy, so sync fails.
Double-check the repo URL and path point to a valid Git repo with Kubernetes manifests.
Not enabling automated sync in the Application spec.
Changes in Git won't automatically apply to the cluster; manual sync needed.
Set 'syncPolicy.automated' with 'prune' and 'selfHeal' true for automatic updates.
Summary
Create the argocd namespace to isolate ArgoCD components.
Install ArgoCD using the official manifest in the argocd namespace.
Define an Application resource pointing to your Git repo and app path.
Check application status to confirm ArgoCD synced your app to the cluster.

Practice

(1/5)
1. What is the main purpose of using ArgoCD in a Kubernetes environment with GitOps?
easy
A. To replace Kubernetes with a new container orchestration system
B. To manually deploy applications without using Git
C. To store container images in a private registry
D. To automatically sync Kubernetes cluster state with Git repository configurations

Solution

  1. Step 1: Understand GitOps concept

    GitOps uses Git as the single source of truth for application configurations.
  2. Step 2: Role of ArgoCD in GitOps

    ArgoCD automatically syncs Kubernetes cluster state to match the Git repo, ensuring deployments are consistent and automated.
  3. Final Answer:

    To automatically sync Kubernetes cluster state with Git repository configurations -> Option D
  4. Quick Check:

    GitOps = Auto-sync cluster with Git [OK]
Hint: Remember: ArgoCD syncs cluster state from Git automatically [OK]
Common Mistakes:
  • Thinking ArgoCD replaces Kubernetes
  • Believing ArgoCD deploys apps manually
  • Confusing ArgoCD with container registries
2. Which of the following is the correct ArgoCD CLI command to create an application named myapp syncing from Git repo https://github.com/example/repo.git with path k8s and target cluster https://kubernetes.default.svc?
easy
A. argocd app create myapp --repo https://github.com/example/repo.git --path k8s --dest-server https://kubernetes.default.svc --dest-namespace default
B. argocd create app myapp --repository https://github.com/example/repo.git --directory k8s --cluster https://kubernetes.default.svc
C. kubectl create app myapp --repo https://github.com/example/repo.git --path k8s
D. argocd app new myapp --repo-url https://github.com/example/repo.git --folder k8s --server https://kubernetes.default.svc

Solution

  1. Step 1: Identify correct ArgoCD CLI syntax

    The correct command uses argocd app create with flags --repo, --path, --dest-server, and --dest-namespace.
  2. Step 2: Compare options

    argocd app create myapp --repo https://github.com/example/repo.git --path k8s --dest-server https://kubernetes.default.svc --dest-namespace default matches the official syntax exactly. Others use incorrect commands or flags.
  3. Final Answer:

    argocd app create myapp --repo https://github.com/example/repo.git --path k8s --dest-server https://kubernetes.default.svc --dest-namespace default -> Option A
  4. Quick Check:

    Correct CLI syntax = argocd app create myapp --repo https://github.com/example/repo.git --path k8s --dest-server https://kubernetes.default.svc --dest-namespace default [OK]
Hint: Remember: 'argocd app create' plus repo, path, dest-server flags [OK]
Common Mistakes:
  • Using kubectl instead of argocd CLI
  • Wrong flag names like --repository or --folder
  • Incorrect command order or missing --dest-namespace
3. Given the following ArgoCD Application YAML snippet, what will happen when ArgoCD syncs this app?
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: sample-app
spec:
  source:
    repoURL: https://github.com/example/app-configs.git
    path: production
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated: {}
medium
A. ArgoCD will reject the app because syncPolicy is empty
B. ArgoCD will only show the app status but not deploy it automatically
C. ArgoCD will automatically deploy and keep the app in sync with the Git repo
D. ArgoCD will deploy the app once but not update it on Git changes

Solution

  1. Step 1: Understand syncPolicy automated

    The syncPolicy: automated: {} means ArgoCD will auto-sync changes from Git to cluster.
  2. Step 2: Effect on deployment

    ArgoCD will deploy the app initially and keep it updated automatically when Git changes.
  3. Final Answer:

    ArgoCD will automatically deploy and keep the app in sync with the Git repo -> Option C
  4. Quick Check:

    syncPolicy automated = auto deploy and sync [OK]
Hint: syncPolicy automated means auto deploy and keep in sync [OK]
Common Mistakes:
  • Thinking empty braces mean no automation
  • Assuming manual sync is required
  • Confusing syncPolicy with app rejection
4. You created an ArgoCD app but it shows OutOfSync status even after you committed changes to Git. Which of the following is the most likely cause?
medium
A. The app's syncPolicy is not set to automated, so manual sync is needed
B. The Git repository URL is incorrect and unreachable
C. The Kubernetes cluster is down and cannot apply changes
D. The app name in ArgoCD does not match the Git repo name

Solution

  1. Step 1: Understand OutOfSync status

    OutOfSync means cluster state differs from Git repo state.
  2. Step 2: Check syncPolicy effect

    If syncPolicy is not automated, ArgoCD won't auto-apply changes; manual sync is required.
  3. Final Answer:

    The app's syncPolicy is not set to automated, so manual sync is needed -> Option A
  4. Quick Check:

    OutOfSync + no automated sync = manual sync needed [OK]
Hint: OutOfSync often means no automated sync set [OK]
Common Mistakes:
  • Assuming cluster is down without checking
  • Blaming Git URL without error evidence
  • Thinking app name mismatch causes OutOfSync
5. You want to ensure that ArgoCD only deploys changes to your Kubernetes cluster after manual approval, but still track changes in Git automatically. Which configuration should you use in your ArgoCD Application YAML?
hard
A. Set syncPolicy: automated: {} to enable auto deploy
B. Omit syncPolicy and use manual sync to approve changes
C. Set syncPolicy: automated: null to disable auto deploy
D. Set syncPolicy: automated: { prune: true, selfHeal: true } for auto deploy with cleanup

Solution

  1. Step 1: Understand manual approval need

    To require manual approval before deployment, auto sync must be disabled.
  2. Step 2: Configure syncPolicy accordingly

    Omitting syncPolicy disables auto sync, so ArgoCD tracks Git but waits for manual sync.
  3. Final Answer:

    Omit syncPolicy and use manual sync to approve changes -> Option B
  4. Quick Check:

    No syncPolicy = manual approval required [OK]
Hint: No syncPolicy means manual sync only [OK]
Common Mistakes:
  • Using automated sync disables manual approval
  • Setting automated with prune/selfHeal still auto deploys
  • Setting automated: null is invalid syntax