skip to content
Astro Cactus

Advanced ArgoCD Patterns and Best Practices

/ 3 min read

Series Navigation

Advanced ArgoCD Patterns and Best Practices

In this fourth part of our ArgoCD series, we’ll explore advanced patterns, custom resources, and automation strategies.

Custom Resource Definitions

Creating Custom Health Checks

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: healthchecks.argoproj.io
spec:
group: argoproj.io
names:
kind: HealthCheck
plural: healthchecks
scope: Namespaced
versions:
- name: v1alpha1
served: true
storage: true

Custom Sync Waves

apiVersion: batch/v1
kind: Job
metadata:
annotations:
argocd.argoproj.io/sync-wave: "5"
argocd.argoproj.io/hook: Sync

Webhook Integrations

GitHub Integration

apiVersion: v1
kind: Secret
metadata:
name: github-webhook
namespace: argocd
stringData:
github.secret: <webhook-secret>

Custom Webhook

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
name: argocd-server-ingress
spec:
rules:
- http:
paths:
- path: /api/webhook
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 80

Automation Patterns

ApplicationSet Controllers

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: guestbook
spec:
generators:
- list:
elements:
- cluster: development
url: https://dev.example.com
- cluster: staging
url: https://staging.example.com
template:
metadata:
name: '{{cluster}}-guestbook'
spec:
source:
repoURL: https://github.com/argoproj/argocd-example-apps
targetRevision: HEAD
path: guestbook
destination:
server: '{{url}}'
namespace: guestbook

Auto-Pruning

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
spec:
syncPolicy:
automated:
prune: true
allowEmpty: true

Disaster Recovery

Backup Strategy

apiVersion: velero.io/v1
kind: Backup
metadata:
name: argocd-backup
spec:
includedNamespaces:
- argocd
storageLocation: default
volumeSnapshotLocations:
- default

Recovery Process

Terminal window
# Restore ArgoCD namespace
velero restore create --from-backup argocd-backup
# Verify restoration
kubectl get applications -n argocd

Advanced Security Patterns

RBAC with SSO

apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
data:
policy.csv: |
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
g, "org:team-alpha", role:org-admin

Network Policies

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-server-network-policy
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
ingress:
- from:
- namespaceSelector:
matchLabels:
name: ingress-nginx

Performance Optimization

Resource Management

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
spec:
source:
plugin:
env:
- name: ENABLE_CACHE
value: "true"

Scaling Strategies

apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-repo-server
spec:
replicas: 3
template:
spec:
containers:
- name: argocd-repo-server
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"

Monitoring and Alerting

Prometheus Rules

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: argocd-alerts
spec:
groups:
- name: argocd
rules:
- alert: ApplicationSyncFailed
expr: argocd_app_sync_status{status="Failed"} > 0

Notification Templates

apiVersion: notifications.argoproj.io/v1alpha1
kind: Template
metadata:
name: sync-failed
spec:
notification:
message: |
Application {{.app.metadata.name}} sync failed

Best Practices Summary

  1. Version Control

    • Use semantic versioning
    • Maintain changelog
    • Document breaking changes
  2. Configuration Management

    • Use environment variables
    • Implement secrets rotation
    • Version configuration files
  3. Deployment Strategy

    • Implement blue-green deployments
    • Use canary releases
    • Enable automatic rollbacks
  4. Monitoring

    • Set up comprehensive metrics
    • Configure meaningful alerts
    • Maintain audit logs

Conclusion

Advanced ArgoCD patterns require:

  • Custom resource management
  • Robust automation
  • Comprehensive security
  • Effective disaster recovery

In the final part of our series, we’ll cover:

  • Real-world case studies
  • Migration strategies
  • Integration patterns
  • Future roadmap