Argo CD как GitOps-контроллер
Сравнивает desired state в Git с live state в Kubernetes и приводит cluster к Git по заданной политике. Поддерживает plain-YAML, Kustomize, Helm, Jsonnet, custom config management plugins.
Sync policy
Поле syncPolicy.automated:
prune: true— удаляет ресурсы, исчезнувшие из Git;selfHeal: true— восстанавливает ручные изменения в кластере;allowEmpty: false(default) — защищает от пустого манифеста, который удалил бы всё.
Доп. опции в syncOptions: CreateNamespace=true, PrunePropagationPolicy=foreground, ServerSideApply=true, Replace=true, RespectIgnoreDifferences=true.
targetRevision: HEAD — антипаттерн в production: ссылается на «последний коммит» дефолтной ветки и нарушает воспроизводимость. Использовать тег или SHA.
Sync waves и hooks
Sync waves — порядок применения через annotation argocd.argoproj.io/sync-wave: "-1" (отрицательные применяются раньше). Полезно для CRD → operator → workload.
Resource hooks через argocd.argoproj.io/hook:
PreSync— миграции БД до деплоя;Sync— основной поток;PostSync— smoke tests;SyncFail— cleanup при ошибке;- политики
HookSucceeded/HookFailed/BeforeHookCreationопределяют lifecycle hook-ресурса.
Drift detection и rollback
Argo CD непрерывно сравнивает Git и cluster. При расхождении:
- статус
OutOfSync; selfHealвозвращает к Git автоматически;- ручной откат —
git revertкоммит и sync.
Прямой откат на предыдущий деплой:
argocd app history demo-app
argocd app rollback demo-app <history-id>
argocd app rollback отключает auto-sync на время отката, иначе controller сразу вернёт состояние к Git.
ApplicationSet
Шаблонизация Application для multi-cluster / multi-tenant:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: tenants
spec:
generators:
- list:
elements:
- name: team-a
cluster: prod
- name: team-b
cluster: prod
template:
metadata:
name: '{{name}}'
spec:
project: default
source:
repoURL: https://git.example/apps.git
targetRevision: v1.4.2
path: 'apps/{{name}}'
destination:
server: https://kubernetes.default.svc
namespace: '{{name}}'
Генераторы: List, Cluster, Git (files/directories), Matrix, PullRequest, SCMProvider.
Базовый Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: demo-app
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps.git
path: guestbook
targetRevision: v0.5.0 # тег или SHA, не HEAD
destination:
server: https://kubernetes.default.svc
namespace: demo
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
- ServerSideApply=true
Операционные команды
argocd app get demo-app
argocd app sync demo-app
argocd app history demo-app
argocd app rollback demo-app 12
argocd app diff demo-app
Guardrails
- pre-merge: lint/scan/tests/policy (OPA/Kyverno);
- разделение окружений и promotion strategy через теги/ветки;
- запрет
targetRevision: HEADв prod; - runbook для
git revertиargocd app rollback.