Join our Discord Server
Collabnix Team The Collabnix Team is a diverse collective of Docker, Kubernetes, and IoT experts united by a passion for cloud-native technologies. With backgrounds spanning across DevOps, platform engineering, cloud architecture, and container orchestration, our contributors bring together decades of combined experience from various industries and technical domains.

How to Set Up GitOps with ArgoCD and Kubernetes: A Complete Tutorial

7 min read

How to Set Up GitOps with ArgoCD and Kubernetes: A Complete Tutorial

In the fast-paced world of modern application development, DevOps practices have become essential. Among these, GitOps stands out as a vital methodology, streamlining the deployment of applications while maintaining a robust audit trail. By leveraging Git as the source of truth, GitOps ensures more structured, automated, and efficient management of infrastructure. This feature makes it particularly critical in managing Kubernetes configurations, as Kubernetes itself is declaratively configured through YAML manifests.

Imagine a scenario where you’re managing multiple microservices across various environments. Keeping the configurations synchronized and consistent while deploying new features can turn into an overwhelming task. This is where GitOps, a practice that uses Git repositories to manage infrastructure and applications, comes into play. Combining GitOps with tools like ArgoCD and Kubernetes, developers can achieve continuous delivery and automated deployment seamlessly, significantly cutting down the time and human errors usually associated with these processes.

The focus of this tutorial is to walk you through setting up GitOps using ArgoCD on a Kubernetes cluster. ArgoCD is a declarative continuous delivery tool that automates Kubernetes deployment based on the state defined in a Git repository. It’s a powerful tool that bridges the gap between development and operations, ensuring that deployments are not only automated but also reliable and reproducible.

Before diving into the setup process, let’s explore some prerequisites and key concepts that will be integral to our journey. This understanding will lay the groundwork for a smoother transition once we delve into the technical aspects of this tutorial.

Prerequisites and Setup

To successfully implement GitOps with ArgoCD, you’ll need a few components in place. Understanding and setting up these prerequisites is crucial for an error-free setup. These include a fundamental understanding of Kubernetes, a Kubernetes cluster running (which can be either local using tools like Minikube or Docker Desktop, or on a cloud provider such as AWS, GCP, or Azure), and a Git repository to serve as the source of truth for your application deployments. Additionally, familiarize yourself with basic Git commands since Git will be your primary interface for pushing application states.

Step 1: Kubernetes Cluster Setup

First, you must have a Kubernetes cluster up and running. If you’re experienced with cloud providers, setting up a cluster on AWS EKS or Google Kubernetes Engine (GKE) may be viable. Alternatively, for local development, Minikube provides an excellent sandbox environment to test and run the Kubernetes cluster locally.

minikube start --cpus 4 --memory 8192

This command is used to start Minikube with 4 CPUs and 8192 MB of memory. It is essential to ensure that your machine has sufficient resources to allocate. Minikube simplifies the setup of a Kubernetes cluster by providing all the necessary components out of the box, which can be especially helpful during local development and testing phases. However, be aware that resource constraints on your local machine can lead to potential application deployment issues, especially when scaling up your Kubernetes setup.

Git Repository Setup

Once your Kubernetes cluster is operational, the next step is to set up a Git repository. This repository will serve as the single source of truth for your application’s desired state, containing manifests that describe all Kubernetes objects like pods, services, and configurations that make up your application.

git init my-argocd-app
cd my-argocd-app
touch README.md
mkdir manifests

These commands initialize a Git repository locally, create a directory for storing your application manifests, and prepare a basic README file for documentation purposes. This structured organization of your Git repository is essential for maintaining clarity and organization as your project grows, ensuring that collaboration between team members is seamless and scalable. Within the ‘manifests’ directory, Kubernetes manifests will define how resources are supposed to be deployed on the cluster.

Installing ArgoCD

ArgoCD is the backbone of our GitOps setup, providing the automation to manage the state defined in Git repositories and synchronize it with your Kubernetes cluster. To set up ArgoCD, you need to use predefined Kubernetes YAML files provided by the ArgoCD official installation guides.

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

The above commands will create a namespace dedicated to ArgoCD and apply the installation manifests. These steps deploy ArgoCD and its components into your Kubernetes cluster. By housing ArgoCD within its namespace, you effectively isolate its resources and configuration, which adds a layer of organizational clarity and security. As always, ensure your Kubernetes configuration context is pointing to the correct cluster and namespace before applying any configuration.

Once installed, you can check the status of the ArgoCD components:

kubectl get pods -n argocd

