Skip to content

πŸš€ Production-ready GitOps reference architecture: ArgoCD + Helm + Terraform + Kubernetes. Demonstrates modern deployment patterns, progressive delivery, and infrastructure automation.

License

Notifications You must be signed in to change notification settings

thomasvincent/gitops-infrastructure-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

GitOps Infrastructure Demo

Terraform Kubernetes ArgoCD Argo Rollouts License: MIT

Production-ready GitOps reference architecture demonstrating modern Kubernetes deployment patterns with progressive delivery, policy enforcement, and observability.

πŸ—οΈ Architecture

flowchart TB
    subgraph Developer["Developer Workflow"]
        DEV[Developer] -->|push code| GIT[GitHub]
        GIT -->|trigger| CI[GitHub Actions]
        CI -->|build & push| ECR[ECR Registry]
        CI -->|update| VALUES[Helm Values]
    end

    subgraph GitOps["GitOps Control Plane"]
        VALUES -->|watch| ARGO[ArgoCD]
        ARGO -->|sync| K8S[Kubernetes Cluster]
    end

    subgraph Cluster["EKS Cluster"]
        K8S --> ROLLOUT[Argo Rollouts]
        ROLLOUT -->|canary 10%| CANARY[Canary Pods]
        ROLLOUT -->|stable 90%| STABLE[Stable Pods]
    end

    subgraph Observability["Observability"]
        K8S --> PROM[Prometheus]
        PROM --> GRAF[Grafana]
        PROM -->|analysis| ROLLOUT
    end
Loading

Full architecture documentation β†’

✨ What This Demonstrates

Capability Implementation Location
GitOps Workflow ArgoCD with App of Apps pattern argocd/
Progressive Delivery Argo Rollouts with canary analysis rollouts/
Infrastructure as Code Terraform modules for EKS terraform/
Policy as Code Kyverno admission policies policies/
Observability Prometheus, Grafana, AlertManager observability/
Secret Management External Secrets Operator + AWS SM secrets/
Multi-Environment Dev β†’ Staging β†’ Prod promotion argocd/applicationsets/

πŸ“‚ Repository Structure

β”œβ”€β”€ terraform/                 # Infrastructure provisioning
β”‚   β”œβ”€β”€ modules/
β”‚   β”‚   β”œβ”€β”€ eks/              # EKS cluster module
β”‚   β”‚   β”œβ”€β”€ vpc/              # VPC networking
β”‚   β”‚   └── argocd/           # ArgoCD bootstrap
β”‚   └── environments/
β”‚       └── dev/              # Environment configs
β”œβ”€β”€ argocd/                   # ArgoCD application definitions
β”‚   β”œβ”€β”€ apps/                 # Application manifests
β”‚   β”œβ”€β”€ projects/             # ArgoCD projects (RBAC)
β”‚   └── applicationsets/      # Dynamic multi-env generation
β”œβ”€β”€ helm/                     # Helm charts
β”‚   └── sample-app/           # Example application chart
β”œβ”€β”€ rollouts/                 # Argo Rollouts strategies
β”‚   └── canary-strategy.yaml  # Canary with Prometheus analysis
β”œβ”€β”€ policies/                 # Kyverno policies
β”‚   └── kyverno/              # Security & best practice policies
β”œβ”€β”€ observability/            # Monitoring stack
β”‚   └── prometheus/           # Prometheus, Grafana, alerts
β”œβ”€β”€ secrets/                  # External Secrets configuration
β”œβ”€β”€ docs/                     # Documentation
β”‚   β”œβ”€β”€ architecture.md       # System architecture
β”‚   └── adr/                  # Architecture Decision Records
└── .github/
    └── workflows/            # CI/CD pipelines

πŸš€ Quick Start

Prerequisites

  • AWS CLI configured with appropriate credentials
  • Terraform >= 1.6
  • kubectl >= 1.28
  • Helm >= 3.13

1. Provision Infrastructure

cd terraform/environments/dev
terraform init
terraform plan
terraform apply

2. Configure kubectl

aws eks update-kubeconfig --name gitops-demo-dev --region us-west-2

3. Access ArgoCD

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

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

πŸ”„ Progressive Delivery

This repo demonstrates canary deployments with automated analysis:

strategy:
  canary:
    steps:
    - setWeight: 10          # 10% traffic to canary
    - pause: {duration: 2m}
    - analysis:              # Check error rate via Prometheus
        templates:
        - templateName: success-rate
    - setWeight: 50          # Promote to 50%
    - setWeight: 100         # Full rollout

Automatic rollback triggers when:

  • Error rate > 1%
  • P99 latency > 500ms
  • Pod restarts detected

See full rollout configuration β†’

πŸ›‘οΈ Policy Enforcement

Kyverno policies enforce security and best practices:

Policy Enforcement Description
require-labels Enforce Standard labels for all workloads
require-resource-limits Enforce CPU/memory limits required
disallow-privileged Enforce No privileged containers
require-probes Audit Liveness/readiness probes

See all policies β†’

πŸ“Š Observability

Pre-configured alerting for GitOps workflows:

  • ArgoCD App Out of Sync (>15 min)
  • ArgoCD App Health Degraded
  • Rollout Stalled (>30 min)
  • High Error Rate (>1%)
  • High Latency (P99 > 500ms)

See alerting rules β†’

πŸ“š Architecture Decision Records

Key decisions documented:

πŸ” Security Features

  • RBAC: Fine-grained access control for ArgoCD projects
  • Network Policies: Namespace isolation and traffic control
  • External Secrets: AWS Secrets Manager integration (no secrets in Git)
  • Kyverno Policies: Admission control for security standards
  • Image Scanning: Trivy integration in CI pipeline

Author

Thomas Vincent β€” Senior DevOps Engineer

License

MIT License - see LICENSE for details.

About

πŸš€ Production-ready GitOps reference architecture: ArgoCD + Helm + Terraform + Kubernetes. Demonstrates modern deployment patterns, progressive delivery, and infrastructure automation.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •