ArgoCD Real-World Implementation Scenarios
Multi-Cluster Management
Setting Up Multi-Cluster Architecture
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: multi-cluster-app
namespace: argocd
spec:
destination:
server: https://kubernetes.default.svc
namespace: production
project: default
source:
path: kustomize/overlays/production
repoURL: https://github.com/your-org/gitops
targetRevision: HEAD
syncPolicy:
automated:
prune: true
selfHeal: true
Cross-Cluster Synchronization
- Managing dependencies
- Cluster registration
- Resource propagation
- Network configuration
Hybrid Cloud Deployments
Cloud Provider Integration
- AWS EKS Configuration
- Azure AKS Setup
- GCP GKE Implementation
- On-premises Integration
Network Considerations
- Cross-cloud connectivity
- Service mesh integration
- Load balancing
- Security groups
Microservices Orchestration
Application Definition
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: microservices
namespace: argocd
spec:
generators:
- list:
elements:
- service: auth
namespace: auth-system
- service: payment
namespace: payment-system
template:
metadata:
name: '{{service}}'
spec:
project: microservices
source:
repoURL: https://github.com/your-org/{{service}}
targetRevision: HEAD
path: kubernetes
destination:
server: https://kubernetes.default.svc
namespace: '{{namespace}}'
Service Dependencies
- Dependency graphs
- Startup order
- Health checks
- Rollback strategies
Production Best Practices
High Availability Setup
- Multiple replicas
- Pod anti-affinity
- Network redundancy
- Backup strategies
Scaling Strategies
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: application-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Compliance and Security
Audit Logging
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
application.resourceTrackingMethod: annotation
resource.customizations: |
argoproj.io/Application:
health.lua: |
hs = {}
hs.status = "Progressing"
hs.message = ""
return hs
Security Measures
- Network policies
- Pod security policies
- Secret management
- Access controls
Disaster Recovery
Backup Configuration
# Backup ArgoCD state
argocd admin export > argocd-backup.yaml
# Backup application configurations
kubectl get applications -n argocd -o yaml > applications-backup.yaml
# Backup secrets
kubectl get secrets -n argocd -o yaml > secrets-backup.yaml
Recovery Procedures
- Infrastructure recovery
- Data restoration
- Application reconciliation
- Validation checks
Performance Optimization
Resource Management
- CPU/Memory tuning
- Storage optimization
- Network throughput
- Cache configuration
Monitoring Setup
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: argocd-metrics
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-metrics
endpoints:
- port: metrics
Case Studies
E-Commerce Platform
- Microservices architecture
- Blue-green deployments
- Canary releases
- A/B testing
Financial Services
- Compliance requirements
- Security measures
- Audit trails
- Zero-downtime updates
SaaS Application
- Multi-tenant setup
- Resource isolation
- Scalability patterns
- Monitoring solutions
Troubleshooting Guide
Common Issues
- Sync failures
- Resource conflicts
- Network problems
- Authentication issues
Debug Procedures
# Check application status
argocd app get <app-name>
# View detailed sync status
argocd app sync <app-name> --debug
# Check controller logs
kubectl logs -n argocd -l app.kubernetes.io/name=argocd-application-controller
Multi-Cluster Management Extended Guide
Cluster Addition Workflow
# Add new cluster to ArgoCD
argocd cluster add <context-name>
# Verify cluster connection
argocd cluster list
# Test cluster access
argocd app list --dest-server <cluster-url>
Multi-Cluster Sync Strategies
Sequential Deployment
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: multi-cluster-app
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "1" # Control sync order
spec:
project: default
source:
repoURL: https://github.com/your-org/gitops
path: kustomize/base
targetRevision: HEAD
destination:
server: https://kubernetes.default.svc
namespace: production
Parallel Deployment
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: parallel-deploy
namespace: argocd
spec:
generators:
- clusters: {} # Deploy to all connected clusters
template:
metadata:
name: '{{name}}-app'
spec:
project: default
source:
repoURL: https://github.com/your-org/gitops
path: kustomize/base
destination:
server: '{{server}}'
namespace: production
Cluster-Specific Configurations
Environment Overrides
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: cluster-specific-app
spec:
source:
repoURL: https://github.com/your-org/gitops
path: kustomize/base
kustomize:
namePrefix: dev-
commonLabels:
environment: development
Homelab-Specific Considerations
Resource Optimization
Limited Resources Setup
apiVersion: v1
kind: ResourceQuota
metadata:
name: argocd-quota
namespace: argocd
spec:
hard:
requests.cpu: "2"
requests.memory: 2Gi
limits.cpu: "4"
limits.memory: 4Gi
Network Optimization
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-network-policy
namespace: argocd
spec:
podSelector:
matchLabels:
app.kubernetes.io/part-of: argocd
ingress:
- from:
- namespaceSelector:
matchLabels:
name: monitoring
Local Storage Configuration
Local Path Provisioner
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-path
provisioner: rancher.io/local-path
volumeBindingMode: WaitForFirstConsumer
Advanced Use Cases
Blue-Green Deployments
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: blue-green-app
spec:
source:
plugin:
name: blue-green
repoURL: https://github.com/your-org/gitops
syncPolicy:
automated:
prune: true
selfHeal: true
Canary Deployments
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: canary-app
annotations:
argocd-image-updater.argoproj.io/image-list: app=your-org/app:latest
spec:
source:
repoURL: https://github.com/your-org/gitops
path: kustomize/overlays/canary
Integration Examples
Monitoring Stack
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: monitoring-stack
spec:
source:
repoURL: https://github.com/prometheus-community/helm-charts
targetRevision: HEAD
helm:
values: |
grafana:
enabled: true
prometheus:
enabled: true
CI/CD Pipeline Integration
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: jenkins-integration
spec:
source:
repoURL: https://github.com/your-org/jenkins-config
path: kubernetes
directory:
recurse: true
Troubleshooting Advanced Scenarios
Multi-Cluster Issues
# Check cluster connectivity
argocd cluster get <cluster-url>
# Verify cluster resources
kubectl --context=<cluster-context> get nodes
# Test application deployment
argocd app sync <app-name> --dest-server <cluster-url>
Sync Issues
# Debug sync problems
argocd app sync <app-name> --debug
# Check resource health
argocd app get <app-name> --refresh
# View detailed sync status
argocd app history <app-name>
Performance Problems
# Monitor sync performance
argocd app list --output wide
# Check resource utilization
kubectl top pods -n argocd
# View detailed metrics
argocd admin metrics
Best Practices
Security Measures
- Implement network policies
- Use RBAC effectively
- Rotate credentials regularly
- Enable audit logging
High Availability
- Multiple replicas
- Pod anti-affinity
- Resource limits
- Backup strategies
Monitoring
- Prometheus integration
- Grafana dashboards
- Alert configuration
- Log aggregation
Next Steps
Return to the main guide or explore Integration Patterns.