Each pod listed should eventually show a status of ‘Running’. This indicates that ArgoCD has been successfully deployed and is now operational. Keep in mind potential network issues or cluster resource constraints that might delay the pod’s initialization. Troubleshooting involves checking logs and events through kubectl to diagnose any problems arising from installations or networking conflicts.

Accessing the ArgoCD Dashboard

ArgoCD provides a powerful web-based interface for monitoring and managing application deployments. To access the ArgoCD UI, you’ll need to access it via a service exposed on your cluster. By default, the service is not exposed via an external IP, so you may need to set up port forwarding:

kubectl port-forward svc/argocd-server -n argocd 8080:443

This command forwards the local port 8080 to the service within the cluster. This configuration allows you to access the ArgoCD dashboard locally within your browser at http://localhost:8080. While this setup works perfectly for initial trial runs and local development environments, configuring a more secure production-level access method using Ingress controllers or Load Balancers is advisable to prevent any unauthorized access.

You’ll need the admin password for the first-time login, which can be retrieved using the following command:

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

This command extracts and decodes the base64-encoded password set during the installation. Once logged in, it’s highly recommended to change this password through the ArgoCD UI or CLI to ensure security and mitigate the risk of unauthorized access. The dashboard will present you with detailed information about application states, sync statuses, and any issues present across your environments, giving you full operational visibility.

Connecting ArgoCD to the Git Repository

At the heart of GitOps is the principle of using a Git repository as the single source of truth for your application infrastructure, and this starts with connecting ArgoCD to your Git repository. This enables ArgoCD to monitor the repository for changes and sync the state of your Kubernetes cluster accordingly.

Step 1: Accessing the ArgoCD CLI

First, ensure that you have access to the ArgoCD CLI. If you haven’t already installed it, you can do so by downloading it from the official ArgoCD releases page. Choose the appropriate binary for your operating system and move it to your $PATH.

curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.3.2/argocd-linux-amd64
chmod +x /usr/local/bin/argocd

Once installed, verify your CLI setup with:

argocd version

This command should display the current version of ArgoCD installed.

Step 2: Setting Up Repository Credentials

To allow ArgoCD to interact with your Git repository, you’ll need to set up the required authentication credentials. Typically, this could be SSH keys or HTTPS authentication tokens. For simplicity and best practices, using SSH keys is recommended.

argocd repo add git@github.com:/.git \
--ssh-private-key-path ~/.ssh/id_rsa

Replace / with the path to your Git repository. This command adds your repository to ArgoCD, enabling it to track changes within.

Application Configuration and Deployment

Once you have connected your Git repository, the next step involves creating and organizing your Kubernetes manifests in your repository. ArgoCD will watch these manifests and automatically apply changes to your cluster.

Organizing Manifests in Git

Organize your Kubernetes manifests to reflect your application’s architecture. A well-structured repository is crucial for maintainability and scalability.

Below is a common structure:

.
|-- base
|   |-- kustomization.yaml
|   |-- deployment.yaml
|   |-- service.yaml
|-- overlays
    |-- production
    |   |-- kustomization.yaml
    |   |-- deployment-patch.yaml
    |-- staging
        |-- kustomization.yaml
        |-- deployment-patch.yaml

This layout uses Kustomize for configuration management, which ArgoCD supports out of the box.

Deploying with ArgoCD

After organizing your manifests, it’s time to create an application in ArgoCD. This application links the manifests in your repository to specific clusters and namespaces.

argocd app create my-app \
--repo git@github.com:/.git \
--path overlays/production \
--dest-server https://kubernetes.default.svc \
--dest-namespace default \
--sync-policy automated

This command specifies the repository and path to watch, the destination Kubernetes server, and namespace, and sets automated sync policy to enable continuous deployment.

For more insights on managing Kubernetes applications, explore Kubernetes tutorials on Collabnix.

Advanced Features and Management

ArgoCD offers advanced features that can streamline your operations and integrate seamlessly into complex workflows. Here, we’ll explore authentication strategies, Role-Based Access Control (RBAC), custom notifications, and integrating ArgoCD with CI/CD pipelines.

Authentication and RBAC

Securing your ArgoCD setup involves configuring authentication and authorization. You can use either local users or external providers like LDAP, SSO, or OAuth for authentication. For RBAC, define roles within the argocd-rbac-cm ConfigMap.

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd
data:
  policy.csv: |
    g, user, role:admin
    g, user@domain.com, role:readonly

This snippet grants admin access to ‘user’ and read-only access to ‘user@domain.com’. Customize according to your organization’s needs.

Custom Notifications

ArgoCD allows you to create notifications for certain events using the Argo CD Notifications Engine. You can configure alerts for deployment statuses and sync errors via various channels such as Slack, email, or webhooks.

Integration with CI/CD Pipelines

