ArgoCD App Deployment Guide & Best Practices

ArgoCD ensures your Kubernetes deployments are always in the desired state through GitOps. This guide covers installation prerequisites, automation of synchronization, rollback processes, and best practices like setting up health checks and securing ArgoCD installations...

Key Takeaways

  • ArgoCD is a powerful tool for managing Kubernetes deployments through GitOps, ensuring your applications are always in the desired state.


  • Installation requires specific prerequisites such as a Kubernetes cluster and access to a Git repository.


  • Using ArgoCD, you can automate the synchronization and rollback processes, making deployments more reliable.


  • Best practices include separating Git repositories, setting up health checks, and securing your ArgoCD installation.


  • ArgoCD supports various config management tools like Helm and Kustomize, providing flexibility in deployment strategies.


ArgoCD App Deployment Guide & Best Practices

Why Choose ArgoCD for Kubernetes Deployments

ArgoCD is a game-changer for Kubernetes deployments. It leverages GitOps principles to provide a declarative, continuous delivery solution. This means you can specify the desired state of your applications in a Git repository, and ArgoCD ensures that your live applications always match this state.

One of the most compelling reasons to use ArgoCD is its ability to automate the deployment process. By using Git as the single source of truth, you can easily track changes, roll back to previous states, and collaborate with your team more effectively.

How ArgoCD Achieves Continuous Delivery

Continuous delivery is all about getting your code changes into production quickly and safely. ArgoCD excels at this by continuously monitoring your Git repository for changes. When a new commit is detected, ArgoCD automatically synchronizes your Kubernetes cluster to match the updated state.

Besides that, ArgoCD provides a detailed dashboard where you can monitor the status of your deployments. You can see which resources are up-to-date, which are out-of-sync, and even perform manual syncs if needed. For those new to Kubernetes, here’s a helpful guide on first app deployment on Kubernetes.

Monitoring and Correcting Configuration Drift

Configuration drift occurs when the actual state of your applications diverges from the desired state defined in your Git repository. This can happen for various reasons, such as manual changes or unexpected errors. ArgoCD continuously monitors your applications to detect any drift.

When ArgoCD identifies a drift, it can automatically correct it by reapplying the desired state from the Git repository. This ensures that your applications remain consistent and reduces the risk of unexpected issues.

argocd app deployment guide

“ArgoCD: Tutorial & Examples” from www.kubecost.com and used with no modifications.

Setting Up ArgoCD

Prerequisites for Installation

  • A running Kubernetes cluster


  • kubectl installed and configured to access your cluster


  • A Git repository containing your application manifests


Step-by-Step Installation Guide

Setting up ArgoCD is straightforward. Follow these steps to get started:

  1. Install the ArgoCD command-line tool:


    brew install argocd

  2. Create a namespace for ArgoCD in your Kubernetes cluster:


    kubectl create namespace argocd

  3. Install ArgoCD using the following command:


    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

  4. Verify the installation by checking the status of the ArgoCD pods:


    kubectl get pods -n argocd

Connecting ArgoCD to Your Git Repository

Once ArgoCD is installed, the next step is to connect it to your Git repository. This allows ArgoCD to pull your application manifests and manage your deployments.

First, log in to the ArgoCD server using the CLI:

argocd login <ARGOCD_SERVER>

Replace <ARGOCD_SERVER> with the actual server address. You’ll be prompted for a username and password. The default username is admin, and you can retrieve the initial password with this command. For more detailed steps, check out our GitOps guide.

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

Next, create an application in ArgoCD:

argocd app create <APP_NAME> \--repo <REPO_URL> \
--path <APP_PATH> \
--dest-server https://kubernetes.default.svc \
--dest-namespace <NAMESPACE>

Replace <APP_NAME>, <REPO_URL>, <APP_PATH>, and <NAMESPACE> with your specific values.

Configuring ArgoCD for Your Applications

Creating and Managing Applications in ArgoCD

Creating and managing applications in ArgoCD is a breeze. After connecting to your Git repository, you can define multiple applications and manage them from the ArgoCD dashboard.

To create an application, use the following command:

argocd app create <APP_NAME> \
--repo <REPO_URL> \
--path <APP_PATH> \
--dest-server https://kubernetes.default.svc \
--dest-namespace <NAMESPACE>

Once created, you can manage the application using various ArgoCD commands. For example, to sync an application, use:

argocd app sync <APP_NAME>
  • argocd app list – Lists all applications


  • argocd app delete <APP_NAME> – Deletes an application


  • argocd app history <APP_NAME> – Shows the deployment history


