Files
2026-01-27 17:35:45 -05:00

127 lines
2.0 KiB
Markdown

# ArgoCD GitOps Patterns
## Application Definition
```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/org/repo
targetRevision: HEAD
path: k8s/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: myapp
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
```
## Sync Waves
```yaml
metadata:
annotations:
argocd.argoproj.io/sync-wave: "-1" # Deploy first
---
metadata:
annotations:
argocd.argoproj.io/sync-wave: "0" # Default
---
metadata:
annotations:
argocd.argoproj.io/sync-wave: "1" # Deploy last
```
## ApplicationSet
```yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp-set
spec:
generators:
- list:
elements:
- env: dev
cluster: dev-cluster
- env: prod
cluster: prod-cluster
template:
metadata:
name: 'myapp-{{env}}'
spec:
source:
repoURL: https://github.com/org/repo
path: 'k8s/overlays/{{env}}'
destination:
server: '{{cluster}}'
namespace: myapp
```
## Multi-Cluster
```yaml
apiVersion: v1
kind: Secret
metadata:
name: prod-cluster
labels:
argocd.argoproj.io/secret-type: cluster
stringData:
name: prod
server: https://prod-cluster.example.com
config: |
{
"bearerToken": "...",
"tlsClientConfig": {
"insecure": false,
"caData": "..."
}
}
```
## App of Apps
```yaml
# Root application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: root
spec:
source:
path: apps/ # Contains Application manifests
destination:
namespace: argocd
```
## CLI Commands
```bash
# Login
argocd login argocd.example.com
# Sync
argocd app sync myapp
argocd app sync myapp --prune
# Rollback
argocd app rollback myapp
# Diff
argocd app diff myapp
# History
argocd app history myapp
```