Integrating ArgoCD with CI/CD systems like Jenkins, GitLab CI, or GitHub Actions enhances your deployment workflow. When a CI job completes, it can trigger ArgoCD to sync changes, ensuring automated deployments and reducing the need for manual intervention.

Monitoring and Security Best Practices

Proper monitoring and security are imperative for maintaining a healthy application lifecycle. ArgoCD integrates well with monitoring tools like Prometheus and Grafana to provide visibility into your deployments.

Prometheus and Grafana Integration

ArgoCD can expose metrics using the Prometheus format. Achieve this by enabling metrics in the argocd-server component and visualizing them using Grafana dashboards.

--metrics.port=9090

This command line argument enables the Prometheus metrics endpoint. Read more on configuring and using Prometheus at their official documentation.

Security Best Practices

Applying security best practices involves securing repositories, encrypting secrets, and maintaining an audit log. Tools like HashiCorp Vault or Kubernetes Secrets ensure secrets management aligns with industry standards.

Architecture Deep Dive

How does ArgoCD work under the hood? Understanding its architecture can give insights into its scalability and reliability.

ArgoCD architecture typically consists of three main components:

  • API Server: The central component that provides the API interface for the CLI and Web UI.
  • Repo Server: Responsible for managing Git repository access and retrieving application manifests.
  • Application Controller: Continuously monitors live and desired state, facilitating synchronization.

These components communicate with each other and the Kubernetes API server to ensure deployments are automatically and accurately synchronized with the desired state defined in the Git repository.

Learn more about modern software architectures in the Cloud Native section of Collabnix.

Common Pitfalls and Troubleshooting

Deploying a GitOps model with ArgoCD comes with challenges. Here are some common issues and solutions:

  • Issue: Authentication Errors – Ensure proper SSH key configuration if facing permission denied errors when ArgoCD accesses the repository.
  • Solution: Use SSH agent forwarding and verify SSH key fingerprinting.
  • Issue: Sync Failure Due to Manifest Validation – Sometimes manifests may not be in sync due to Kubernetes schema validation issues.
  • Solution: Validate all YAML files using Kustomize or dry-run deployments with kubectl apply --dry-run.
  • Issue: Performance Bottlenecks – ArgoCD sync uses considerable resources for large-scale deployments.
  • Solution: Optimize resource limits and consider horizontal scaling of the ArgoCD components.
  • Issue: UI Not Loading – Often caused by service exposure issues.
  • Solution: Check LoadBalancer services or ingress configurations.

Performance Optimization and Production Tips

Optimizing ArgoCD for production involves scaling, performance tuning, and resource management. Begin with adjusting resource requests and limits based on observed load patterns. Implement horizontal pod autoscaling for the API server to manage increased API requests gracefully.

Consider using tools like KEDA for event-driven autoscaling, especially if integrating ArgoCD in high-demand scenarios.

Additionally, enable audit logs to keep an eye on every change happening within your environment. This not only helps in troubleshooting but is crucial for compliance and security purposes.

Further Reading and Resources

Conclusion

In this extensive guide, we explored setting up ArgoCD for GitOps workflows, connecting Git repositories, and deploying Kubernetes applications. By delving into advanced configurations, monitoring solutions, and performance optimizations, you are equipped to manage your continuous deployment processes efficiently. The next steps could involve exploring ArgoCD’s plugin system or enhancing your clusters with more robust CI/CD pipelines, ensuring your infrastructure evolves as your applications grow. Dive into further readings and immerse yourself in the wealth of resources available to elevate your deployment strategies.

Have Queries? Join https://launchpass.com/collabnix

Collabnix Team The Collabnix Team is a diverse collective of Docker, Kubernetes, and IoT experts united by a passion for cloud-native technologies. With backgrounds spanning across DevOps, platform engineering, cloud architecture, and container orchestration, our contributors bring together decades of combined experience from various industries and technical domains.

Top 10 Real-World Use Cases for OpenClaw AI Agents…

Explore how OpenClaw AI agents are poised to revolutionize industries in 2025 with groundbreaking use cases and adaptable open-source capabilities.
Collabnix Team
9 min read

Building a RAG-Powered Agent with OpenClaw: Step-by-Step Tutorial

Learn how to build a powerful RAG-powered agent using the innovative OpenClaw framework. This comprehensive tutorial guides you through setting up a retrieval and...
Collabnix Team
3 min read

Integrating OpenClaw with Local LLMs Using Ollama and LM…

Learn how to effectively integrate OpenClaw with local LLMs like Ollama and LM Studio to build intelligent, efficient AI agent systems.
Collabnix Team
7 min read
Join our Discord Server
Index