Config Management Tools Supported By ArgoCD

ArgoCD supports various configuration management tools, making it flexible for different deployment strategies. The most commonly used tools are Helm and Kustomize.

Helm is a package manager for Kubernetes, which allows you to define, install, and upgrade complex Kubernetes applications. ArgoCD can directly manage Helm charts, making it easy to deploy and update your applications.

Kustomize is another powerful tool that lets you customize Kubernetes objects through a file-based approach. It is natively supported by kubectl and integrates seamlessly with ArgoCD.

Using Helm and Kustomize with ArgoCD

Helm and Kustomize are two powerful tools that can significantly enhance your ArgoCD deployment strategy. Each has its unique advantages, and understanding how to use them with ArgoCD can make your deployments more efficient and flexible.

  • Helm: Helm is a package manager for Kubernetes that simplifies the deployment of complex applications. It uses charts, which are collections of files that describe a related set of Kubernetes resources. With Helm, you can easily define, install, and upgrade even the most complex Kubernetes applications.


  • Kustomize: Kustomize allows you to customize Kubernetes objects through a file-based approach. It enables you to define a base set of resources and then apply overlays to modify these resources for different environments. Kustomize is natively supported by kubectl and integrates seamlessly with ArgoCD.


To use Helm with ArgoCD, you need to specify the Helm chart in your application definition. Here’s an example:

argocd app create my-helm-app \
--repo https://my-helm-repo.git \
--path charts/my-app \
--dest-server https://kubernetes.default.svc \
--dest-namespace default \
--helm-set key=value

For Kustomize, you simply need to specify the path to your Kustomize configuration:

argocd app create my-kustomize-app \
--repo https://my-git-repo.git \
--path kustomize/my-app \
--dest-server https://kubernetes.default.svc \
--dest-namespace default

By leveraging these tools, you can create more modular and reusable Kubernetes configurations, making your deployment process more efficient and manageable.

Deployment Best Practices

Following best practices is crucial for successful deployments with ArgoCD. These practices help ensure that your deployments are reliable, secure, and maintainable. Let’s explore some of the most important best practices for using ArgoCD.

Firstly, always separate your Git repositories. This practice helps in managing your codebase more efficiently and reduces the risk of accidental changes. For example, you can have separate repositories for your application code, infrastructure code, and configuration files. Additionally, consider proactive monitoring to prevent critical issues in your Kubernetes environment.

Automating sync and rollback processes is another best practice. ArgoCD allows you to automate these processes, ensuring that your applications are always in the desired state. This reduces manual intervention and minimizes the risk of errors.

  • Separate Git Repositories: Keep your application code, infrastructure code, and configuration files in separate repositories.


  • Automate Sync and Rollback: Use ArgoCD’s automation capabilities to keep your applications in sync with the desired state and to roll back changes if needed.


  • Set Up Health Checks: Ensure that your applications are healthy by setting up health checks. This helps in identifying issues early and taking corrective actions promptly.


  • Access Control and Security: Implement strict access control and security measures to protect your ArgoCD installation and your applications.


Separating Git Repositories

Separating your Git repositories is a fundamental best practice for managing your codebase. By keeping your application code, infrastructure code, and configuration files in separate repositories, you can manage each component more effectively and reduce the risk of accidental changes.

For instance, you can have a repository for your application code, another for your infrastructure as code (IaC), and a third one for your configuration files. This separation allows you to apply different access controls and CI/CD pipelines for each repository, enhancing security and manageability.

Automating Sync and Rollback

Automating the sync and rollback processes is crucial for maintaining the desired state of your applications. ArgoCD provides robust automation capabilities that can help you achieve this.

To automate sync, you can use the argocd app sync command, which synchronizes your application with the desired state defined in your Git repository. For example:

argocd app sync my-app

In case of issues, you can roll back to a previous state using the argocd app rollback command. For example:

argocd app rollback my-app 1

By automating these processes, you can ensure that your applications are always in the desired state and can quickly recover from any issues.

Setting Up Health Checks

Health checks are essential for ensuring that your applications are running smoothly. ArgoCD allows you to set up health checks for your applications, helping you identify and address issues promptly.

To set up health checks, you can define health checks in your application manifests. Here’s an example of a health check for a Kubernetes deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app-image
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10

By setting up health checks, you can ensure that your applications are healthy and take corrective actions if any issues are detected.

Access Control and Security

Access control and security are critical aspects of managing your ArgoCD installation and your applications. Implementing strict access controls helps protect your resources from unauthorized access and potential security breaches.

