System Architecture Overview¶
This document provides a high-level overview of the ArgoCD demonstration project architecture, explaining how the various components interact to implement GitOps principles.
Architecture Diagram¶
graph TD
subgraph "Git Repository"
A[Application Manifests]
B[Helm Charts]
C[Infrastructure Code]
end
subgraph "Kubernetes Cluster"
subgraph "ArgoCD"
D[ArgoCD Server]
E[ArgoCD Repo Server]
F[ArgoCD Application Controller]
G[ArgoCD Redis]
H[ArgoCD Dex Server]
end
subgraph "Applications"
I[App 1]
J[App 2]
end
end
subgraph "Infrastructure"
K[Terraform]
L[Kind Cluster]
end
A -->|Source of Truth| E
B -->|Chart Templates| E
E -->|Manifests| F
F -->|Reconciles| I
F -->|Reconciles| J
K -->|Provisions| D
K -->|Provisions| E
K -->|Provisions| F
K -->|Provisions| G
K -->|Provisions| H
L -->|Hosts| D
Core Components¶
Git Repository¶
The Git repository serves as the single source of truth for the entire system, containing:
- Application Manifests: Kubernetes manifests defining the desired state of applications
- Helm Charts: Templated application packages for consistent deployment
- Infrastructure Code: Terraform configurations for provisioning infrastructure
ArgoCD¶
ArgoCD is the GitOps continuous delivery tool that ensures the cluster state matches the desired state defined in Git:
- ArgoCD Server: Provides the API and UI for managing applications
- Repo Server: Responsible for cloning Git repositories and generating Kubernetes manifests
- Application Controller: Monitors running applications and compares their state to the desired state
- Redis: Caches repository information and serves as a shared cache
- Dex Server: Optional component for SSO authentication
Kubernetes Cluster¶
The Kubernetes cluster is created using Kind (Kubernetes in Docker) for local development:
- Control Plane: Manages the cluster state and API
- Worker Nodes: Run the application workloads
- Namespaces: Logical separation of applications and components
Infrastructure Management¶
- Terraform: Provisions and configures ArgoCD in a reproducible manner
- Task Runner: Automates common operations and workflows
Workflow¶
- Development: Changes are made to application code or configuration in Git
- Commit & Push: Changes are committed and pushed to the Git repository
- Detection: ArgoCD detects changes in the Git repository
- Comparison: ArgoCD compares the desired state with the current state
- Reconciliation: ArgoCD applies changes to bring the cluster to the desired state
- Monitoring: ArgoCD continuously monitors for drift between desired and actual state
Environment Structure¶
The project supports multiple environments through directory structure:
environments/
├── dev/
│ ├── apps/
│ │ ├── app1/
│ │ └── app2/
│ └── helm/
│ └── myargoapp-chart/
└── README.md
Each environment contains: - Application-specific configurations - Environment-specific values - Helm charts for templated applications
Security Considerations¶
- RBAC: Role-Based Access Control for ArgoCD and Kubernetes resources
- Secure Defaults: ArgoCD is configured with secure default settings
- Least Privilege: Components operate with minimal required permissions
- Secrets Management: Sensitive information is properly managed
Scalability¶
While this demonstration uses a single-node Kind cluster, the architecture is designed to be scalable:
- Horizontal Scaling: Applications can be scaled horizontally
- Multi-Environment: Structure supports multiple environments (dev, staging, prod)
- Multi-Cluster: ArgoCD can manage multiple Kubernetes clusters