Work in Progress: This page is under development. Use the feedback button on the bottom right to help us improve it.

ArgoCD GitOps

Deploy Laminar using GitOps with ArgoCD.

Prerequisites

  • EKS cluster running (see EKS deployment)
  • ArgoCD installed in argo namespace
  • kubectl configured

Quick Start

cd laminar-infra
 
# Apply ArgoCD project and applications
task argocd:apply
 
# List applications
task argocd:list
 
# Sync all
task argocd:sync-all

Architecture

ArgoCD uses an app-of-apps pattern:

laminar (AppProject)
ā”œā”€ā”€ laminar-tenants-app-of-app (parent)
│   ā”œā”€ā”€ tenant-e6data
│   └── tenant-highradius
ā”œā”€ā”€ laminar-product
ā”œā”€ā”€ laminar-monitoring
└── laminar-connectors

Applications

ApplicationNamespaceChart
tenant-e6datatenant-e6datalaminar-core
tenant-highradiustenant-highradiuslaminar-core
laminar-productlaminar-productlaminar-product
laminar-monitoringlaminar-monitoringlaminar-monitoring
laminar-connectorslaminar-connectorslaminar-connectors

Commands

task argocd:apply           # Apply all resources
task argocd:list            # List applications
task argocd:sync APP=<name> # Sync specific app
task argocd:sync-all        # Sync all apps
task argocd:delete APP=<name>  # Delete app

Structure

argocd/
ā”œā”€ā”€ Taskfile.yml
ā”œā”€ā”€ projects/
│   └── laminar.yaml        # AppProject definition
└── applications/
    ā”œā”€ā”€ laminar-tenants-app-of-app.yaml
    ā”œā”€ā”€ laminar-product.yaml
    ā”œā”€ā”€ laminar-monitoring.yaml
    ā”œā”€ā”€ laminar-connectors.yaml
    └── tenants/
        ā”œā”€ā”€ e6data.yaml
        └── highradius.yaml

Add New Tenant

  1. Create Helm values:
mkdir -p k8s/laminar-core/tenants/newtenant
cp k8s/laminar-core/tenants/e6data/values-eks.yaml k8s/laminar-core/tenants/newtenant/
# Edit values as needed
  1. Create ArgoCD application:
# argocd/applications/tenants/newtenant.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: tenant-newtenant
  namespace: argo
spec:
  project: laminar
  source:
    repoURL: git@github.com:e6data/laminar-infra.git
    targetRevision: main
    path: k8s/laminar-core
    helm:
      valueFiles:
        - values-eks.yaml
        - tenants/newtenant/values-eks.yaml
  destination:
    server: https://kubernetes.default.svc
    namespace: tenant-newtenant
  syncPolicy:
    automated:
      prune: true
    syncOptions:
      - CreateNamespace=true
  1. Apply:
task argocd:apply

AppProject Config

The laminar project allows deployments to:

  • tenant-* namespaces
  • laminar-* namespaces
  • argo namespace

Source: git@github.com:e6data/laminar-infra.git

CI/CD Integration

ArgoCD works with Argo Workflows for a complete CI/CD pipeline. See CI/CD for details.

Workflow

  1. Build: Argo Workflows builds and pushes images to ECR
  2. Update: Commit new image tag to values-eks.yaml
  3. Sync: ArgoCD detects the change and deploys automatically

Updating Image Tags

After a successful build, update the deployment:

Option 1: Git Commit (Recommended)

# Edit values file
vim k8s/laminar-product/values-eks.yaml
# Update image.tag for console/product
 
# Commit and push
git add . && git commit -m "Update image tags" && git push
 
# ArgoCD syncs automatically

Option 2: ArgoCD Override

# Override without git commit
argocd app set laminar-product \
  --helm-set console.image.tag=a1b2c3d
 
argocd app sync laminar-product

Sync Policies

All applications use automated sync with:

  • Prune: Removes resources deleted from git
  • Self-heal: Reverts manual cluster changes
  • CreateNamespace: Auto-creates target namespace

Access ArgoCD UI

# KIND/Local
kubectl port-forward svc/argocd-server -n argo 8080:443
# Open https://localhost:8080
 
# EKS
# Navigate to https://cd.lmnr.cloud

Get the admin password:

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