ArgoCD provides several features to enhance security, such as role-based access control (RBAC) and single sign-on (SSO) integration. By configuring these features, you can ensure that only authorized users have access to your ArgoCD installation and your applications.

Real-world Examples of ArgoCD Deployments

Understanding real-world examples can provide valuable insights into how ArgoCD can be used effectively in different scenarios. Let’s explore two case studies that demonstrate the power of ArgoCD in managing complex deployments.

Case Study: Multi-Cluster Management

Managing multiple Kubernetes clusters can be challenging, but ArgoCD makes it easier. In this case study, a large organization used ArgoCD best practices to manage their multi-cluster environment efficiently.

The organization had several Kubernetes clusters across different regions. They used ArgoCD to manage the deployments for each cluster from a central Git repository. By doing so, they ensured consistency across all clusters and simplified their deployment process.

Case Study: Zero-Downtime Deployments

Zero-downtime deployments are crucial for applications that require high availability. In this case study, a financial services company used ArgoCD to achieve zero-downtime deployments for their critical applications.

The company used ArgoCD’s automation capabilities to synchronize their applications with the desired state defined in their Git repository. They also set up health checks and automated rollbacks to ensure that any issues were detected and addressed promptly. As a result, they were able to achieve zero-downtime deployments and maintain high availability for their applications.

Advanced ArgoCD Tips and Techniques

To get the most out of ArgoCD, it’s essential to understand some advanced tips and techniques. These can help you customize your deployments, enhance your monitoring capabilities, and integrate ArgoCD with your CI/CD pipelines.

One of the advanced techniques is customizing sync waves and hooks. Sync waves allow you to control the order in which resources are synchronized, while hooks provide a way to execute custom logic during the synchronization process.

Customizing Sync Waves and Hooks

Sync waves and hooks are powerful features that allow you to customize the synchronization process in ArgoCD. Sync waves control the order in which resources are synchronized, while hooks provide a way to execute custom logic during the synchronization process.

To define sync waves, you can use the argocd.argoproj.io/sync-wave annotation in your manifests. For example:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  annotations:
    argocd.argoproj.io/sync-wave: "1"
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app-image
        ports:
        - containerPort: 80

Hooks can be defined using the argocd.argoproj.io/hook annotation. For example:

apiVersion: batch/v1
kind: Job
metadata:
  name: my-hook-job
  annotations:
    argocd.argoproj.io/hook: PreSync
spec:
  template:
    spec:
      containers:
      - name: my-hook-container
        image: my-hook-image
      restartPolicy: Never

By customizing sync waves and hooks, you can control the order of resource synchronization and execute custom logic during the synchronization process, making your deployments more flexible and efficient.

Using ArgoCD Notifications

ArgoCD Notifications is an add-on that provides a way to send notifications about the status of your applications. You can configure notifications for various events, such as application sync, health status changes, and more.

To set up ArgoCD Notifications, follow these steps:

  1. Install the ArgoCD Notifications add-on:


    kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/stable/manifests/install.yaml

  2. Create a ConfigMap to define your notification templates and triggers:


    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: argocd-notifications-cm
    namespace: argocd
    data:
    triggers: |
    - name: on-sync-succeeded
    condition: app.status.operationState.phase == 'Succeeded'
    template: app-sync-succeeded
    templates: |
    - name: app-sync-succeeded
    title: Application {{.app.metadata.name}} has been successfully synchronized
    body: |
    Application {{.app.metadata.name}} has been successfully synchronized to {{.app.spec.source.targetRevision}}.

  3. Configure your notification channels (e.g., Slack, email) in a Secret:


    apiVersion: v1
    kind: Secret
    metadata:
    name: argocd-notifications-secret
    namespace: argocd
    stringData:
    slack-token: xoxb-your-slack-token

With ArgoCD Notifications, you can stay informed about the status of your applications and take prompt actions when needed.

Integrating ArgoCD with CI/CD Pipelines

Integrating ArgoCD with your CI/CD pipeline can streamline your deployment process and ensure that your applications are always in sync with the desired state. This integration allows you to automate the deployment of your applications whenever there are changes in your codebase.

To integrate ArgoCD with a CI/CD pipeline, you can use webhooks to trigger ArgoCD syncs whenever there are changes in your Git repository. Most CI/CD tools, such as Jenkins, GitLab CI, and GitHub Actions, support webhooks.

Here’s an example of how to set up a webhook with GitHub Actions:

name: Deploy to Kubernetes

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Sync ArgoCD application
        run: |
          argocd app sync my-app
        env:
          ARGOCD_SERVER: ${{ secrets.ARGOCD_SERVER }}
          ARGOCD_USERNAME: ${{ secrets.ARGOCD_USERNAME }}
          ARGOCD_PASSWORD: ${{ secrets.ARGOCD_PASSWORD }}

In this example, the workflow triggers a sync of the ArgoCD application whenever there is a push to the main branch. You can adapt this example to fit your CI/CD tool and deployment needs.

Common ArgoCD Troubleshooting Tips

Troubleshooting is an essential skill when working with any deployment tool. ArgoCD is no exception. Let’s go over some common issues you might encounter and how to resolve them.

Resolving Sync Errors

Sync errors can occur for various reasons, such as configuration issues or network problems. To resolve sync errors, follow these steps:

  1. Check the ArgoCD application status:


    argocd app get my-app

  2. Review the error message and logs:


    argocd app logs my-app

  3. Ensure that the Kubernetes cluster is accessible and the resources are correctly defined in your manifests.


  4. Fix any issues in your manifests and try syncing again:


    argocd app sync my-app

Debugging Failed Deployments

Failed deployments can be frustrating, but with the right approach, you can quickly identify and fix the issues. Here’s how to debug failed deployments:

  1. Check the status of the deployment:


    kubectl get deployments -n <NAMESPACE>

  2. Review the deployment events and logs:


    kubectl describe deployment <DEPLOYMENT_NAME> -n <NAMESPACE>
    kubectl logs deployment/<DEPLOYMENT_NAME> -n <NAMESPACE>

  3. Identify any errors or issues in the events and logs, such as image pull errors, insufficient resources, or configuration issues.


  4. Fix the identified issues and redeploy the application:


    kubectl apply -f <MANIFEST_FILE> -n <NAMESPACE>

Handling Resource Conflicts

Resource conflicts can occur when multiple applications or processes try to modify the same Kubernetes resources. To handle resource conflicts, follow these steps:

  • Identify the conflicting resources by reviewing the ArgoCD application status and logs.


  • Determine the root cause of the conflict, such as overlapping resource definitions or manual changes.


  • Resolve the conflict by updating the resource definitions in your Git repository and syncing the application:


    argocd app sync my-app

  • Consider using resource labels and annotations to avoid conflicts in the future.


Conclusion: Empowering DevOps with ArgoCD

ArgoCD is a powerful tool that can significantly enhance your Kubernetes deployment process. By leveraging GitOps principles, ArgoCD ensures that your applications are always in the desired state, reduces manual intervention, and minimizes the risk of errors.

By following best practices, such as separating Git repositories, automating sync and rollback processes, and setting up health checks, you can ensure that your deployments are reliable, secure, and maintainable. Additionally, integrating ArgoCD with your CI/CD pipelines and using advanced techniques, such as customizing sync waves and hooks, can further streamline your deployment process.

With ArgoCD, you can empower your DevOps team to manage complex deployments more efficiently and effectively, ultimately improving the overall reliability and performance of your applications.

Frequently Asked Questions (FAQ)

What are the system requirements for ArgoCD?

ArgoCD requires a running Kubernetes cluster, kubectl installed and configured to access the cluster, and a Git repository containing your application manifests. Additionally, ensure that your Kubernetes cluster meets the minimum resource requirements for running ArgoCD components.

Can ArgoCD handle multiple Kubernetes clusters?

Yes, ArgoCD can manage multiple Kubernetes clusters. You can configure ArgoCD to deploy applications to different clusters by specifying the destination cluster in your application definitions. This allows you to manage multi-cluster environments efficiently from a central Git repository.

How do I secure my ArgoCD installation?

  • Implement role-based access control (RBAC) to restrict access to ArgoCD resources.


  • Enable single sign-on (SSO) integration for secure authentication.


  • Use network policies to control access to the ArgoCD server and other components.


  • Regularly update ArgoCD to the latest version to ensure that security patches are applied.


By following these security best practices, you can protect your ArgoCD installation and your applications from unauthorized access and potential security breaches.

Can ArgoCD rollback to a previous application state?

Yes, ArgoCD supports rolling back to a previous application state. You can use the argocd app rollback command to roll back to a specific revision. For example:

argocd app rollback my-app 1

This command rolls back the application to the first revision, allowing you to quickly recover from any issues.

Related Posts

Don’t let DevOps stand in the way of your epic goals.

Set Your Business Up To Soar.

Book a Free Consult to explore how SlickFinch can support your business with Turnkey and Custom Solutions for all of your DevOps needs.