Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Kubernetes - Using GitOps for Deployments

Introduction

GitOps is a deployment strategy that uses Git repositories as the source of truth for declarative infrastructure and application configuration. This guide provides an understanding of how to use GitOps for Kubernetes deployments to achieve automated, auditable, and version-controlled operations.

Key Points:

  • GitOps uses Git repositories as the single source of truth for Kubernetes deployments.
  • Changes to the desired state are made through pull requests, ensuring a clear audit trail.
  • Automation tools continuously reconcile the actual state with the desired state defined in Git.

What is GitOps?

GitOps is a deployment strategy that leverages Git repositories to manage and deploy Kubernetes clusters and applications. It uses Git as the single source of truth, allowing for version-controlled, auditable, and automated deployment processes. GitOps ensures that the desired state of the system, as defined in Git, is continuously reconciled with the actual state of the Kubernetes cluster.

# Example of a Kubernetes manifest stored in a Git repository
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-container
        image: my-image:v1
                

Implementing GitOps

To implement GitOps, follow these steps:

  1. Set Up a Git Repository: Create a Git repository to store your Kubernetes manifests and configuration files.
  2. Define Desired State: Store the desired state of your Kubernetes clusters and applications in the Git repository.
  3. Use a GitOps Tool: Use a GitOps tool, such as Argo CD or Flux, to continuously reconcile the actual state with the desired state defined in Git.
  4. Make Changes Through Pull Requests: Make changes to the desired state through pull requests, ensuring an auditable change history.
  5. Monitor and Reconcile: Continuously monitor and reconcile the actual state with the desired state using the GitOps tool.

Setting Up a Git Repository

Create a Git repository to store your Kubernetes manifests and configuration files. Organize the repository to separate different environments and applications:

# Example of a Git repository structure
├── apps
│   ├── my-app
│   │   ├── base
│   │   │   ├── deployment.yaml
│   │   │   └── service.yaml
│   │   ├── overlays
│   │   │   ├── dev
│   │   │   │   └── kustomization.yaml
│   │   │   ├── staging
│   │   │   │   └── kustomization.yaml
│   │   │   └── prod
│   │   │       └── kustomization.yaml
└── clusters
    ├── dev
    │   └── kustomization.yaml
    ├── staging
    │   └── kustomization.yaml
    └── prod
        └── kustomization.yaml
                

Using a GitOps Tool

Use a GitOps tool, such as Argo CD or Flux, to continuously reconcile the actual state with the desired state defined in Git. Here is an example of setting up Argo CD for GitOps:

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

# Access the Argo CD UI
kubectl port-forward svc/argocd-server -n argocd 8080:443

# Log in to the Argo CD UI and configure your Git repository
# Use the following command to get the initial admin password
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 --decode
                

Making Changes Through Pull Requests

Make changes to the desired state by creating pull requests in the Git repository. This ensures an auditable change history and allows for code reviews and approvals before changes are applied to the cluster.

# Example of a pull request to update the image version
- name: my-container
  image: my-image:v1
+ name: my-container
  image: my-image:v2
                

Monitoring and Reconciling

Continuously monitor and reconcile the actual state with the desired state using the GitOps tool. Ensure that any drift between the actual and desired state is detected and corrected automatically.

# Example of monitoring with Argo CD
# List applications managed by Argo CD
argocd app list

# Get the status of a specific application
argocd app get my-app

# Sync the application to reconcile the state
argocd app sync my-app
                

Best Practices

Follow these best practices when implementing GitOps for Kubernetes deployments:

  • Use a Consistent Directory Structure: Organize your Git repository with a consistent directory structure for different environments and applications.
  • Implement Code Reviews: Use pull requests and code reviews to ensure changes are reviewed and approved before being applied.
  • Automate Testing: Automate testing for changes to the desired state to catch issues early.
  • Monitor Continuously: Continuously monitor the actual state and reconcile it with the desired state to detect and correct drift.
  • Document Processes: Document your GitOps processes and guidelines to ensure consistency and understanding across the team.

Conclusion

This guide provided an overview of using GitOps for Kubernetes deployments, including setting up a Git repository, using a GitOps tool, making changes through pull requests, and monitoring and reconciling the state. By following these guidelines and best practices, you can achieve automated, auditable, and version-controlled Kubernetes operations.